This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MSP430F5529 的I2C通信

我想使用5529的I2C通信,并且想使用中断方式实现,现在单字节的写实现没问题,但读的时候有问题,不知道如何发重复其实条件,例程里说得不详细。

我现在做的是读单字节:先写一个地址,接着读该地址数据;网上很多资料都是采用端口模拟方式,难道用中断方式真的实现起来 很困难吗?

  • 1. 楼主想实现的其实是一个I2C的标准读写操作,而MCU的I2C模块不可能把标准的I2C读写操作封装起来,所以I2C的模块实现的是I2C的基本字节读写时序。要想实现楼主的想法,就需要在中断处理函数中增加一些过程处理,或者状态机处理。

    2. 例如如果要实现读一个从机设备的某个寄存器地址的数据,完整时序是

       a) Start + ADDR + W + A + RS + RegAdd + A + Stop 

        b) Start + ADDR + R + A + DATA + A + STOP,

    其中加下划线的操作是从机给出来的,主机不用考虑。楼主需要在发起操作和I2C中断处理中做状态处理,用逗号分开的两部分在发起操作和中断操作中都有不同的处理

    1)  a)在发起操作是要设置UCTR , UCTXSTT;   b)段操作只设置UCTXSTT;

    2) 中断处理也不一样,

        a) 操作的TXIFG  中断处理后,直接把要发送的RegADD放入TXBUF,同时设置UCTR,UCTXSTT来启动I2C的

        b) 操作中的TXIF 中断处理要清除UCTR,

         楼主可以设置个一个全局状态,在处理完第一段之后,切换状态变量的值,从而实现连续的I2C操作。