工具与软件:
我正在尝试了解我遇到的行为是否是勘误表 DMA7所描述的行为。 https://www.ti.com/lit/er/slaz523aa/slaz523aa.pdf?ts = 1729560620562&ref_url=https%253A%252F%252Fwww.google.com%252F
我从勘误表中得到的是、如果在触发有效中断时访问包含寄存器的中断、它将丢弃该中断。 但只有那个中断、以及启用中断系统后的进一步中断才没有问题。 我也不知道 TI 在说"模块寄存器"时指的是什么、这是否仅表示 UCS A0 A1 B0 B1中断子系统? 它是否扩展到所有其他外设/CPU。 例如、如果我在传输完成时使用 dma 中断进行存储器到存储器 dma 传输、由于 dma 是具有寄存器的模块、这也属于所谓的"A 模块寄存器"下。
我发现我自己的情况是、如果我按如下所示禁用中断、并且 在全局中断关闭的同时从外设生成一个中断请求。 再次启用中断后、DMA 通道将完全停止接收新的中断请求。
目前、我使用以下函数来保护某些代码、以启用和禁用中断。
void enter_critical_section() { __asm__ volatile( "DINT \n\t" /* Disable interrupts */ "NOP \n\t" /* Ensure DINT takes effect */ : : : "cc"); } void exit_critical_section() { __asm__ volatile( "NOP \n\t" "EINT \n\t" /* Re-enable interrupts */ "NOP \n\t" : : : "cc"); }
我的 DMA 通道是 DMA0通道0 (最高优先级){我还对其他2个通道进行了测试、该行为是相同的}
我要通过中断将 UART A0 RX 连接到 DMA0通道0以进行字节传输。
在这一关键部分之外、DMA + UART 会按预期运行。 但是、如果它在临界区内触发、就会中断。