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:有关 uscib0_i2c_05.c 的问题

Guru**** 2482105 points
Other Parts Discussed in Thread: MSP430F5529

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1262164/msp430f5529-question-about-uscib0_i2c_05-c

器件型号:MSP430F5529

我有一个与 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 数据

   中断

 默认值 中断

  }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、 状态机本身将清除条件标志。  此处需要手动清理。