打印
[技术问答]

M453系列PWM捕捉问题

[复制链接]
521|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ssmm1228|  楼主 | 2020-4-21 09:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
M453系列有2路PWM,每路有6个通道。使用捕捉功能,发现有的通道不能捕捉到。拿开发板试了全部12个通道,发现只有4个通道可以使用。分别是PWM0和PWM1的2,3通道可以正常工作。0,1,4,5无法正常工作。问下各位,是我的设置有问题吗?
12通道,分别实验:
//        PWM0_CH0_Init();                        //0
//        PWM0_CH1_Init();                        //0
//        PWM0_CH2_Init();                        //OK
//        PWM0_CH3_Init();                        //OK
//        PWM0_CH4_Init();                        //0
//        PWM0_CH5_Init();                        //0
//       
//        PWM1_CH0_Init();                        //0
//        PWM1_CH1_Init();                        //0
//        PWM1_CH2_Init();                        //OK
//        PWM1_CH3_Init();                        //OK
//        PWM1_CH4_Init();                        //0
        PWM1_CH5_Init();                        //0

使用特权

评论回复
沙发
ssmm1228|  楼主 | 2020-4-21 09:22 | 只看该作者
附PWM0_CH0_Init()和PWM0_CH2_Init()初始化代码。
void PWM0_CH0_Init(void)
{
//1-复位PWM1
    SYS_ResetModule(PWM0_RST);

//2-设置PWM计数器工作模式&预分频器
        //设置预分频器。分频比1+1=2,144MHz/2=72MHz
        PWM0->CLKPSC0_1 = 1;

    //设置向上计数模式&计数器自动重载
        PWM0->CTL1 &= ~(0x00000001 << (16+0));                                                        //计数器设置为自动重载模式
        PWM0->CTL1 &= ~(0x00000003 << (2 * 0));                                                //设置向上计数模式                               
       
        //设置计数最大周期PERIOD
    (PWM0)->PERIOD[0] = 0xFFFF;                                                //计数器最大值设置为0xFFFF
       
//3-设置捕捉工作模式&使能相应管教
        //使能PWM输入捕捉, PWM通道捕捉功能的输入来自相关的复用管脚。
        PWM0->CAPINEN |= (0x00000001 << 0);                       
       
        //使能捕捉功能。当检测到输入信号的上升/下降沿时锁存PWM计数器值并保存到RCAPDAT(向上锁存)和FCAPDAT(向下锁存)。
        PWM0->CAPCTL |= (0x00000001 << 0);                       
       

        //使能上升沿捕捉重载计数器
        PWM0->CAPCTL |= (0x00000001 << (16+0));
       
//4-中断使能
        //CAPIEN,使能上升沿锁存中断
        PWM0->CAPIEN |= (0x00000001 << 0);
       
        //INTEN0,使能周期点中断(计数器溢出中断)
//        (PWM0)->INTEN0 |= (PWM_INTEN0_PIEN0_Msk << 2);                                //暂不使能计数器溢出中断,用不到

        //使能NVIC中断
        NVIC_EnableIRQ(PWM0P1_IRQn);

//5-计数器使能
        //CNTEN,PWM计数器和时钟分频器开始工作
        PWM0->CNTEN |= (0x00000001 << 0);       
}

void PWM0_CH2_Init(void)
{
//1-复位PWM1
    SYS_ResetModule(PWM0_RST);

//2-设置PWM计数器工作模式&预分频器
        //设置预分频器。分频比1+1=2,144MHz/2=72MHz
        PWM0->CLKPSC2_3 = 1;

    //设置向上计数模式&计数器自动重载
        PWM0->CTL1 &= ~(0x00000001 << (16+2));                                                        //计数器设置为自动重载模式
        PWM0->CTL1 &= ~(0x00000003 << (2 * 2));                                                //设置向上计数模式                               
       
        //设置计数最大周期PERIOD
    (PWM0)->PERIOD[2] = 0xFFFF;                                                //计数器最大值设置为0xFFFF
       
//3-设置捕捉工作模式&使能相应管教
        //使能PWM输入捕捉, PWM通道捕捉功能的输入来自相关的复用管脚。
        PWM0->CAPINEN |= (0x00000001 << 2);                       
       
        //使能捕捉功能。当检测到输入信号的上升/下降沿时锁存PWM计数器值并保存到RCAPDAT(向上锁存)和FCAPDAT(向下锁存)。
        PWM0->CAPCTL |= (0x00000001 << 2);                       
       

        //使能上升沿捕捉重载计数器
        PWM0->CAPCTL |= (0x00000001 << (16+2));
       
//4-中断使能
        //CAPIEN,使能上升沿锁存中断
        PWM0->CAPIEN |= (0x00000001 << 2);
       
        //INTEN0,使能周期点中断(计数器溢出中断)
//        (PWM0)->INTEN0 |= (PWM_INTEN0_PIEN0_Msk << 2);                                //暂不使能计数器溢出中断,用不到

        //使能NVIC中断
        NVIC_EnableIRQ(PWM0P1_IRQn);

//5-计数器使能
        //CNTEN,PWM计数器和时钟分频器开始工作
        PWM0->CNTEN |= (0x00000001 << 2);       
}

