您好,
我正在为我的项目编写一个自定义I2C驱动程序,并且我正在尝试确保我完全理解MSP430 I2C模块的每个部分。 有几份文件在某一点上让我感到困惑,因为它们似乎对某些操作的确切顺序给出了相互冲突的描述-或者至少足够模糊,我不确定它们的含义。
特别是,我想知道当MSP配置为主接收器时,I2C模块何时发送ACK。 据我所了解,通用RX事务如下所示:
(1)初始化(主中继器发送启动条件及从中继器地址,从中继器的地址等) ->(2)[从属]传输字节->(3)[主]将收到的字节从移位寄存器移动到UCBxRXBUF,软件读取UCBxXBUF,主中继器发送ACK,可能时钟一直在等待软件进入其中->(4)[从属]传输下一字节。
但是,我不确定步骤3中会发生什么。 根据MSP430系列用户指南(SLAU144J),在17.3 .4.2 2节和图17-13的文本中,其外观如下所示
(1)初始化->(2)[从属]传输字节->(3)[主]将UCBRXIFG设置为移位寄存器中的字节立即->(3.5)[主]将字节从移位寄存器移至RXBUF ->(4)[主]模块保持总线低电平,直到读取XBUF ->(5)[软件]读取RXBUF ->(RX6)[主中继器->) (7)[MASTER]发送ACK ->(8)[SLAVE]传输字节
步骤4的含义是:"如果未读取UCBxRXBUF,则在接收最后一个数据位期间,在读取UCBxRXBUF之前,主控制总线。" 然而,在同一案文中,它似乎也暗示,顺序如下:
(1)初始化->(2)[从属]传输字节->(3)[主]将UCBRXIFG设置为在移位寄存器中的字节立即->(3.5)[主]将字节从移位寄存器移动到XBUF ->(4)[主]发送ACK ->(5)[主]模块保持总线低,直到读取XBUF? ->(6)[从]传输字节->(7)[软件]读取RXBUF ->(8)[主] RXIFG重置
步骤3,3.5 和4的位置由以下文本表示:"从从属设备确认地址后,从从属设备接收并确认第一个数据字节,并且设置UCBxRXIFG标志。" 其余步骤的顺序是围绕该步骤排列的,如果3和4是它们所在的位置,则考虑它们必须是怎样的。 芯片的勘误表文档(SAZ188L)似乎也支持这种顺序,错误为USI-30,指出“一旦第一个字节从接收移位寄存器移到接收缓冲区,该字节即被确认,状态机允许接收下一个字节。”
当我尝试让我的驱动程序功能强大以捕获所有可能的使用中错误(它位于操作过程中无法轻松访问以纠正错误的系统中)时,我想知道具体顺序是什么,以便我确切知道我的时间限制是什么, 等等
谢谢!
John