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.

[FAQ] [参考译文] [常见问题解答] RM48L952:如何使用 DMA 在 SCI 多次缓冲模式下执行8字节传输

Guru**** 657500 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/1251189/faq-rm48l952-how-to-perform-8-byte-transfer-in-sci-multi-buffered-mode-using-dma

器件型号:RM48L952

我 在 SCI2驱动器中使用 DMA 写入多次缓冲 SCI 时看到的波形。 不过、我的代码最多可以传输4个字节、但当我尝试传输8个字节时、RM48L952不再工作。 即使我查看数据表、似乎也有缓冲空间并且可以实现8字节传输、但不能 正常工作。

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

    您好!

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

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

    这里他们明确指出 SCI_TDx 寄存器 将只支持32位存取、而不支持64位存取。

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

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

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

    我 可以建议您使用此 SCI 的整个8字节缓冲器的一种方法、即使用2个 DMA 通道。  

    我建议的方法 如下。

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

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

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

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

    该运行会继续。 我随附了适用于这种方法的代码、请验证并使用它。  

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

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

    --

    谢谢。

    Jagadish。