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.

[参考译文] TMS320F28P650DK:带 DMA 的 UART

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1258994/tms320f28p650dk-uart-with-dma

器件型号:TMS320F28P650DK

您好!

我想知道是否可以使用 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。 目前、我们必须通过软件来解决它。