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.

[参考译文] F29H859TU-Q1:UART RX 超时演示

Guru**** 2815985 points

Other Parts Discussed in Thread: F29-SDK, SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1602668/f29h859tu-q1-uart-rx-timeout-demo

器件型号: F29H859TU-Q1
Thread 中讨论的其他器件: F29-SDKSysConfig

您好的团队、

我的客户希望使用 UART 和 DMA 实现以下功能:

它们需要通过 UART 接收数据帧(小于 64 字节)、如果在 2ms 内没有接收新的字节数据(表明该数据帧接收已完成)、则需要触发 DMA 并将数据从 UART RX 缓冲区移动到目标地址。

您能帮助检查如何实现该目标吗? 给我们一个关于这一点的演示吗?

我找到链接: https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1220244/faq-uart-rx-ms-level-timeout-realization-based-on-event-for-mspm0

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/571886/f28377-sci-rx-fifo-interrupt-timeout/2107291

BRS

Shuqing

 

 

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

    尊敬的 Shuqing:

    我建议他们查看 F29 SDK 路径中的 UART/DMA 示例:[F29-SDK install]/examples/driverlib/single_core/uart/uart_ex3_loopback_dma. 这使用 UART 根据 RX FIFO 深度设置触发 DMA。

    如果接收到的数据量是未知的、我建议让 DMA 传输接收他们知道的最小字节数、然后使用 RTOUT ISR 内的 CPU 传输其余的字节数。 CPU 可以读取数据、直到 RX FIFO 为空。 对于 RTOUT 中断、它不能编程为 2ms、我们唯一可以选择的选项是当一个字节位于 RX FIFO 中并持续 32 位周期或 64 位周期时(见下文)、才会发出中断。  如果他们对这种方法有任何疑问、请告诉我。

    此致、

    Delaney

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

    尊敬的 Delaney:

    对 UART 超时长度有问题:

    如果 HSE 为 1、则意味着 UART 时钟=系统时钟/8、超时长度= 2^64 * UART 时钟

    如果 HSE 为 0、则意味着 UART 时钟=系统时钟/16、超时长度= 2^32 * UART 时钟

    对吗?

    BRS

    Shuqing

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

    尊敬的 Shuqing:

    具体如下:

    如果 HSE 为 1、则表示 UART 时钟=系统时钟/8【正确】、且超时长度= 64 *(1/配置的波特率)

    如果 HSE 为 0、则表示 UART 时钟=系统时钟/16【正确】、超时长度= 32 *(1/配置的波特率)

    例如、如果 HSE=1、SYSCLK 为 200MHz、而 IBRD 和 FBRD 寄存器中的波特率设置为 9600bps:

    RTOUT 超时长度= 64 *(1/9600 位/秒)= 64 *(0.000104 秒/位)= 6.667ms

    此致、

    Delaney

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

    尊敬的 Delaney:

    为你的答复的恶作剧!

    我启用超时中断、并启用寄存器中断处理程序。

    但我有以下问题

    是否只要超时就会进入 ISR、或者发送/接收中断也会进入 ISR?

    如何选择发送中断作为发送 RTDMA 触发源、如何选择  接收中断作为接收 RTDMA 触发器?

    我需要的是:最小 接收帧将接收 发送中断 、它将触发 RTDMA 发送(不进入 ISR)、然后超时中断将进入 ISR、

    BRS

    Shuqing

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

    尊敬的 Shuqing:

    [引述 userid=“610907" url="“ url="~“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1602668/f29h859tu-q1-uart-rx-timeout-demo/6186332

    是否只要超时就会进入 ISR、或者发送/接收中断也会进入 ISR?

    [/报价]

    是的。 对于 UART 模块、只有一个进入(每个)CPU 的中断线路。 因此、由 IMASK 寄存器启用的所有中断条件只使用一个 ISR。 您可以使用 MIS 寄存器检查哪些中断是标记的 — 或使用 UART_getInterruptStatus (UART_BASE、TRUE);

    2. 如何选择发送中断作为发送 RTDMA 触发源、以及 将中断 作为接收 RTDMA 触发器?

    当您选中“Use DMA for Receiver“和“Use DMA for Transmit“选项时、SysConfig 会自动完成此操作。  

    我应该做的是:最小 接收帧将接收 发送中断 、它将触发 RTDMA 传输(不进入 ISR)、然后超时中断将进入 ISR、

    如果您不希望 TX 和 RX FIFO 级别条件触发中断(仅用于触发 DMA)、应在“Enabled Interrupts“(启用的中断)下拉列表中将其禁用。 无需启用这些功能即可获得 DMA 触发。

    谢谢、

    Delaney