[技术问答] 使用MO58LBN P2.6捕捉功能测量频率无法读出寄存器CRLR2B和CFLR2B?

[复制链接]
3617|29
 楼主| DLF5 发表于 2014-7-23 21:32 | 显示全部楼层 |阅读模式
本帖最后由 DLF5 于 2014-7-23 21:48 编辑

有朋友使用过该功能么?给段例程或给予知道,谢谢了。

按照例程改的程序,在PWMB中断中读出的CRLR2B和CFLR2B值要么是0xFFFF,或者是0x0000,在中断中驱动一LED灯表明PWMB中断正常,当有频率信号进入P2.6时,LED闪烁,频率高时闪烁块,频率低时闪烁慢。P2.6无信号输入时,灯不亮。以上现象说明上升沿和下降沿捕捉中断正常,只是寄存器读出的数值不对,这是什么原因造成的?

我用的是直接寄存器控制方式!
haolaishi 发表于 2014-7-24 08:54 | 显示全部楼层
你上程序看看,确定按照例程修改的?那么把例程烧进去结果如何
 楼主| DLF5 发表于 2014-7-24 09:57 | 显示全部楼层
我的目标板不支持例程!
 楼主| DLF5 发表于 2014-7-24 10:37 | 显示全部楼层
本帖最后由 DLF5 于 2014-7-31 15:02 编辑

void PWMB_Init(void)   
{
    P2_MFP = P2_MFP & (~P26_AD14_PWM6 ) | PWM6 ; //中:设置P2.6,功能
    P2_PMD = P2_PMD & (~Px6_PMD ) | Px6_QB;      //中:配置P2.6为准双向模式

    APBCLK |= PWM67_CLKEN;                           //中:使能PWM6,1时钟6
    CLKSEL2 = (CLKSEL2 & (~PWM67_CLK)) | PWM67_12M;         //中:选择外部12M晶振输入作为Capture6和PWM6时钟源6

    PPRB =   0x000000B0;                                //PWM67 B 11+1=12预分频率      
    CSRB  = CSRB & 0xF8FF ;                                 //
    CSRB |= CSR6_CLK_1;                                      //中:设置PWM6时钟分频值1
    PCRB |= CH6_AU_RL;                                //使能PWM6定时器开始运行/自动重装/关闭反向
    PCRB &=(~CH6INV_ON);

    CNR2B = 0xFFFF;                                  //中:设置Capture6重载寄存器的值
    CCR2B &= ~INV6_ON;                               //中:禁止Capture0反向功能
    CCR2B |= CAPCH6EN;                               //中:使能PWM通道6捕捉功能
    CAPENRB |= CAPCH6_ON;                            //中:使能Capture0通道输入有效
                                    
    PIERB |= PWMIE6;                                 //中:使能PWM通道6中断
    CCR2B |= CFL_IE6;                                //中:使能Capture6下降沿锁定中断
    CCR2B |= CRL_IE6;                                //中:使能Capture6上升沿锁定中断
    NVIC_ISER = PWMB_INT;                            //中:使能NVIC PWM4~7中断


    PCRB |= CH6EN ;                         //中:使能PWM6下数计数器开始计数

}

void PWMB_IRQHandler(void)            
{   
    u32status = CCR2B;                               //中:获取Capture通道6控制寄存器的值
    uiLow_Pulse = CNR2B - CRLR2B;                    //中:计算低脉冲宽度
    uiHigh_Pulse = CNR2B - CFLR2B;                   //中:计算高脉冲宽度
     
    if (u32status & CRLRI6)                          //中:如果Capture6捕获到一个下降沿,表示一个完整的PWM周期捕获完成
    u32DutyCycle = (uiLow_Pulse + uiHigh_Pulse) /1000;   //周期计算ms

/*LED中断显示*/
    FLAG24 = ~FLAG24;
   if (FLAG24)
    P2_DOUT |= 0x10;    //LED灭
    else
  P2_DOUT &= 0xEF;    //LED亮
}
 楼主| DLF5 发表于 2014-7-25 08:54 | 显示全部楼层
哪位朋友帮忙给看看好吗
骗子的片子 发表于 2014-7-25 15:32 来自手机 | 显示全部楼层
haolaishi 发表于 2014-7-24 08:54
你上程序看看,确定按照例程修改的?那么把例程烧进去结果如何

又见到你了,热心的人
骗子的片子 发表于 2014-7-25 15:33 来自手机 | 显示全部楼层
DLF5 发表于 2014-7-24 09:57
我的目标板不支持例程!

啊,竟然不支持例程?
骗子的片子 发表于 2014-7-25 15:33 来自手机 | 显示全部楼层
DLF5 发表于 2014-7-24 10:37
void PWMB_Init(void)   
{
    P2_MFP = P2_MFP & (~P26_AD14_PWM6 ) | PWM6 ; //中:设置P2.6,功能

手机上的,回去看
骗子的片子 发表于 2014-7-25 15:34 来自手机 | 显示全部楼层
DLF5 发表于 2014-7-25 08:54
哪位朋友帮忙给看看好吗

别着急,这边大神不少,会帮你的
骗子的片子 发表于 2014-7-25 15:34 来自手机 | 显示全部楼层
先帮楼主顶一下,各位帮忙给看看
 楼主| DLF5 发表于 2014-7-25 20:11 | 显示全部楼层
谢谢片子了。

有朋友跑过例程么?PWM0能捕捉到PWM1的波形么?
 楼主| DLF5 发表于 2014-7-26 21:34 | 显示全部楼层
今天改造了一下我的板子,把直接寄存器方式的例程烧进去,似乎不工作,连PWM输出都没有,而函数的例程有PWM输出,但PWM0捕捉PWM1的数据没有办法观察,到底是否捕捉正常不知道。
 楼主| DLF5 发表于 2014-7-28 21:22 | 显示全部楼层
怎么没人接招啊!!!
zxf0168 发表于 2014-7-28 21:40 来自手机 | 显示全部楼层
pwm咋回事
zxf0168 发表于 2014-7-28 21:40 来自手机 | 显示全部楼层
DLF5 发表于 2014-7-24 09:57
我的目标板不支持例程!

官方的例程不支持?
 楼主| DLF5 发表于 2014-7-29 13:18 | 显示全部楼层
官方例程是PWM1输出方波,PWM0来捕捉。
直接寄存器方式的例程,在我改造的板上连PWM方波都没有输出,而函数方式的有方波输出,但是我无法开到是否捕捉到方波,以及捕捉到的数据。
从小木丁丁 发表于 2014-7-29 21:55 来自手机 | 显示全部楼层
DLF5 发表于 2014-7-29 13:18
官方例程是PWM1输出方波,PWM0来捕捉。
直接寄存器方式的例程,在我改造的板上连PWM方波都没有输出,而函数 ...

你不确定是否捕捉到对吧
 楼主| DLF5 发表于 2014-7-30 11:35 | 显示全部楼层
是的,跑例程无法确定是否捕捉到。
 楼主| DLF5 发表于 2014-7-30 13:45 | 显示全部楼层
奔跑的牛能否给推荐个技术支持?我可以问下新唐的技术支持。
sdnumcu 发表于 2014-7-30 23:40 来自手机 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

71

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部