您好,
我从技术参考手册中了解到PERINTSEL字段应为 通道号,在本例中为2。
但是,当我使用下面给出的DMA配置函数时
DMA_configMode( DMA_CH2_BASE, DMA_TRIGGER_EPWM2SOCA, (DMA_CFG_ONESHOT_DISABLE | DMA_CFG_CONTINUOUS_ENABLE | DMA_CFG_SIZE_16BIT));
DMA通道2未按预期工作。
相反,如果我直接写入寄存器并提供如下所示的值1,它是有效的!
DmaClaSrcSelRegs.DMACHSRCSEL1.bit.CH2 = DMA_TRIGGER_EPWM2SOCA;
DmaRegs.CH2.MODE.bit.PERINTSEL = 1;
DmaRegs.CH2.MODE.bit.PERINTE = 1;
DmaRegs.CH2.MODE.bit.CHINTE = 0;
DmaRegs.CH2.MODE.bit.ONESHOT = 0;
DmaRegs.CH2.MODE.bit.CONTINUOUS = 1;
DmaRegs.CH2.MODE.bit.DATASIZE = 0;
DmaRegs.CH2.MODE.bit.CHINTMODE = 0;
DmaRegs.CH2.MODE.bit.CHINTE = 0;
DmaRegs.CH2.CONTROL.bit.RUN = 1;
我正在对DMA通道1使用以下代码,它运行良好! 但是,如果我使用相同的代码,将CH1替换为CH2并删除 DMA_initController();& DMA_setEmulation Mode(DMA_emulation_free _run);(因为它已经在通道1初始化函数中完成,通道2不像通道1那样工作。
DMA_initController(); DMA_setEmulationMode(DMA_EMULATION_FREE_RUN); DMA_configSourceAddress(DMA_CH1_BASE, dma_src); DMA_configDestAddress(DMA_CH1_BASE, dma_dst); /* Channel 1, McBSPA transmit */ DMA_configBurst(DMA_CH1_BASE, 1, 1, 0); DMA_configTransfer(DMA_CH1_BASE, 10, 1, 0); DMA_configMode( DMA_CH1_BASE, DMA_TRIGGER_EPWM1SOCA, (DMA_CFG_ONESHOT_DISABLE | DMA_CFG_CONTINUOUS_ENABLE | DMA_CFG_SIZE_16BIT)); DMA_enableTrigger(DMA_CH1_BASE); DMA_disableInterrupt(DMA_CH1_BASE); DMA_setInterruptMode(DMA_CH1_BASE, DMA_INT_AT_BEGINNING); SysCtl_selectSecMaster(SYSCTL_SEC_MASTER_DMA, SYSCTL_SEC_MASTER_DMA); DMA_startChannel(DMA_CH1_BASE);
问题:
1.在使用多个渠道时,是否还有其他需要考虑的问题?
2.使用通道2时PERINTSEL的值是多少?
此致,
Rashmitha