我有一个与 MSP430示例代码(MSP430F55xx_uscib0_i2c_05.c)中的示例代码相关的一般问题
在中断矢量中、我注意到了以下几点。
在本例中、对于第6和第8种情况、当 MSP430器件接收到一个 START 条件时、它会清除 START 条件标志、并且通过清除 STOP 条件标志来对 STOP 条件执行相同的操作。
我想知道这是否必要、还是为了实现更好的编码语义?
从 MSP430F5529数据手册中接收到停止条件后、状态机本身会清除启动条件、设置该标志不会阻止器件从主机获取多个启动条件。
我将 UCB0IFG &=~UCSTTIFG;以及 UCB0IFG &=~UCSTPIFG 注释掉;示例代码仍然运行并且看起来正常工作。
如果注释掉了这几行、是否会涉及到一个案例? TI 是否出于某种原因将其包括在 I2C 接收器的示例代码中?
// USCI_B0状态 ISR
#if 已定义(__TI_Compiler_version__)||已定义(__IAR_SYSTEMS_ICC__)
#pragma 矢量= USCI_B0_VECTOR
__中断 空 USCI_B0_ISR ( 空 )
#Elif 已定义(_GNU _)
空 _属性__ ((INTERRUPT (USCI_B0_VECTOR))) USCI_B0_ISR ( 空 )
#else
#错误 不支持编译器!
#endif
{
switch ( __偶数_在_范围 (UCB0IV、12))
{
案例 0: 中断 ; //向量 0:无中断
案例 2: 中断 ; //向量 2: ALIFG
案例 4: 中断 ; //矢量 4: NACKIFG
案例 6: //矢量 6:STTIFG
UCB0IFG &=~UCSTTIFG; //清除启动条件 int 标志
中断 ;
案例 8: //矢量 8:STPIFG
TXData++; //递增 TXData
UCB0IFG &=~UCSTPIFG; //清除停止条件 int 标志
中断 ;
案例 10: 中断 ; //向量10:RXIFG
案例 12: //向量12:TXIFG
UCB0TXBUF = TXData; // TX 数据
中断 ;
默认值 : 中断 ;
}
}