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:UART 驱动程序库规范

Guru**** 2528480 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1010936/msp432e401y-uart-driver-library-specifications

器件型号:MSP432E401Y

您好!  

我对 UART 驱动程序库有疑问。

在接收中断中、中断因子被清除、并按如下所述获取 UART 错误。

 

//清除中断因子
UARTIntClear (m_ui32UartModule [enPortId]、ui32IntStatus);

//获取 UART 错误
ui32UartError = UARTRxErrorGet (m_ui32UartModule [enPortId]);

 

在清除中断因子后、当尝试获取 UART 错误时、UARTRSR 值读取为0x00。

(最初、0x01应由 UARTRSR 的值读取、但可能已被 UARTIntClear 清除)

是否在清除中断因子的同时清除 UARTRSR?

当我使用 UARTIntClear ()设置断点并检查 UARTRSR 的值时、我得到了0x01 (在它被清除之前)。

谢谢、

科基

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="465179" URL"~/support/microcontrollers/other-microcontrollers-group/other/f/other-microcontrollers-forum/1010936/msp432e401y-uart-driver-library-specifications "]是否是在清除中断因子时同时清除 UARTRSR 的规范?[/quot]

    在 simplelink_msp432e4_sdk_4_20_00_12/source/ti/devices/msp432e4/driverlib/uart.c 中 、UARTIntClear ()函 数只需写入 UART 中断清除(UARTICR)寄存器即可。

    从 《MSP432E4 SimpleLink 微控制器技术参考手册》(修订版 A) 中、我看不到任何迹象表明写入 UARTICR 寄存器将清除 UARTRSR 寄存器中的标志。

    我尚未尝试重复您的观察结果。 您的代码是否启用 UART 中的 FIFO?

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

    您好!  

    [引用 userid="91588" URL"~/support/microcontrollers/other-microcontrollers-group/other/f/other-microcontrollers-forum/1010936/msp432e401y-uart-driver-library-specifications/3736865 #3736865">我尚未尝试重复您的观察结果。 您的代码是否在 UART 中启用 FIFO?

    是的、启用 FIFO 设置。

    此外、在 Excel 文件中汇总了特定 UARTRSR 被清零的时序。

    e2e.ti.com/.../Result-.xlsx

    请继续检查 DriverLib 的规格。

    谢谢、

    科基

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="465179" URL"~/support/microcontrollers/other-microcontrollers-group/other/f/other-microcontrollers-forum/1010936/msp432e401y-uart-driver-library-specifications/3736968 #3736968"]此外,在 Excel 文件中汇总了清除特定 UARTRSR 的时序。[/quot]

    Excel 工作表显示在执行步骤后、RSR 寄存器值会被清除:

    在执行步骤后、DR 寄存器的值也从0x500变为0x500、其中的"中断错误"和" FE 帧错误"位设置为0 (无错误)。

     对 UARTRSR/UARTECR 寄存器的描述包含:

    [引用]除了 UARTDR 寄存器之外、还可以从 UARTRSR 寄存器中读取接收状态。 如果从该寄存器读取状态、则状态信息与读取 UARTRSR 之前从 UARTDR 读取的条目相对应。[/引用]

    UARTDR 寄存 器是读操作敏感的、因为对 UARTDR 的读取会从接收 FIFO 中删除一个数据单元。

    因此、我们认为问题是因为调试器(Keil μ µVision?) 设置为显示 UARTDR 寄存器的值、即在执行该步骤后、调试器对 UARTDR 寄存器的读取会从接收 FIFO 中弹出一个条目、然后该条目会更改 UARTRSR 寄存器报告的值。

    程序是否正常运行您没有调试器显示 UARTDR 寄存器的值?

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

    你(们)好,Koki

    您是否捕获了波形以查看是否存在真正的误差?

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

    您好!  

    [引用 userid="91588" URL"~/support/microcontrollers/other-microcontrollers-group/other/f/other-microcontrollers-forum/1010936/msp432e401y-uart-driver-library-specifications/3737016 #3737016"]程序是否正常运行您没有调试器显示 UARTDR 寄存器的值?

    我将 UARTRSR 和 UARTMIS 值存储在变量中、并在没有调试器的情况下检查寄存器值。 源代码如下所示。

    ===================================================================================================================================

    空 UART_Interrupt ()

    uint32 ui32IntStatus;

    int32 ui32UartError = 0;

    ui32IntStatus = UARTIntStatus (UART2_base、UART_REGISTER_UARTMIS);

    if (((ui32IntStatus &(uint32) UART_RIS_OERIS)==(uint32) UART_RIS_OERIS)||

                (((ui32IntStatus &(uint32) UART_RIS_BERIS)==(uint32) UART_RIS_BERIS)||

               (((ui32IntStatus &(uint32) UART_RIS_Peris)==(uint32) UART_RIS_Peris)||

               (((ui32IntStatus &(uint32) UART_RIS_FERIS)=>(uint32) UART_RIS_FERIS))

                 {

                    ui32UartError = UARTRxErrorGet (UART2_base);

                 }

                              :

                               :

    ===========================================================================================================================================

    生成 UART 帧错误后的结果如下。

    ui32UartError = 0x00000000
    ui32IntStatus = 0x00000280

    从上述结果中可以看出、UARTRSR 寄存器读取的值在未连接调试器的情况下发生了变化。

    即使调试器未显示 UARTDR、UARTRSR 寄存器读取的值也会发生变化。

    请继续检查。

    谢谢、

    科基

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

    你有更新吗?

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

    你有更新吗?

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

    你(们)好,Koki

    能否帮助在  UARTIntStatus()之前使用 UARTRxErrorGet()?