TI中文支持网
TI专业的中文技术问题搜集分享网站

TM4C1294NCPDT: UDMA与TIMER之间的数据传输

Part Number:TM4C1294NCPDT

请问如何配置UDMA为循环传输MemoryToPeriheral

将内存中的一个数组的值逐一传到TIMER2A的MATCH寄存器,每一次计数结束传输一次,达到生成不同占空比的PWM波形的目的。

目前我的代码配置为

//TIMER配置

SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER2);
TimerConfigure(TIMER2_BASE, TIMER_CFG_SPLIT_PAIR | TIMER_CFG_A_PWM);
TimerLoadSet(TIMER2_BASE, TIMER_A, 61);
TimerControlLevel(TIMER2_BASE, TIMER_A, true);
TimerDMAEventSet(TIMER2_BASE,TIMER_DMA_TIMEOUT_A);
TimerEnable(TIMER2_BASE, TIMER_A);

//UDMA配置为

uint8_t pui8ControlTable[1024];
SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA);
uDMAEnable();
uDMAControlBaseSet(pui8ControlTable);
uDMAChannelAttributeDisable(UDMA_SEC_CHANNEL_TMR2A_4, UDMA_ATTR_ALTSELECT | UDMA_ATTR_USEBURST | UDMA_ATTR_HIGH_PRIORITY | UDMA_ATTR_REQMASK);
uDMAChannelSelectSecondary(UDMA_DEF_USBEP3RX_SEC_TMR2A);
uDMAChannelAssign(UDMA_CH4_TIMER2A);
uDMAChannelAttributeEnable(UDMA_SEC_CHANNEL_TMR2A_4, UDMA_ATTR_USEBURST);
uDMAChannelControlSet(UDMA_SEC_CHANNEL_TMR2A_4 | UDMA_PRI_SELECT, UDMA_SIZE_32 | UDMA_SRC_INC_32 | UDMA_DST_INC_NONE | UDMA_ARB_4);
uDMAChannelTransferSet(UDMA_SEC_CHANNEL_TMR2A_4 | UDMA_PRI_SELECT,
UDMA_MODE_BASIC, buffer,
(void *)(TIMER2_BASE + TIMER_O_TAMATCHR), num);
uDMAChannelEnable(UDMA_SEC_CHANNEL_TMR2A_4);

 通过调试我发现该寄存器的值并不会变化,请问有什么好的办法去解决他吗

Cherry Zhou:

您好我们已收到您的问题并升级到英文论坛,温馨提示您由于圣诞节及新年假期,英文论坛的回复将稍晚。敬请谅解!

,

Cherry Zhou:

您好,我们不建议您调用 uDMAChannelSelectSecondary ,它一般用于传统支持。 您已经调用了 uDMAChannelAssign,工程师认为足够支持。

除此之外没啥特别明显的错误。

您也可以参考以下帖子:

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1006356/tm4c1294kcpdt-timer-udma-ssi-synchronization-problem?tisearch=e2e-sitesearch&keymatch=TimerDMAEventSet#

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/647001/rtos-tm4c1294ncpdt-timer-and-udma/2379569?tisearch=e2e-sitesearch&keymatch=TimerDMAEventSet#2379569

,

qian zha:

您好,目前的代码并没有起到我想要的功能,我无法观察到变化占空比的PWM波,是否UDMA无法支持这样的类似STM32的DMA循环传输的功能,还是需要配置为其他模式。在问这个问题之前,我已经参考了第二个帖子,但似乎不能解决我的问题。

,

Cherry Zhou:

您好,数据表中提到如果未启用Timer match interrupt(计时器匹配中断),DMA 请求可能无法assert。 您是否可以尝试下启用match interrupt,如下所示,看下是否有帮助: TimerIntEnable (TIMER2_BASE 、 TIMER_TIMA_MATCH) ;

,

qian zha:

好的,感谢您的解答!

赞(0)
未经允许不得转载:TI中文支持网 » TM4C1294NCPDT: UDMA与TIMER之间的数据传输
分享到: 更多 (0)