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 模式进行中断驱动的半双工 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 的示例项目、但它们不适用于我们的半双工操作。
您好、 Evan
如果您希望在 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