① I2C框架。内核中i2c.h和i2ccore.c为I2C总线框架的主体,提供了核心数据结构的定义、I2C总线适配器驱动和设备驱动的注册、注销管理、I2C总线通信方法上层的、与具体适配器无关的代码、检测设备地址的上层代码等。i2cdev.c用于创建I2C总线适配器的设备节点,提供I2C总线设备访问方法等。
② I2C总线适配器驱动。定义描述具体I2C总线适配器的数据结构,实现在具体I2C总线适配器上的I2C总线通信方法。
③ I2C总线设备驱动。定义描述具体设备的数据结构,借助I2C总线框架的相关函数实现设备的注册,并为用户提供上层应用程序编程接口。
图5 总体驱动框架
interrupt void i2c_int1a_isr(void) {//I2CA的中断响应函数
Uint16 IntSource;// 读取中断码
IntSource=I2caRegs.I2CISRC.bit.INTCODE & 0x7;//I2CA中断源,读后3位
switch(IntSource){//依中断源而确定相关接收和发送策略
case I2C_NO_ISRC://=0
case I2C_ARB_ISRC://=1
case I2C_NACK_ISRC: //=2
case I2C_ARDY_ISRC: //=3
case I2C_SCD_ISRC://=6
case I2C_AAS_ISRC://=7
break;
case I2C_RX_ISRC://=4,接收数据已准备好
DataReceive();//调用数据接收子函数接收数据
break;
case I2C_TX_ISRC://=5,发送数据已准备好
DataTransmit();//调用数据发送子函数接收数据
break;
default:
asm("ESTOP0"); //无效数据,则停止
}
PieCtrlRegs.PIEACK.all=PIEACK_GROUP8;
}