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.

[参考译文] RM48L952:[常见问题解答]在 SCI2驱动器的 SCI 模式中使用 DMA 时的8字节数据传输问题

Guru**** 2756805 points

Other Parts Discussed in Thread: RM48L952

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1133887/rm48l952-faq-8-byte-data-transfer-problem-using-dma-in-sci-mode-of-sci2-driver

器件型号:RM48L952

大家好、感谢大家始终回答我的问题。
今天、我在 SCI2驱动程序中使用 DMA 编写了多缓冲 SCI 通信代码。 然而、我的代码能够传输多达4个字节、但是当我尝试传输8个字节时、RM48L952停止工作。 即使我检查了数据表、似乎有缓冲区空间并且可以进行8字节传输、但它不能正常工作、所以我提出这个问题。

我还在下面上传了我的代码文件。 我们始终期待您的答复。 谢谢你

e2e.ti.com/.../20220907_5F00_SCI_5F00_DMA.zip

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

    您好!

    我找到了问题的根本原因。

    e2e.ti.com/.../Hercules-SCI-Mib-with-DMA-spna213.pdf

    如果您验证了上述应用手册"Hercules SCI with DMA"、则可以看到下面突出显示的语句

    这里他们明确提到 SCI_TDx 寄存 器只支持32位访问、不支持64位访问。

    这是因为、如果验证这些寄存器的起始偏移地址、则为74h

    74h (十进制116)不是8的倍数、因此如果我们对该寄存器执行8字节访问、则会导致未对齐访问并产生总线错误。 因此、我们必须仅对这些寄存器使用32位访问、因为这些寄存器地址是4的倍数、所以使用具有32位写入的 DMA。

    但我可以建议您使用 SCI 的整个8字节缓冲区、即使用2个 DMA 通道  

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

    您好!

    我建议的方法如下

    配置两个 DMA 通道、每个32位传输(即4字节)、DMA 源读取地址应偏移8字节(这意味着地址应在每次帧传输后增加8)、目的地址应固定。

    如果我们在第一次触发后执行此操作、其外观如下所示

    在第一个帧触发后、DMA CH0将前4个字节从0x30写入0x33到 SCI 目的缓冲器的前4个地址、类似地、DMA CH1将后4个字节从0x34写入0x37到 SCI 目的缓冲器的下4个地址。

    在 DMA CH0完成写入后、 当我们将此 DMA 通道的源偏移量配置为8时、其源地址将递增8、并且它将下次指向0x39、类似地、DMA CH1源地址也将递增4、并在第二个帧触发之前指向0x43。

    该操作将继续。 我要附上此方法的代码、请验证并使用。  

    注意:我在 RM46上测试了我的代码、您只需复制 main.c 并将其粘贴到代码中并进行测试即可。

    e2e.ti.com/.../RM46_5F00_SCI_5F00_DMA.zip

    --

    谢谢、

    Jagadish。