打印
[技术问答]

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

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


使用特权

评论回复
沙发
海滨消消|  楼主 | 2022-3-23 10:05 | 只看该作者
问题补充: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-3-23 10:06 | 只看该作者

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


使用特权

评论回复
地板
jasontu| | 2022-3-24 10:35 | 只看该作者
PWM CAPTURE+PDMA可以。
TIMER CAPTURE不行

使用特权

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

本版积分规则

237

主题

1593

帖子

2

粉丝