|
大家好,我用的是F28M36xDSP,开发工具为CCS5.5。我想通过定时器的time-out事件来触发uDMA 每隔1秒发送一次数据。
配置程序如下:
1、udma配置
void uDMA_Cfg(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA);
uDMAEnable();
uDMAControlBaseSet(ucControlTable);
uDMAChannel16_23SelectDefault(UDMA_CHAN18_DEF_TMR0A_M);
uDMAChannelAttributeDisable(UDMA_CHANNEL_TMR0A, UDMA_ATTR_ALTSELECT | UDMA_ATTR_HIGH_PRIORITY | UDMA_ATTR_REQMASK);
uDMAChannelAttributeEnable(UDMA_CHANNEL_TMR0A, UDMA_ATTR_USEBURST);
uDMAChannelControlSet(UDMA_CHANNEL_TMR0A | UDMA_PRI_SELECT, UDMA_SIZE_8 | UDMA_SRC_INC_8 | UDMA_SRC_INC_8 | UDMA_ARB_16);
uDMAChannelTransferSet(UDMA_CHANNEL_TMR0A | UDMA_PRI_SELECT, UDMA_MODE_BASIC, "Time-out drivers", buff2, 16);
uDMAIntRegister(UDMA_INT_SW,uDMARcvHandler);
IntRegister(INT_UDMA,uDMARcvHandler);
IntPriorityGroupingSet(UDMA_INT_PREEM_PRI);
IntPrioritySet(INT_UDMA,UDMA_INT_SUBGRUOP_PRI);
IntEnable(INT_UDMA);
uDMAChannelEnable(UDMA_CHANNEL_TMR0A);
}
2、通用定时器配置
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);
TimerConfigure(TIMER0_BASE,TIMER_CFG_32_BIT_PER);
TimerControlStall(TIMER0_BASE,TIMER_A,false);
TimerLoadSet(TIMER0_BASE,TIMER_A,SysCtlClockGet(SYSTEM_CLOCK_SPEED));
IntRegister(INT_TIMER0A,TimerHandler);
TimerIntEnable(TIMER0_BASE,TIMER_TIMA_TIMEOUT);
IntPriorityGroupingSet(TIMER_INT_PREEM_PRI);
IntPrioritySet(INT_TIMER0A,TIMER_INT_SUBGRUOP_PRI);
IntEnable(INT_TIMER0A);
TimerEnable(TIMER0_BASE,TIMER_A);
IntMasterEnable();
其中定时器和uDMA都有中断服务函数,分别是uDMARcvHandler、TimerHandler,两个中断的抢断优先级一样,应答优先级定时器的高。
定时器的中断能够被触发,udma的定时器专用通道软件触发后工作正常。但定时器无法触发udma,udma后端的缓冲时钟无数据。
请问其中的原因是什么?还有什么地方没有配置号?
谢谢!
|
|