LinuxÏÂI2CÉ豸Çý¶¯¿ª·¢ºÍʵÏÖ
¡¡I2C×ÜÏß¾ßÓнṹ¼òµ¥Ê¹Ó÷½±ãµÄÌØµã¡£±¾ÎÄÃèÊöÁËlinuxÏÂI2CÇý¶¯µÄ½á¹¹£¬²¢ÔÚ´Ë»ù´¡Éϸø³öÁËI2CÉ豸Çý¶¯ºÍÓ¦ÓõÄʵÏÖ¡£
¡¡¡¡1 ÒýÑÔ
¡¡¡¡I2C (Inter£Integrated Circuit)×ÜÏßÊÇÒ»ÖÖÓÉPHILIPS¹«Ë¾¿ª·¢µÄÁ½Ïßʽ´®ÐÐ×ÜÏߣ¬ÓÃÓÚÁ¬½Ó΢¿ØÖÆÆ÷¼°ÆäÍâΧÉ豸¡£I2C×ÜÏß×îÖ÷ÒªµÄÓŵãÊÇÆä¼òµ¥ÐÔºÍÓÐЧÐÔ¡£ÓÉÓÚ½Ó¿ÚÖ±½ÓÔÚ×é¼þÖ®ÉÏ£¬Òò´ËI2C×ÜÏßÕ¼ÓõĿռä·Ç³£Ð¡£¬¼õÉÙÁ˵ç·°åµÄ¿Õ¼äºÍоƬ¹Ü½ÅµÄÊýÁ¿£¬½µµÍÁË»¥Áª³É±¾¡£I2C×ÜÏß×î³õΪÒôƵºÍÊÓÆµÉ豸¿ª·¢£¬ÏÖÒÑÓ¦ÓÃÓÚ¸÷ÖÖ·þÎñÓë¹ÜÀí³¡ºÏ£¬À´ÊµÏÖÅäÖûòÕÆÎÕ×é¼þµÄ¹¦ÄÜ״̬£¬ÈçµçÔ´¡¢ÏµÍ³·çÉÈ¡¢ÏµÍ³Î¶ȵȲÎÊý£¬Ôö¼ÓÁËϵͳµÄ°²È«ÐÔ£¬·½±ãÁ˹ÜÀí¡£
¡¡¡¡2 I2C×ÜÏ߸ÅÊö
¡¡¡¡I2C×ÜÏßÊÇÓÉÊý¾ÝÏßSDAºÍʱÖÓSCL¹¹³ÉµÄ´®ÐÐ×ÜÏߣ¬¿É·¢ËͺͽÓÊÕÊý¾Ý£¬Ã¿¸öÆ÷¼þ¶¼ÓÐÒ»¸öΩһµÄµØÖ·Ê¶±ð¡£I2C ¹æ³ÌÔËÓÃÖ÷/´ÓË«ÏòͨѶ¡£Æ÷¼þ·¢ËÍÊý¾Ýµ½×ÜÏßÉÏ£¬Ôò¶¨ÒåΪ·¢ËÍÆ÷£¬Æ÷¼þ½ÓÊÕÊý¾ÝÔò¶¨ÒåΪ½ÓÊÕÆ÷¡£Ö÷Æ÷¼þºÍ´ÓÆ÷¼þ¶¼¿ÉÒÔ¹¤×÷ÓÚ½ÓÊպͷ¢ËÍ״̬¡£×ÜÏß±ØÐëÓÉÖ÷Æ÷¼þ£¨Í¨³£ÎªÎ¢¿ØÖÆÆ÷£©¿ØÖÆ£¬Ö÷Æ÷¼þ²úÉú´®ÐÐʱÖÓ£¨SCL£©¿ØÖÆ×ÜÏߵĴ«Êä·½Ïò£¬²¢²úÉúÆðʼºÍÍ£Ö¹Ìõ¼þ¡£SDAÏßÉϵÄÊý¾Ý״̬½öÔÚSCLΪµÍµçƽµÄÆÚ¼ä²ÅÄܸı䣬SCLΪ¸ßµçƽµÄÆÚ¼ä£¬SDA״̬µÄ¸Ä±ä±»ÓÃÀ´±íʾÆðʼºÍÍ£Ö¹Ìõ¼þ¡£
¡¡¡¡I2C×ÜÏßÔÚ´«ËÍÊý¾Ý¹ý³ÌÖй²ÓÐÈýÖÖÀàÐÍÐźţ¬ËüÃÇ·Ö±ðÊÇ£º¿ªÊ¼Ðźš¢½áÊøÐźźÍÓ¦´ðÐźš£
¡¡¡¡¿ªÊ¼ÐźţºSCLΪ¸ßµçƽʱ£¬SDAÓÉ¸ßµçÆ½ÏòµÍµçÆ½Ìø±ä£¬¿ªÊ¼´«ËÍÊý¾Ý¡£
¡¡¡¡½áÊøÐźţºSCLΪµÍµçƽʱ£¬SDAÓÉµÍµçÆ½Ïò¸ßµçÆ½Ìø±ä£¬½áÊø´«ËÍÊý¾Ý¡£
¡¡¡¡Ó¦´ðÐźţº½ÓÊÕÊý¾ÝµÄICÔÚ½ÓÊÕµ½8bitÊý¾Ýºó£¬Ïò·¢ËÍÊý¾ÝµÄIC·¢³öÌØ¶¨µÄµÍµçƽÂö³å£¬±íʾÒÑÊÕµ½Êý¾Ý¡£CPUÏòÊܿص¥Ôª·¢³öÒ»¸öÐźź󣬵ȴýÊܿص¥Ôª·¢³öÒ»¸öÓ¦´ðÐźţ¬CPU½ÓÊÕµ½Ó¦´ðÐźź󣬸ù¾Ýʵ¼ÊÇé¿ö×÷³öÊÇ·ñ¼ÌÐø´«µÝÐźŵÄÅжϡ£ÈôδÊÕµ½Ó¦´ðÐźţ¬ÓÉÅжÏΪÊܿص¥Ôª³öÏÖ¹ÊÕÏ¡£
¡¡¡¡3 LinuxµÄI2CÇý¶¯¼Ü
¡¡¡¡LinuxÖÐI2C×ÜÏßµÄÇý¶¯·ÖΪÁ½¸ö²¿·Ö£¬×ÜÏßÇý¶¯£¨BUS£©ºÍÉ豸Çý¶¯£¨DEVICE£©¡£ÆäÖÐ×ÜÏßÇý¶¯µÄÖ°Ôð£¬ÊÇΪϵͳÖÐÿ¸öI2C×ÜÏßÔö¼ÓÏàÓ¦µÄ¶Áд·½·¨¡£µ«ÊÇ×ÜÏßÇý¶¯±¾Éí²¢²»»á½øÐÐÈκεÄͨѶ£¬ËüÖ»ÊÇ´æÔÚÄÇÀµÈ´ýÉ豸Çý¶¯µ÷ÓÃÆäº¯Êý£¬²Î¼ûͼ1¡£
¡¡¡¡É豸Çý¶¯ÔòÊÇÓë¹ÒÔÚI2C×ÜÏßÉϵľßÌåµÄÉ豸ͨѶµÄÇý¶¯¡£Í¨¹ýI2C×ÜÏßÇý¶¯ÌṩµÄº¯Êý£¬É豸Çý¶¯¿ÉÒÔºöÂÔ²»Í¬×ÜÏß¿ØÖÆÆ÷µÄ²îÒ죬²»¿¼ÂÇÆäʵÏÖϸ½ÚµØÓëÓ²¼þÉ豸ͨѶ¡£
ͼ1 LinuxÄÚºËI2C×ÜÏßÇý¶¯³ÌÐò¹¹¼Ü
¡¡¡¡ÔÚÎÒÃǵÄLinuxÇý¶¯µÄi2cÎļþ¼ÐÏ
Ïà¹ØÎĵµ£º
Ò»¡¢ VmwareÏÂLinuxµÄ°²×°ºÍʹÓÃ
1. ÏÂÔØLinux ¾µÏñ£¨isoÎļþ£©£¬ÎÒʹÓõÄÊÇRedHat Linux5 server¡£
2. ÔÚVmwareÖÐн¨Ò»¸öÐéÄâ»ú
  ......
