您的位置:首页 > 其它

I2C总线配置与测试(CCS裸班测试)

2015-07-29 22:21 190 查看
1、 管脚复用

在gel文件中可以找到控制管脚复用的寄存器,一般为PINMUX寄存器,例如I2C时钟线连接GPIO20管脚,查手册知此管脚的控制位为PINMUX3寄存器的21与22位,两位都为一时为gpio口,为1和0时为I2C口。设为I2C时可写为

PINMUX3 |= 0x0400000;

PINMUX3 &= ~0x0200000;

2、时钟频率设置

I2C的初始化函数为

Int16 EVMDM365_I2C_init()

{

I2C-ICMDR = 0; //reset I2C

I2C-ICPSC = 2; //config prescaler for 8Mhz

I2C-ICCLKL = 35; //config clk LOW for 100kHz

I2C-ICCLKH = 35; //config clk HIGH for 100kHz

I2C-ICMDR |= ICMDR-IRS; //release I2C from reset

}

计算公式为:

prescaler = 输入时钟/(I2C-ICPSC +1),且要求prescaler大于5Mhz小于16Mhz

I2C时钟线频率=prescaler/(I2C-ICCLKL+I2C-ICCLKH+10)

输入时钟为24MHz,经过上述计算得I2C时钟为100kHz

3、I2C时序

正确的I2C时序可如下表示:



时序问题是I2C的关键,需要注意的是:

1) 设备地址:一般为7位地址和1位读写位,实际地址左移一位,例如设备读地址为0xD0,实际为0x68

2) 寄存器地址:寄存器地址为1字节还是2字节?寄存器是只读还是可读写?寄存器的某几位是否已经写死?

3) 读时序:读时序需要先写再读,且写后不能有stop,这就需要写完改写某些寄存器位的值
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: