I2C、I2C或IIC通信提供了一种可以与若干设备之间进行通信的方法。
在总线最大负载下,该接口可被设计为100 kbit/s的传输速率。
该接口处理信息波特率最大可达系统时钟的二十分之一,以此减少总线负载。
最大总线电容为400pf限制了设备的最大通信长度和可连接从设备数。
I2C模块具有以下特点:
• 兼容IIC-bus规格
• Multimaster操作
• 软件可编程为64种不同的串行时钟频率之一
• Software-selectable确认位
• 中断驱动的逐字节数据传输
• 主从切换下自动仲裁
• 呼叫地址识别中断
• 启动和停止信号的产生和检测
• 重复启动信号的产生和检测
• 确认位产生和检测
• bus忙检测
• General调用识别
• 10位地址扩展
• 可编程故障输入筛选
• 低功率模式唤醒slave地址匹配
• 多从地址支持
• DMA支持
具体初始化代码如下:
重点:
1.MULT = 2 对应 mul = 4
2.ICR = 0x17 ICR为Clock rate时钟频率
从I2C Divider and Hold Values可得:
ICR SCL Divider SDA Hold Value SCL Hold (Start) Value SCL Hold (Stop) Value
17 128 21 58 65
则 I2C baud rate = bus speed (Hz)/(mul × SCL divider) 即 135MHz/(4 × 128) = 263.6718kHz
void I2C_Init(I2Cn I2CNum)
{
if(I2CNum == I2CNUM0)
{
SIM_SCGC4 |= SIM_SCGC4_I2C0_MASK; //开启 I2C0时钟
PORTA_PCR12 = PORT_PCR_MUX(8);// 配置 I2C0功能的 GPIO 接
PORTA_PCR