大家好,
我想通过dma的方式实现pwm duty的修改,可是根本无法输出pwm波形,并且进入不了TimerA3IntHandler中断处理函数,代码如下,请各位大侠帮忙分析一下,十分感激
static void
TimerA3IntHandler(void)
{
unsigned long ulStatus;
//
// Clear all interrupts for Timer unit 0.
//
ulStatus = MAP_TimerIntStatus(TIMERA3_BASE, true);
MAP_TimerIntClear(TIMERA3_BASE, ulStatus);
MAP_TimerEnable(TIMERA3_BASE, TIMER_A);
}
for(uint8_t i =0;i<255;i++)
duty_cycle[i] = i*DUTYCYCLE_GRANULARITY;
//
// TIMERA3 (TIMER B) as YELLOW of RGB light. GPIO 10 --> PWM_6
//
SetupTimerPWMMode(TIMERA3_BASE, TIMER_A, (TIMER_CFG_SPLIT_PAIR | TIMER_CFG_A_PWM), 1);
UDMAInit();
UDMAChannelSelect(UDMA_CH6_TIMERA3_A, NULL);
//
// Setup DMA transfer for PWM
//
MAP_TimerIntRegister(TIMERA3_BASE,TIMER_A,TimerA3IntHandler);
MAP_TimerIntEnable(TIMERA3_BASE,TIMER_TIMA_MATCH);
UDMASetupTransfer(UDMA_CH6_TIMERA3_A,UDMA_MODE_BASIC,255,UDMA_SIZE_16,UDMA_ARB_1,
(void *)duty_cycle,
UDMA_SRC_INC_16,
(void *)(TIMERA3_BASE+TIMER_O_TAMATCHR),
UDMA_DST_INC_NONE);
MAP_uDMAChannelAttributeEnable(UDMA_CH6_TIMERA3_A,UDMA_ATTR_HIGH_PRIORITY);
MAP_TimerDMAEventSet(TIMERA3_BASE,TIMER_DMA_MODEMATCH_A);
MAP_uDMAChannelRequest(UDMA_CH6_TIMERA3_A);
}