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.

[参考译文] MSP432E401Y:I2C 卡在等待 TX 中断标志或 START 条件标志时

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1208022/msp432e401y-i2c-stuck-waiting-for-tx-interrupt-flag-or-start-condition-flag

器件型号:MSP432E401Y

我再次打开本期。  上一个在这里:

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/967908/msp432p401r-i2c-stuck-waiting-for-tx-interrupt-flag-or-start-condition-flag

它已经关闭了,但我真的没有看到修复它。

我使用与上面链接相同的风格、但门户不再识别、因为它已"停产"

我最近遇到重复启动条件问题、但问题已经解决、

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1201698/msp432-debuggers-msp432p401r-cannot-get-i2c-repeated-start-condition-to-work-properly/4546672#4546672

不过、我现在要在 I2C 外设空闲一段时间后(例如15分钟)运行过上述的阻塞状态、然后我尝试访问我们的 KT_micro FM 调制器芯片来更改 FM 通道、它在执行重复启动条件时锁定在那里。  您可以看到示波器捕获、显示先前写入的开始条件、然后外设挂起。   没有时钟或数据。   

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void FMTuneFreq(uint16_t frequency) {
//CHSEL[11:0] = Reg0x1[2:0] : Reg0x0[7:0] : Reg0x2[7]
uint8_t reg1 = 0, reg2 = 0, reg3 = 0;
uint8_t u8Buff[2];
frequency = frequency / 5;
//Reg0x0[7:0]
FM_TXDATA[0] = 0x00;
FM_TXDATA[1] = (frequency & 0x01FE) >> 1;
FMAPI_I2C_ISR_MultiWrite();
//Reg0x1[2:0]
FM_TXDATA[0] = 0x01;
if (FMAPI_I2C_ISR_WriteRead(FM_TXDATA[0], &reg1) == SUCCESS) {
FM_TXDATA[1] = (reg1 & 0xF8 ) | ((frequency & 0x0E00) >> 9);
FMAPI_I2C_ISR_MultiWrite();
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
uint8_t FMAPI_I2C_ISR_WriteRead(uint8_t TXData, uint8_t * data)
{
uint8_t status = SUCCESS;
/* Send out start + address + 1 data byte */
I2C_masterSendMultiByteStart(EUSCI_B0_BASE, TXData); //Removed MAP_
//wait for first byte to be moved to shift register
while(!(EUSCI_B0->IFG & EUSCI_B_IFG_TXIFG));
EUSCI_B0->IFG &= ~(EUSCI_B_IFG_TXIFG);
// Before the restart is sent, app has to wait for current TX byte + ack to complete
// This takes 9 cycles at 100kHz = 90uS
// The MCLK default = ~3MHz
// to complete the 1 byte TX app needs to wait ~270 MCLK cycles at a minimum
__delay_cycles(2500);
//clear the TR bit to setup master as receiver
EUSCI_B0->CTLW0 &= ~(EUSCI_B_CTLW0_TR);
// Send the start + address
EUSCI_B0->CTLW0 |= EUSCI_B_CTLW0_TXSTT;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

我认为延迟不会解决这个问题,因为与重复启动条件问题不同,添加延迟不会解决这个问题。  它与外设几乎一样被锁定、需要重新初始化。

我以100Mhz 运行 I2C、MCLK 以24MHz 运行。

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

    您好!

     我对您遇到问题的器件有点困惑。 您的主题标题是关于 MSP432E。  是 MSP432E 还是 MSP432P。  如果这是针对 MSP432P 的器件、已停产、而且对此器件的了解有限、我们将不再在 E2E 论坛上为其提供技术支持。  您可以在 E2E 论坛中搜索以前讨论的存档帖子、这些帖子可以帮助解决您的问题。 很抱歉没有指导。  

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

    Charles

    很抱歉耽误你的时间。 MSP432P401R。   哦、我明白了。  

    但是几周前、你们可以支持我之前在同一器件上发表的问题。  

    https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1201698/msp432-debuggers-msp432p401r-cannot-get-i2c-repeated-start-condition-to-work-properly/4546672#4546672

    因此、现在我也感到困惑。

    Ozzy.

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

    您好、Ozzy、

     以前为您提供支持的人员(Ralph Jacobi)不再是我们产品团队中的一员。 很抱歉没有指导。  

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

    嗨、Ozzy、

    很抱歉,查尔斯和拉尔夫让我试着看看你的问题。  我看不到您的软件明显有任何错误、并返回了您引用的 E2E 帖子。  这个问题似乎解决了、因为这个问题似乎与 I2C 目标相关、或者他们停止了一起重复启动。  简单地说、我在该线程中没有看到基于432P 的问题。   

     我在下面添加了一个 MSP432Pxx 勘误表 USCI43、确实说明在轮询 RX 标志时 I2C 可能挂起。  在 I2C_ISR_WriteRead ()函数中,似乎是轮询 RX 标志。  如果 I2C 悬挂在此处、则可能需要将该函数重写为基于中断。   

     

    希望这可以帮助您解决此问题。   

    谢谢。

    JD.