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.

[参考译文] CCS/MSP432P401R:USCIA0运行中的数据缺失

Guru**** 2589280 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/862607/ccs-msp432p401r-miss-data-in-the-operation-of-uscia0

器件型号:MSP432P401R
主题中讨论的其他器件:MSP432E411Y-BGAEVM

工具/软件:Code Composer Studio

您好!

我们需要 MSP432的 UART 操作、因此我在添加 main 函数之前编写了 check 函数代码。

函数是、当 MSP432从 UART 接收数据时、它将发送接收到的数据。

当 MSP432接收到数据时、它无法完全传输数据。

但是、如果我在调试模式下传输的代码上添加一个断点、它可以完全完成操作。

检查以下代码、我将断点设置为"void RX_Data_Operation (void)"的"eUSCI_A0->TXBUF = UART_Data[UART_State_+];"。

同样的操作也可以在 MSP430和 MSP432E411Y-BGAEVM (MCLK=120MHz)中运行。

这些是项目的设置、

MCLK=48MHz、BR=9600、无奇偶校验、一个停止位。

这些是我的设置代码、

空 UART_SET (空)

P1SEL0 |=(RXD + TXD);
EUSCI_A0->CTLW0 |= EUSCI_A_CTLW0_SWRST;//将 eUSCI 置于复位状态
EUSCI_A0->CTLW0 = EUSCI_A_CTLW0_SWRST |//在复位时保持 eUSCI
EUSCI_B_CTLW0_ssel_SMCLK;//为 SMCLK 配置 eUSCI 时钟源
EUSCI_A0->BRW = 312;
EUSCI_A0->MCTLW =(8 << EUSCI_A_MCTLW_BRF_OFS)| EUSCI_A_MCTLW_OS16;
EUSCI_A0->CTLW0 &=~EUSCI_A_CTLW0_SWRST;//初始化 eUSCI
EUSCI_A0->IFG &=~EUSCI_A_IFG_RXIFG;//清除 eUSCI RX 中断标志
EUSCI_A0->IE |= EUSCI_A_IE_RXIE;//启用 USCI_A0 RX 中断
//启用全局中断
__ENABLE_IRQ();
//在 NVIC 模块中启用 eUSCIA0中断
NVIC->ISER[0]= 1 <<((EUSCIA0_IRQn)& 31);

这些是接收功能、

空 EUSCIA0_IRQHandler (空)

UART_Data[(UART_STATE 和 UART_State_Count)]= EUSCI_A0->RXBUF;
UART_State_+;
if ((UART_State & UART_State_Count)>= UART_Data[0])
UART_STATE = UART_State_Finish;

这些是发送功能、

void RX_Data_Operation (void)

if (((UART_State & UART_State_Finish)=UART_State_Finish)

UART_State_0;
//*********
//* TX 操作*
//*********
while (<UART_Data[0])
EUSCI_A0->TXBUF = UART_Data[UART_State_+];
UART_State_0;

下图显示了 UART 设置的终端。

绿色字是 PC 到 MSP432的数据、蓝色字是 MSP432的数据。

第一个蓝色字(06 00)的状态为 MSP432自由运行。(数据缺失)

第二个蓝色字(06 05 04 03 02 00)的状态是 MSP432在具有断点的 CCS 中以调试模式运行。

如何解决问题?

BR、

于传陈

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

    尊敬的 余川陈:

    您是否参考过 driverlib UART 回波示例?  http://dev.ti.com/tirex/explore/node?node=AOMeCleey4b.tm8Su4Mqog__z-lQYNj__LATEST 

    谢谢、

    Alexis

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

    您好、Alexis、

    当然、我已经检查了这个示例、我更喜欢经典的编码方式。

    UART 回波不是项目的结果。

    完成操作后、它应根据 UART 数据和反馈执行操作。

    我只需执行 UART 回显操作即可检查硬件、代码可与 UART RX 和 TX 配合使用。

    如果我在将数据发送到 EUSCI_A0->TXBUF 后使用延迟、则可以完全传输数据。

    while (<UART_Data[0])

    EUSCI_A0->TXBUF = UART_Data[UART_State_+];
    延迟(500);//500ms

    UART_State_0;

    另一个问题是、

    从 PC 接收到反馈后、MSP430几乎可以同时完成操作、但 MSP432无法将反馈传输到 PC。

    即使 RX 和 TX 之间没有任何操作。

    我为什么或如何解决问题?

    BTW、UART 数据和操作与 MSP430相同。

    由于我们将控制芯片从430更改为432、我使用同一个项目来检查状态、而其他对432的控制与我的想法相同。

    BR、

    于传陈

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

    尊敬的 余川陈:

    我想知道您是否已经尝试过 MSP432示例、而不是基于 MSP430的示例、以查看您是否看到相同的延迟。

    谢谢、

    Alexis

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

    您好、Alexis、

    我需要在假期前完成其他项目

    很抱歉耽误你的时间、我会在完成工作后立即尝试告诉你结果。

    请等我一下。

    BR

    Yu-Chuan、Chen

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

    尊敬的 余川陈:

    好的、我现在将关闭此线程、您可以在您能够时通过响应重新打开它。 如果线程锁定、您可以打开一个新线程。  

    谢谢、

    Alexis

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

    > while (<UART_Data[0])
    > EUSCI_A0->TXBUF = UART_Data[UART_State_+];

    这不会在发送下一个字节之前等待该字节的发送、因此 UART 将溢出。 MSP430也是如此、但由于 CPU 运行速度快得多、这是 MSP432上的一个更大问题。 尝试如下操作:

    while (UART_State IFG 和 EUSCI_IFG_A_IFG_TXIFG))/* empty*/;//等待空 TXBUF
    EUSCI_A0->TXBUF = UART_Data[UART_State_+];
    } 

    未经请求: 您是否需要在比较中使用(UART_STATE 和 UART_State_Count)?