您好!
我想知道是否可以使用 UART 和 DMA 传输一个16位缓冲区、而不必将缓冲区分解为字节。
例如、如果我的缓冲区的值为0x1122、0x3344、0x5566、我是否需要将该缓冲区分解为另一个值为0x0022、0x0011、0x0044、0x0033、0x0066的缓冲区 在使用 UART 和 DMA 进行传输之前为0x0055? 或者、DMA 是否具有允许其自动执行此操作的一些设置?
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.
您好!
我想知道是否可以使用 UART 和 DMA 传输一个16位缓冲区、而不必将缓冲区分解为字节。
例如、如果我的缓冲区的值为0x1122、0x3344、0x5566、我是否需要将该缓冲区分解为另一个值为0x0022、0x0011、0x0044、0x0033、0x0066的缓冲区 在使用 UART 和 DMA 进行传输之前为0x0055? 或者、DMA 是否具有允许其自动执行此操作的一些设置?
您好!
DMA 一次支持16位传输。 您无需将其转换为字节来传输相同的数据。
希望这可以解决您的查询。
谢谢、此致
普拉莫德
大家好、Pramod
DMA 传输为16位、但由于 UART 最多仅传输8位、我认为 UART 只会传输每个字的最低有效部分到其数据寄存器。
是否可以将 UART 配置为传输 LSB 部分、然后将每个传输字的 MSB 部分传输到其数据寄存器?
阿里
尊敬的 Ari:
您能否查看 F2838x 中的"uart_ex2_loopback_udma.c"、看看这是否解答了您的问题。
此致、
文斯
此致、
文斯
您好、Vince。
"uart_ex2_loopback_udma.c"用于 cortex-M4内核。
对于 cortex-M4、没有问题、因为它只适合每个连续地址一个字节、因此16位值将存储为2个连续字节的序列。
我希望德州仪器(TI)曾经想过克服 C28x 的这一缺点、它可以在 F28P65x 的这一新 UART 中实现某种逻辑:在 UART 的数据寄存器中写入一个字(16位)时会传输两个字节(LSB、然后是 MSB)、 而不是仅传输 LSB。
尊敬的 Ari:
我与团队进行了仔细核实、但我认为这确实是将16位 DMA 与8位 UART 使用的局限性。 我希望在星期五之前得到答复,但我会假设你所提到的内容确实正确。
此致、
文斯
谢谢 Vince。
我希望在未来的德州将为具有字节寻址和硬件中断嵌套的 C2000发布一个新的 CPU。 目前、我们必须通过软件来解决它。