2394465_zh-CN

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

2394465_zh-CN

2394465_zh-CN

SDK 中未实现 IMXRT EDMA 错误 IRQ 处理程序。

您好,

SDK 中的 IMXRT EDMA API 似乎能够正确处理“正常情况”中断。然而,似乎没有任何处理错误中断的机制。不仅如此,似乎所有 DMA 都只有一个全局的 DMA_ERROR_IRQHandler。因此,如果您同时使用 DMA0 和 DMA1,当一切正常时,DMA0/DMA1 IRQHandler 将被调用,SDK 可以区分哪个 DMA 收到了正常中断。但是,如果出现 DMA 错误,由于只有一个全局错误中断处理程序,因此没有简单的方法可以知道错误发生在哪个 DMA(0 或 1 或其他)上。

就像我之前关于 LPUART 错误 IRQ 处理的问题一样。为什么 SDK 没有内置处理 DMA 错误并调用相应回调的功能?现在我必须手动确定错误发生在哪个 DMA 上,并在 SDK 之外调用特殊处理,而不是让它为我调用回调。

对于一个本应在生产代码中使用的 SDK 来说,似乎缺少很多健壮性功能,我敢打赌大多数人只是假设这些错误是由 SDK 在底层处理的,而没有考虑到它们实际上并没有被处理。

-m

Re: IMXRT EDMA error IRQ handler is not implemented in the SDK

尊敬的@nxp16

您使用的是哪款 i.MX RT 设备?当您提到 DMA0 和 DMA1 时,您指的是两个 DMA 通道,还是两个 DMA 控制器外设?

并非所有 i.MX RT 设备都具有两个 eDMA 控制器。例如:

  • i.MX RT1180 包含两个 eDMA 控制器。在启动文件(例如 startup_mimxrt1189_cm33.c)中,您可以找到两个 DMA 错误处理程序:DMA_ERROR_IRQHandler 和 DMA4_ERROR_IRQHandler。

  • i.MX RT1050 仅包含一个 eDMA 控制器。在启动文件(例如 startup_mimxrt1052.c)中,只有一个 DMA 错误处理程序:DMA_ERROR_IRQHandler。

一般来说,DMA 错误是相对不常发生的事件。从硬件架构的角度来看,通道错误状态被聚合为模块级错误请求,从而触发 DMA 错误中断。因此,该软件必须检查每个通道的错误状态寄存器(例如,CHn_ES),以确定哪个特定通道导致了错误。

顺祝商祺!

张雪莉

タグ(1)
評価なし
バージョン履歴
最終更新日:
昨日
更新者: