TI中文支持网
TI专业的中文技术问题搜集分享网站

TM4C129ENCPDT数据手册问题

I2C初始化中(P1423)

The transaction is ended by setting the STOP bit in theI2CMCSregister.

然后我点到Register Map

找到0x004    I2CMCS    RW     0x0000.0020     I2C Master Control/Status     P1427

这里写的是RW

进入P1427

里面却是Read-Only Status Register ,怎么setting the STOP bit ,  而且,我在I2CMCS register也找不到STOP bit?是我英语不好弄错了吗?

Maka Luo:

Shuai Wang16

I2C初始化中(P1423)

The transaction is ended by setting the STOP bit in the I2CMCS register.

然后我点到Register Map

找到0x004    I2CMCS    RW     0x0000.0020     I2C Master Control/Status     P1427

这里写的是RW

进入P1427

里面却是Read-Only Status Register ,怎么setting the STOP bit ,  而且,我在I2CMCS register也找不到STOP bit?是我英语不好弄错了吗?

qz boy:

回复 Maka Luo:

TM4C129 I2CMCS 问题。

故事 使用TM4C129 10组I2C 作为Master,每组上面接不通slave,通过Address 区分

1:用TI提供的I2cm_drv.c 里面的I2CMInit来例化每组I2C;用I2CMWrite,I2CMRead来操作读写

2:一开始10组I2C都能正常读写(暂时认为I2C这边是OK的)

3:项目中有用到USB,把USB加入进来之后,有测到USB在枚举过程的时候,I2C Master 可能就随机的出现Clk 敲不出来。à第一个时间认为USB的中断把I2C影响了,把USB ISR prority 设定为7 最低,发现问题同样还存在。

4:出现了3的状况,开始debug I2C;用压力测试的方式 ,在systemclk initial 跟i2c initial 后就做一个循环I2C的读写,如下

While(1)

{

For(u8i=5;u8i<100;u8i++)

{

I2CMWrite(port ,u8i,buffer,u8len);

UARTprintf(“address=0x%x\n”,u8i); }

}

5:由于Slave没有接这么多设备,所以一定有Address Nack的状况,测试发现当出现 Address Nack的时候 Master 之后就敲不出Clk了(Nack后,产了Stop 然后SDA=1 SCL=1),但是程序并没有卡在网络上写的MasterBusy 或者MasterBusBusy,里面的打印有正常在跑

6:用单步去看I2C的状况,在I2CMIntHandler里面ui32Status= HWREG(psInst->ui32Base + I2C_O_MCS);

打印UARTprintf("g=0x%x,P=0x%x\n",ui32Status,psInst->ui8State );

发现Nack 进入中断的时候ui32Status=0x20,P=0x2;表示这个是IDLE,而实际上应该是ui32Status=0x26,P=0x2;导致后面写是错误。

 

I2cm_drv.c里面太多了,debug的时候再I2CMIntHandler函数里面的ui32Status= HWREG(psInst->ui32Base + I2C_O_MCS);之后加上

if(ui32Status==0x20)

{

ui32Status=0x26; }

这样clk就都能正常打出,

7:这表明有进中断,但是中断里面读到的状态跟Bus上的不一,是I2CMCS 这个寄存器更新问题,还是怎样?

赞(0)
未经允许不得转载:TI中文支持网 » TM4C129ENCPDT数据手册问题
分享到: 更多 (0)