工具/软件:TI C/C++编译器
您好!
我´m MSP432 Simple Link Libary 来使用 DMA 进行缓冲区传输。 n`t 示例在通道0上工作正常、但如果我将代码更改为通道1、则会调用中断矢量 DO μ s。
只能将通道0用于软件传输吗?
工作代码:(来自示例库):
int main (空)
{
/*停止看门狗*/
MAP_WDT_A_HOLDTimer();
/*零填充目标*/
memset (destinationArray、0x00、1024);
isfinished= false;
/*配置 DMA 模块*/
map_dma_enableModule();
MAP_DMA_setControlBase (controlTable);
/*设置控制索引。 在本例中、我们将设置的源
* DMA 传输到我们的随机数据数组、目标传输到
*目的数据数组。 设置为自动模式、无需再触发
*在每次仲裁之后*/
MAP_DMA_setChannelControl (UDMA_PRI_SELECT、
UDMA_SIZE_8 | UDMA_SRC_INC_8 | UDMA_DST_INC_8 | UDMA_ARC_1024);
MAP_DMA_setChannelTransfer (UDMA_PRI_SELECT、UDMA_MODE_AUTO、DATA_ARRAY、
destinationArray,1024);
/*分配/启用中断*/
MAP_DMA_赋 值中断(DMA_INT1、0);
MAP_Interrupt_enableInterrupt (INT_DMA_INT1);
MAP_Interrupt_disableSlepOnIsrExit();
//启用 DMA 通道0 */
MAP_DMA_enableChannel (0);
/*强制在 DMA 通道0上进行软件传输*/
MAP_DMA_requestSoftwareTransfer (0);
while (1)
{
MAP_PCM_gotoLPM0InterruptSafe ();
if (已完成)
while (1);
}
}
针对 DMA 的/*完成中断*/
空 DMA_INT1_IRQHandler (空)
{
MAP_DMA_disableChannel (0);
isfinished= true;
}
不起作用的代码:
int main (空)
{
/*停止看门狗*/
MAP_WDT_A_HOLDTimer();
/*零填充目标*/
memset (destinationArray、0x00、1024);
isfinished= false;
/*配置 DMA 模块*/
map_dma_enableModule();
MAP_DMA_setControlBase (controlTable);
/*设置控制索引。 在本例中、我们将设置的源
* DMA 传输到我们的随机数据数组、目标传输到
*目的数据数组。 设置为自动模式、无需再触发
*在每次仲裁之后*/
MAP_DMA_setChannelControl (UDMA_PRI_SELECT、
UDMA_SIZE_8 | UDMA_SRC_INC_8 | UDMA_DST_INC_8 | UDMA_ARC_1024);
MAP_DMA_setChannelTransfer (UDMA_PRI_SELECT、UDMA_MODE_AUTO、DATA_ARRAY、
destinationArray,1024);
/*分配/启用中断*/
MAP_DMA_赋 值中断(DMA_INT1、1);
MAP_Interrupt_enableInterrupt (INT_DMA_INT1);
MAP_Interrupt_disableSlepOnIsrExit();
//启用 DMA 通道0 */
MAP_DMA_enableChannel (1);
/*强制在 DMA 通道0上进行软件传输*/
MAP_DMA_requestSoftwareTransfer (1);
while (1)
{
MAP_PCM_gotoLPM0InterruptSafe ();
if (已完成)
while (1);
}
}
针对 DMA 的/*完成中断*/
空 DMA_INT1_IRQHandler (空)
{
MAP_DMA_disableChannel (1);
isfinished= true;
}
此致
Steffen