²Ù×÷ϵͳÄں˿ÉÄÜÊÇ΢Äںˣ¬Ò²¿ÉÄÜÊǵ¥Äںˣ¨ºóÕßÓÐʱ³ÆÖ®ÎªºêÄÚºËMacrokernel£©¡£°´ÕÕÀàËÆ·â×°µÄÐÎʽ£¬ÕâЩÊõÓﶨÒåÈçÏ£º
µ¥ÄںˣºÒ²³ÆÎªºêÄںˡ£½«Äں˴ÓÕûÌåÉÏ×÷Ϊһ¸ö´ó¹ý³ÌʵÏÖ£¬²¢Í¬Ê±ÔËÐÐÔÚÒ»¸öµ¥¶ÀµÄµØÖ·¿Õ¼ä¡£ËùÓеÄÄں˷þÎñ¶¼ÔÚÒ»¸öµØÖ·¿Õ¼äÔËÐУ¬Ï໥֮¼äÖ±½Óµ÷Óú¯Êý£¬¼òµ¥¸ßЧ¡£Î¢Ä ......
Linux Device Drivers, 3rd Edition
2.3.1. User Space and Kernel Space
Äں˿ռäºÍÓû§¿Õ¼ä
Unix transfers execution from user space to kernel space whenever an application issues a system call or is suspended by a hardware interrupt. Kernel code executing a system call is working in the context of a ......
#include <iostream>
#include <cstdlib>
using namespace std;
class Foo
{
public:
Foo(int ii):i(ii){}
int getInt(){return i;}
private:
int i;
};
class Bar
{
public:
static int FooVal(){c++; return f.getInt();}
int callsFooVal(){return c;}
private:
s ......
½ø³Ì¼äͨОÍÊÇÔÚ²»Í¬½ø³ÌÖ®¼ä´«²¥»ò½»»»ÐÅÏ¢£¬ÄÇô²»Í¬½ø³ÌÖ®¼ä´æÔÚ×Åʲô˫·½¶¼¿ÉÒÔ·ÃÎʵĽéÖÊÄØ£¿½ø³ÌµÄÓû§¿Õ¼äÊÇ»¥Ïà¶ÀÁ¢µÄ£¬Ò»°ã¶øÑÔÊDz»ÄÜ»¥Ïà·ÃÎʵģ¬Î¨Ò»µÄÀýÍâÊǹ²ÏíÄÚ´æÇø¡£µ«ÊÇ£¬ÏµÍ³¿Õ¼äÈ´ÊÇ“¹«¹²³¡Ëù”£¬ËùÒÔÄÚºËÏÔÈ»¿ÉÒÔÌṩÕâÑùµÄÌõ¼þ¡£³ý´ËÒÔÍ⣬ÄǾÍÊÇË«·½¶¼¿ ......