打印
[技术问答]

029sge, 把time配置成pwm 后,有没有方法通过pdma输入一组数据...

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

使用特权

评论回复
沙发
laocuo1142|  楼主 | 2022-5-17 09:35 | 只看该作者

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);



使用特权

评论回复
板凳
laocuo1142|  楼主 | 2022-5-17 09:36 | 只看该作者

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



使用特权

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

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

使用特权

评论回复
5
laocuo1142|  楼主 | 2022-5-17 09:38 | 只看该作者
PWM频率是800K

使用特权

评论回复
6
flycamelaaa| | 2022-5-17 09:39 | 只看该作者
无法实现

我们现在的针对pwm或者timer,都是捕获时触发PDMA将捕获值搬运到内存中

使用特权

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

本版积分规则

1191

主题

5220

帖子

12

粉丝