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.
工具/软件:TI-RTOS
代码生成工具7.4.23
SYSBIOS 6.46.2.47
EDMA3LLD 2.12.0
定制板
那么、这里是发生的情况。 我们将调用 hEdma[0]= edma3init (0、&result);以初始化 EDMA3、并由此提供带有事件组合器和中断的设置。 我刚刚开始使用 EDMA3来使用我们的 McBSP 设置。 我觉得一切都设置正确、因为 EDMA3会进行通道排序、并且会在乒乓缓冲器中正确连接、因此看起来就像这样。 它不间断运行、内存始终在移动。 我的问题是、我的回叫例程只会针对每个通道(Rx 和 TX)调用一次、然后再也不会调用。
我请求的主渠道如下:
uint32_t MemcpychId = EDMA3_DRV_HW_CHANGE_EVENT_5;
uint32_t TCC = EDMA3_DRV_TCC_ANY;
/*发送*/
结果= EDMA3_DRV_requestChannel (hEdma[0]、&MemcpychId、&TCC、(EDMA3_RM_EventQueue) 0、&EMDMAMCBSP1Txcallback、 null);
请求的链路通道如下所示:
uint32_t MemcpychIdtemp = EDMA3_DRV_LINK_CHANNEL;
TCC = EDMA3_DRV_TCC_ANY;
结果= EDMA3_DRV_requestChannel (hEdma[0]、&MemcpychIdtemp、&TCC、0、&EMDMAMCBSP1Txcallback、 null);
因此它们都具有相同的回调函数。 它们都为 TCINT 初始化
结果= EDMA3_DRV_setOptField (hEdma[0]、MemcpychId、EDMA3_DRV_OPT_FIELD_TCINTEN、EDMA3_DRV_TCINTEN);
和
结果= EDMA3_DRV_setOptField (hEdma[0]、McBSP1TxParamTable[count]、EDMA3_DRV_OPT_FIELD_TCINTEN、EDMA3_DRV_TCINTEN);//在链路通道的环路内
当我尝试将事件组合器直接用于 McBSP RRDY 和 XRDY 中断时、这是一个与事件组合器类似的问题。 它将触发一次中断、然后再也不会触发中断。 到目前为止、处理 McBSP 中断的唯一方法是直接在 HWI 模块中设置中断。
我的系统 IER 显示已启用正确的中断、GIE 已启用、EER 显示已启用事件。 我的 IFR 没有显示任何内容。
事件组合器是否无法处理类似中断? 我知道它适用于基本的存储器副本、而 EDMA3没有问题、并且我已经将它用于其他不像 UART 和 LCD 控制器那样频繁触发的中断。
当中断发生时、TCC 会从通道中清除。 重新加载可能与中断标志无关、但在传输完成后、它确实会为通道提供一个 TCC 编号来处理。 我不理解的是、为何在完成传输后清除 TCC。
我认为您理解不正确。 我们之前从未将 EDMA 用于 McBSP、我们直接将 HWI 模块用于 RRDY 和 XRDY 事件。 这是我们第一次使用针对 McBSP 的 EDMA
感谢 Randy 的跟进
我正在使用一种带有链接参数集的乒乓方法。 我现在在设置中设置 TCC、而不是 ISR。 如果我只是执行 getParam->setParam 来复制通道,我可能不会有这个问题,但是由于这是我第一次尝试 EDMA 和 McBSP,我想先显式使其工作,然后在工作时进行优化。 我在 ISR 内部唯一要做的是 GetParam 来查看在 param 中加载了哪个缓冲区、因此我知道在发出 SWI 之前用哪种方法设置我的 pingpong 变量。 有没有更好的方法来算出乒乓模式?