Other Parts Discussed in Thread: RM48L952
大家好、感谢大家始终回答我的问题。
今天、我在 SCI2驱动程序中使用 DMA 编写了多缓冲 SCI 通信代码。 然而、我的代码能够传输多达4个字节、但是当我尝试传输8个字节时、RM48L952停止工作。 即使我检查了数据表、似乎有缓冲区空间并且可以进行8字节传输、但它不能正常工作、所以我提出这个问题。
我还在下面上传了我的代码文件。 我们始终期待您的答复。 谢谢你
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.
您好!
我找到了问题的根本原因。
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。