使用特权

评论回复
板凳
ssmm1228|  楼主 | 2020-4-21 09:23 | 只看该作者
附中断代码。
/****************************************
*函数名称:PWM0P1_IRQHandler
*输    入:无
*输    出:无
*功    能:捕捉中断
******************************************/
void PWM0P1_IRQHandler(void)
{       
        PB15 = !PB15;
        if(((PWM0)->CAPIF & (0x00000001 << 0))!=0)                                                                //上升沿捕获中断
    {
        PWM0->CAPIF |= (0x00000001 << 0);
                Cap = PWM0->RCAPDAT0;
               
                PB0 = !PB0;
    }
       
        if(((PWM0)->CAPIF & (0x00000001 << 1))!=0)                                                                //上升沿捕获中断
    {
        PWM0->CAPIF |= (0x00000001 << 1);
                Cap = PWM0->RCAPDAT1;
               
                PB1 = !PB1;
    }
       
        if(((PWM0)->CAPIF & (0x00000001 << 2))!=0)                                                                //上升沿捕获中断
    {
        PWM0->CAPIF |= (0x00000001 << 2);
                Cap = PWM0->RCAPDAT2;
               
                PB2 = !PB2;
    }
       
        if(((PWM0)->CAPIF & (0x00000001 << 3))!=0)                                                                //上升沿捕获中断
    {
        PWM0->CAPIF |= (0x00000001 << 3);
                Cap = PWM0->RCAPDAT3;
               
                PB3 = !PB3;
    }
       
        if(((PWM0)->CAPIF & (0x00000001 << 4))!=0)                                                                //上升沿捕获中断
    {
        PWM0->CAPIF |= (0x00000001 << 4);
                Cap = PWM0->RCAPDAT4;
               
                PB4 = !PB4;
    }
       
        if(((PWM0)->CAPIF & (0x00000001 << 5))!=0)                                                                //上升沿捕获中断
    {
        PWM0->CAPIF |= (0x00000001 << 5);
                Cap = PWM0->RCAPDAT5;
               
                PB8 = !PB8;
    }
}

使用特权

评论回复
地板
ssmm1228|  楼主 | 2020-4-21 10:20 | 只看该作者
结贴。
原来我搞错了。
PWM1P0_IRQn对应通道0,1的中断事件;
PWM1P1_IRQn对应通道2,3的中断事件;
PWM1P2_IRQn对应通道4,5的中断事件;

使用特权

评论回复
5
wanduzi| | 2020-4-21 23:34 | 只看该作者
跟我想的一样,两个共用一个。

使用特权

评论回复
6
wanduzi| | 2020-4-21 23:35 | 只看该作者
可以参考新唐其他系列,具备中文手册的,这些东西基本上都是一样的,就是数量多少问题。原理一样。

使用特权

评论回复
7
天灵灵地灵灵| | 2020-4-22 13:11 | 只看该作者
PWM成对操作。

使用特权

评论回复
8
heisexingqisi| | 2020-4-23 21:00 | 只看该作者
设置问题。

使用特权

评论回复
9
yiy| | 2020-4-26 20:21 | 只看该作者
这个捕捉效果如何

使用特权

评论回复
10
xixi2017| | 2020-4-27 21:33 | 只看该作者
多用几次就熟了。

使用特权

评论回复
11
734774645| | 2020-4-27 23:54 | 只看该作者
原来如此,666

使用特权

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

本版积分规则

19

主题

95

帖子

3

粉丝