打印
[技术问答]

029sge, 把time配置成pwm 后,有没有方法通过pdma输入一组数据,控制这个pwm占空比

[复制链接]
230|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
两只袜子|  楼主 | 2022-6-24 09:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
把time配置成pwm已经完成,但是把buffer 200多个字数据通过pdma输入到TIMER1 -> PWMCMPDAT,总是会卡在while处。类似的程序功能stm32可以实现。本人不确定,029芯片pdma是不是可以这样使用,如果可以请教高人,下面的程序哪里有问题,谢谢。

使用特权

评论回复
沙发
两只袜子|  楼主 | 2022-6-24 09:01 | 只看该作者
029sge程序:不能实现功能,卡在while



        /* Enable PDMA clock source */



        CLK_EnableModuleClock(PDMA_MODULE);



       



        /* Open Channel 2 */



        PDMA_Open(1 << 2);







        /* Transfer count is PDMA_TEST_LENGTH, transfer width is 32 bits(one word) */



        PDMA_SetTransferCnt(2, PDMA_WIDTH_32, buffersize);



       



        /* Set source address is au8SrcArray, destination address is au8DestArray, Source/Destination increment size is 32 bits(one word) */



        PDMA_SetTransferAddr(2, (uint32_t)LED_BYTE_Buffer, PDMA_SAR_INC, (uint32_t)(&(TIMER1 -> PWMCMPDAT)), PDMA_DAR_FIX);







        /* Request source is memory to TMR1 */



        PDMA_SetTransferMode(2, PDMA_TMR1, FALSE, 0);



       



        /* Transfer type is burst transfer and burst size is 1 */



        PDMA_SetBurstType(2, PDMA_REQ_BURST, PDMA_BURST_1);







  TPWM_CLEAR_COUNTER(TIMER1);



       



        /* Start Timer PWM counter */



        TPWM_START_COUNTER(TIMER1);



       



        /* Generate a software request to trigger transfer with PDMA channel 2  */



        PDMA_Trigger(2);



       



        while(!(PDMA_GET_TD_STS() & PDMA_TDSTS_TDIF2_Msk));







        TPWM_STOP_COUNTER(TIMER1);



       



        /* Clear transfer done flag of channel 2 */



        PDMA_CLR_TD_FLAG(PDMA_TDSTS_TDIF2_Msk);



问题补充 : 2022/03/22 18:33
stm32程序,可以实现想要的功能



        DMA_SetCurrDataCounter(DMA1_Channel7, buffersize);                        



        TIM_SetCounter(TIM2,0x0000);



        TIM_Cmd(TIM2, ENABLE);                                                 // enable Timer 2



        DMA_Cmd(DMA1_Channel7, ENABLE);



        while(!DMA_GetFlagStatus(DMA1_FLAG_TC7));         // wait until transfer complete



        TIM_Cmd(TIM2, DISABLE);                         // disable Timer 2



        TIM_ClearFlag(TIM2,TIM_FLAG_CC2);



        DMA_Cmd(DMA1_Channel7, DISABLE);                         // disable DMA channel 7



        DMA_ClearFlag(DMA1_FLAG_TC7);                                 // clear DMA1 Channel 7 transfer complete flag

使用特权

评论回复
板凳
两只袜子|  楼主 | 2022-6-24 09:01 | 只看该作者
简单讲我想实现的功能就是类似stm32芯片的  PWM+DMA控制灯带,DMA输出占空比值,PWM输出不同的波形,控制灯的颜色亮度。

有没有前辈能回复快一点,不胜感激。

使用特权

评论回复
地板
两只袜子|  楼主 | 2022-6-24 09:02 | 只看该作者
PWM频率是800K

使用特权

评论回复
5
jcky001| | 2022-6-25 09:00 | 只看该作者
无法实现
我们现在的针对pwm或者timer,都是捕获时触发PDMA将捕获值搬运到内存中

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1882

主题

6436

帖子

8

粉丝