I am trying to get an application driver working on the CC3200. It requires that a DMA transfer be triggered from a timer operating in PWM mode. I have got the timer operating properly, but I cannot get the DMA to trigger. I can trigger it manually by issuing a software request, but it will not initiate from the timer. The application requires that a new timer match value be loaded every PWM cycle, and the DMA is set up to do this, but nothing happens. The code is summarized below.
UDMAInit();
MAP_PRCMPeripheralClkEnable(PRCM_TIMERA3, PRCM_RUN_MODE_CLK);
MAP_TimerDisable(TIMERA3_BASE,TIMER_B);
MAP_TimerConfigure(TIMERA3_BASE,(TIMER_CFG_SPLIT_PAIR | TIMER_CFG_B_PWM));
MAP_TimerPrescaleSet(TIMERA3_BASE,TIMER_B,0);
MAP_TimerControlLevel(TIMERA3_BASE,TIMER_B,0);
MAP_TimerControlEvent(TIMERA3_BASE,TIMER_B,TIMER_EVENT_POS_EDGE);
MAP_TimerLoadSet(TIMERA3_BASE,TIMER_B,TIMER_INTERVAL_RELOAD);
MAP_TimerEnable(TIMERA3_BASE,TIMER_B);
MAP_uDMAChannelDisable(7);
MAP_uDMAChannelAssign(UDMA_CH7_TIMERA3_B);
SetupTransfer(UDMA_CH7_TIMERA3_B, UDMA_MODE_BASIC, (STRIPLENGTH * 3)-1,
UDMA_SIZE_16, UDMA_ARB_1,(void *)(&DMABuffer), UDMA_SRC_INC_16,
(void *)(TIMERA3_BASE + 0x34),UDMA_DST_INC_NONE);
MAP_uDMAChannelAttributeDisable(UDMA_CH7_TIMERA3_B,UDMA_ATTR_ALTSELECT | UDMA_ATTR_USEBURST | UDMA_ATTR_REQMASK);
MAP_uDMAChannelAttributeEnable(UDMA_CH7_TIMERA3_B,UDMA_ATTR_HIGH_PRIORITY);
MAP_uDMAChannelAssign(UDMA_CH7_TIMERA3_B);
MAP_uDMAChannelEnable(7);
MAP_TimerDMAEventSet(TIMERA3_BASE,TIMER_DMA_TIMEOUT_B);
After this is run, all visible registers are set up correctly, and the PWM timer is running fine and generating the expected pulse waveform, but the DMA does not run, (unless I issue software requests). What am I missing here?
Thanks in advance for any help.