打印
[技术问答]

pwm 捕获

[复制链接]
1006|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
shen_hao|  楼主 | 2017-8-24 14:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下为numaker bricks的一段程序,我对pwm捕获的一些设置比较疑惑。这个程序是关于HC-SR04,获取高电平时间,我原以为pwm捕获要配置为上升沿和下降沿触发才算ok,没想到它只配置fall-edge,在计算高电平的时间竟然还去明目张胆的获取rising-edge的时间,再去获取fall-edge的时间。想到这里只能认为是上升沿和下降沿的中断无论是否使能 与 上/下升沿寄存器保存计数器的值  毫无关系。   唉,多么痛的领悟

// ----------Set PWM0 CH4 as SONAR Rx---------------
        /* set PWM1 channel 5 capture configuration, 5us*/
        PWM_ConfigCaptureChannel(PWM0, 4, 5000, 0);

        /* Enable capture falling edge interrupt for PWM0 channel 3 */
        PWM_EnableCaptureInt(PWM0, 4, PWM_CAPTURE_INT_FALLING_LATCH);

        /* Enable PWM0 NVIC interrupt */
       
/*p2对应的应该是pwm的4、5通道,两个通道共享一个INT*/
        NVIC_EnableIRQ(PWM0P2_IRQn);

        /* Enable Timer for PWM0 channel 4 */
        PWM_Start(PWM0, PWM_CH_4_MASK);

        /*Enable Input Schmitt Trigger*/
        //PC->SMTEN |= GPIO_SMTEN_SMTEN4_Msk;

        /* Enable Capture Function for PWM0 channel 4 */
        PWM_EnableCapture(PWM0, PWM_CH_4_MASK);

        /* Enable falling capture reload */
        PWM0->CAPCTL |= PWM_CAPCTL_FCRLDEN4_Msk;
沙发
shen_hao|  楼主 | 2017-8-24 14:39 | 只看该作者
uint16_t IrSonar_CalPeriodTime(PWM_T *PWM, uint32_t u32Ch)//这是计算的函数
{
        uint16_t u16RisingTime, u16FallingTime, u16Period;

        u16RisingTime = PWM_GET_CAPTURE_RISING_DATA(PWM, u32Ch);

        u16FallingTime = PWM_GET_CAPTURE_FALLING_DATA(PWM, u32Ch);

        u16Period = u16RisingTime - u16FallingTime;

        //printf("\nCapture Result: Rising Time = %d, Falling Time = %d \nHigh Period = %d",
        //u16RisingTime, u16FallingTime, u16Period);

        return u16Period;

使用特权

评论回复
板凳
zhuotuzi| | 2017-8-24 16:18 | 只看该作者
好纠结的经验啊。

使用特权

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

本版积分规则

79

主题

230

帖子

2

粉丝