我 在 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/.../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。