33 IIC(十一)IIC Control Register
1. IIC 控制器通用结构
对于IIC Control器而言一般结构如下,不同设备会存在个体差异,但整体差别不大
-
control_register
设置SCL的clock的frequency
-
tx_register
将数据写入tx_register,数据会被shift_register(移位寄存器)一位一位通过SDA发送出去。
数据发送完成之后,设备会产生一个中断
-
rx_register
shift_register从SDA上一位一位的读取数据,写入到rx_register。读取完成之后,IIC control会产生一个中断
-
status_register
状态寄存器
-
int_register
中断寄存器
2. IMX6ULL IIC CONTROL
-
I2C Address Register
此IIC adapter支持作为I2C client使用
3. IMX6ULL IIC Register
imx6ull存在4个iic control,每组iic控制器由5个16bit的寄存器控制
分别为
-
I2Cx_IADR(地址寄存器)
iic adapter作为从设备iic client时设定其地址
-
I2Cx_IFDR(iic 分频寄存器)
-
I2Cx_I2CR(iic 控制寄存器)
需要注意iic cotrol register未被使能,不影响iic status register的数据读取
-
I2Cx_I2SR(iic status register)
-
I2Cx_I2DR(iic data register)
4. 编程流程
-
控制I2Cx_IFDR设置SCL
-
配置I2Cx_I2CR
-
发送数据
-
设置I2Cx_I2CR进入发送模式
-
将数据写入I2Cx_I2DR,等待中断发生
-
中断事件发生后,判断是否为异常。是否得到ACK
-
装填下一帧数据
-
-
接受数据
- 设置I2Cx_I2CR进入接收模式
- 等待中断发生,判断是否为异常。
- 读取I2Cx_I2DR中的数据