ZHCU032K December 2004 – August 2022 MSP430AFE221 , MSP430AFE222 , MSP430AFE223 , MSP430AFE231 , MSP430AFE232 , MSP430AFE233 , MSP430AFE251 , MSP430AFE252 , MSP430AFE253 , MSP430F2001 , MSP430F2002 , MSP430F2003 , MSP430F2011 , MSP430F2012 , MSP430F2013 , MSP430F2101 , MSP430F2111 , MSP430F2112 , MSP430F2121 , MSP430F2122 , MSP430F2131 , MSP430F2132 , MSP430F2132-EP , MSP430F2232 , MSP430F2234 , MSP430F2252 , MSP430F2252-Q1 , MSP430F2254 , MSP430F2272 , MSP430F2272-Q1 , MSP430F2274 , MSP430F2274-EP , MSP430F233 , MSP430F2330 , MSP430F235 , MSP430F2350 , MSP430F2370 , MSP430F2410 , MSP430F2416 , MSP430F2417 , MSP430F2418 , MSP430F2419 , MSP430F247 , MSP430F2471 , MSP430F248 , MSP430F2481 , MSP430F249 , MSP430F2491 , MSP430F2616 , MSP430F2617 , MSP430F2618 , MSP430F2619 , MSP430G2001 , MSP430G2101 , MSP430G2102 , MSP430G2111 , MSP430G2112 , MSP430G2121 , MSP430G2131 , MSP430G2132 , MSP430G2152 , MSP430G2153 , MSP430G2201 , MSP430G2201-Q1 , MSP430G2202 , MSP430G2203 , MSP430G2210 , MSP430G2211 , MSP430G2212 , MSP430G2213 , MSP430G2221 , MSP430G2230 , MSP430G2231 , MSP430G2231-Q1 , MSP430G2232 , MSP430G2233 , MSP430G2252 , MSP430G2253 , MSP430G2302 , MSP430G2303 , MSP430G2312 , MSP430G2313 , MSP430G2332 , MSP430G2333 , MSP430G2352 , MSP430G2353 , MSP430G2402 , MSP430G2403 , MSP430G2412 , MSP430G2413 , MSP430G2432 , MSP430G2433 , MSP430G2444 , MSP430G2452 , MSP430G2453 , MSP430G2513 , MSP430G2533 , MSP430G2544 , MSP430G2553 , MSP430G2744 , MSP430G2755 , MSP430G2855 , MSP430G2955 , MSP430TCH5E
初始化之后,通过把目标从器件地址写入寄存器 UCBxI2CSA、用 UCSLA 10 位来选择从器件地址的位数、置位 UCTR 来选择发送模式、置位 UCTXSTT 来产生一个起始条件,主器件接收模式才被初始化。
USCI 模块先检测总线是否空闲,之后产生一个起始条件,并传送从器件地址。一旦从器件对地址作出应答,UCTXSTT 位会被清零。
在从器件对地址应答后,将接收到从器件发送的第一个数据字节并发送应答信号,同时置位 UCBxRXIFG 标志。只要 UCTXSTP 或 UCTXSTT 不被置位,就能接收到从器件发来的数据。若没有读取 UCBxRXBUF,那么主器件将在接收最后到一个数据位后挂起总线直到 UCBxRXBUF 被读取。
如果从器件没有响应发送的地址,则未响应中断标志 UCNACKIFG 会被置位。主器件必须发送一个停止条件或者重复起始条件的方式来响应。
置位 UCTXSTP 将会产生一个停止条件。置位 UCTXSTP 后,主器件将在接收完从设备传送的数据后发出一个NACK,并紧接着发送一个停止,或者如果在 USCI 模块正在等待读取 UCBxRXBUF时,将立即产生停止。
如果主及想接收一个单字节数据,那么在接收字节的过程中必须将 UCTXSPT 位置位。在这种情况下,可以通过查询 UCTXSTT 来确定何时将被清除:
BIS.B #UCTXSTT,&UCBOCTL1 ;Transmit START cond.
POLL_STT BIT.B #UCTXSTT,&UCBOCTL1 ;Poll UCTXSTT bit
JC POLL_STT ;When cleared,
BIS.B #UCTXSTP,&UCB0CTL1 ;transmit STOP cond.
置位 UCTXSTT 将会产生一个重复起始条件。在这种情况下,可以通过置位或清零 UCTR,以便配置为发送器或接收器。
图 17-13给出了 I2C 主控接收器操作。
无重复启动的连续主器件事务
在不使用重复起始功能的情况下,当进行多个连续 I2C 主器件传输时,当前传输必须在下一个传输初始化完成之前结束。通过确保在设置 UCTXSTT = 1 启动下一个 I2C 事务之前清除传输停止条件标志 UCTXSTP,可以实现这一点。否则,将会影响当前的传输。