A1寄存器(地址寄存器): Bit位 | | | | | 包含模块作为从期间寻址时使用的地址,该字段用于7位地址和10位地址中的低7位 | | | |
F寄存器(频率分频寄存器): Bit位 | | | | | | | | IIC波特率=IIC 时钟速度/(MUL*SCL分频器) SDA保持时间=IIC时钟周期*MUL*SDA保持值 SCL开始保持时间= IIC时钟周期*MUL*SCL开始保持值 SCL停止保持时间= IIC时钟周期*MUL*SCL停止保持值 |
C1寄存器(控制寄存器1): Bit位 | | | | | | | | | | | 0:从机模式,1:主机模式 0->1,产生START信号 1->0,产生STOP信号 | | | | | | SCL保持低电平,直到TXAK被写入。 0:在随后接受字节(若FACK 清除)或当前接受字节发送应答(FACK被设置)信号 1:不发送 | | | | | | 当从机地址匹配出现时,IIC模块可以从低功耗模式唤醒MCU 0, normal 1, 使能唤醒 | | | |
S寄存器(状态寄存器): Bit位 | | | | | 传输完一个字节,TCF就被置位。通过在接收模式读取IIC数据寄存或者在发送模式写入IIC数据寄存器清除TCF 0, 正在传输 1, 传输完成 | | | | | | | | | | | | 1、 任何非零召唤地址被接收,地址RA寄存器匹配 2、 地址在A1~RA范围之间 出现以上情况,该位被置1,C1【IICIE】必须被置1,为了这个位正常设置1 0, 非地址 1, 扮演从机 | | | | | | 当中断挂起,该位被设置。必须通过软件写1来清除 0, 无中断 1, 有中断 | | | |
D寄存器(数据寄存器): Bit位 | | | | | 在主机发送模式,当数据写入寄存器,一次数据发送发起,最高有效位先发送。在主机接收模式,读取寄存器发起接收下一个字节数据 |
C2寄存器(控制寄存器2): Bit位 | | | | | | | | | | | | | | 0, 与主机模式一直 1, 从机波特率独立于主机模式 | | | | | | |
FLT寄存器(可编程输入滤波寄存器): Bit位 | | | | | | | | 0, 无停止信号发生 1, 检测到停止信号 当硬件置1后,必须写1清除 | | | | | | 0, 无开始信号发生 1, 检测到开始信号 当硬件置1后,必须写1清除 | | | 0, 旁路 0x01-0x0F,滤波最多15个时钟周期宽度 |
RA寄存器(范围地址寄存器) SMB寄存器(SMBus控制和状态寄存器) Bit位 | | | | | 0:ACK或NACK在接收字节后发送 1:TXAK写0,在接收到字节后产生ACK。写1在接收字节后发送NACK | | | | | | 使能或禁用SMBus设备默认地址 0, 禁用 1, 使能 | | | 0, iic clock/64 1, iic clock | | | | | | 0, 没有SCL高电平且SDA高电平超时 1, 有超时 | | | 0, 没有SCL高电平且SDA低电平超时 1, 有超时 | | SHTF2IE,SHTF2中断使能,使能SCL高电平且SDA低电平超时中断 | |
A2寄存器(地址寄存器): SLTH寄存器(SCL低电平超时寄存器高位) SLTH寄存器(SC低电平超时寄存器低位) 编程逻辑 1、 宏定义Driver_I2C0为A 2、 通过A.Initialize()来初始化,内部参数是一个信号事件函数,自行定义 A. PowerControl,配置IIC接口电源 A. Control,配置总线速度 3、 写指令,A.MasterTransmit(设备地址,写的数据,数据大小,是否挂起中断) 等待完成信号,完成信号是之前通过信号事件函数来变化,写的数据可以是{地址,值} 也可以是{值,值,。。。} 4,读指令,首先发送指令A.MasterTransmit(),等待完成信号和应答信号,然后A.MasterReceive(设备地址,接收数据缓存,数据大小,是否挂起中断) i2c来读取加速度寄存的三轴加速度值
应该注意的是,代码底层是将地址左移一位,再或上读写位的。 所以定义地址要小心,比如说at24c02. 高位固定是0xa,假设a2,a1,a0是0,那么读地址就是0xa1,写地址就是0xa0,那么定义地址时候不能定义为0xa0,因为地址会被底层左移,所以要定义为0x50
|