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.

[参考译文] MSPM0G1507:UART0半双工 IrDA 问题

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1399434/mspm0g1507-uart0-half-duplex-irda-issues

器件型号:MSPM0G1507

工具与软件:

尝试使用 MSPM0G1507处理器的 UART0模块的 IrDA 模式进行中断驱动的半双工 IrDA 链路

禁用 RX 时会遇到问题、当重新启用 RX 时、我们捕获最后几个移出的字符。

我们使用的波特率为115200。

我们为 UART0模块使用40 MHz ULPCK 源。

我们正在使用 CLKDIV2寄存器、我们已按照手册将其设置为1。

我们的目标是:

1.开始传输后、我们使用 DMA 来发送所有数据。 在传输开始之前、使用禁用 RX  

以下步骤如 MSPM0手册中所述:

2.一旦 DMA 完成(等待 DMA_DONE_TX 中断)、我们还等待 UART 忙是清除 STAT 寄存器、然后重新启用 UART0外设上的 RX。

3.我们已经尝试等待 EOT 中断、但是该中断在未禁用 UART 模块的情况下似乎无法触发(是否缺少某些内容?) 是否有 IrDA 的勘误表?

4.我们观察到 RX 确实起作用,我们能够接收到软件的命令。

5.但 TX 不起作用。  

6.我们的 IrDA 设置如下:

- IRRXPL 寄存器设置为1h

- IRTXPL 寄存器设置为9h 以设置脉冲长度

- IRTXCLK 寄存器设置为1 (使用波特率时钟)

-启用 IR / EN。

有关我们正在使用的 IrDA 部分、请访问: https://www.vishay.com/docs/82633/tfbs4711.pdf

在我们的 IO_MUX 中、我们不会按照 Vishay 器件将 UART_RX 线路反相。 它对 TX 数据进行反转和镜像。 我们的理解是、将 IRRXPL 寄存器设置为1h 即可实现。 从我们可以看到的结果来看、结果确实如此。 (如果我错了、请更正我)。

我们认为我们从 IrDA 部件的 TX 收到了伪读 RX 线路。

UART 中的 FIFO 级别配置为 UART_RXIFLSEL 为7h >=1 1个可用条目。 这会触发 UART RX 中断、该中断将字节从 UART_RX 读入应用程序的存储器空间。

TX FIFO 7h、TX FIFO >= 1个空闲条目、用于触发我们的 DMA 将数据移出到 UART_TX 寄存器中。

我们找到了该处理器使用 IrDA 的示例项目、但它们不适用于我们的半双工操作。  

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

    您好、 

    如果您希望在 TX 阶段完全阻止 RX 数据、

    您可以考虑使用以下方法。 因为更改 CTL0寄存器太 复杂。

    在启动 TX 之前、您可以使用以下 DL API 来设置从 UART 外设到 GPIO 输入的 RX 引脚 IOMUX 设置映射。

    您也可以考虑在重映射之前或之后刷新 FIFO。

    DL_GPIO_initDigitalInput(GPIO_UART_0_IOMUX_RX);

    完成 TX 后、使用以下 DL API 设置 从 GPIO 输入到  UART 外设的 RX 引脚 IOMUX 设置映射:

    (这是从演示代码复制的、请自己控制 API 的参数)。

    	DL_GPIO_initPeripheralInputFunctionFeatures(
    		 GPIO_UART_0_IOMUX_RX, GPIO_UART_0_IOMUX_RX_FUNC,
    		 DL_GPIO_INVERSION_ENABLE, DL_GPIO_RESISTOR_NONE,
    		 DL_GPIO_HYSTERESIS_DISABLE, DL_GPIO_WAKEUP_DISABLE);

    对 RX 相位执行相同的操作。

    此致、

    Helic