nuvoton99 发表于 2012-2-8 16:27:01

M054LAN脉宽捕捉问题请教!

最近用M054LAN芯片作一板子,主体功能均编写结束!

测试中发现有一问题,在采用PWMB组对外部LC振荡信号进行捕捉脉冲宽度时,设计要求是检测单个周期长度并由PWM A组输出捕捉到的同频信号.结果发现输入二个信号周期才输出一个周期!用DEBUG在线调试,检测发现PWM B组的捕捉所得数值经计算为输入信号二个周期的长度,可证实为输入信号捕捉出错了,为查清原因,测量了波形图,输入信号没有问题.可确定为软件问题,在PWM的B组捕捉上出问题了!经查程序未能找出问题所在!
请诸位大侠帮忙介绍一下, 有哪些原因会引起PWM 脉宽 捕捉错误!
下附波形图和程序的PWM配置部分!
下载 (45.47 KB)

2012-1-12 21:57
CH1为捕捉输入信号
CH2为同步的输出信号
以下附PWM配置部分的程序:
void PWM_CAP_Init(void)      
{            
    P2_MFP = P2_MFP & (~(P25_AD13_PWM5 )) | PWM5 ;//配置P2.5PWM   
    IPRSTC2 |= PWM47_RST;         //复位PWM模块   
    IPRSTC2 &= ~PWM47_RST;      //PWM模块从复位状态恢复到正常工作状态   
P2_PMD &= ~Px5_PMD;
P2_PMD |= Px5_QB;
    APBCLK |= PWM45_CLKEN;                   //使能PWM45和PWM67时钟   
    CLKSEL2 = CLKSEL1 & (~(PWM45_CLK));
CLKSEL2 |= PWM45_HCLK;               //选择HCLK作为PWM45
PPRB |= 0x00000101;//Select PWM4,5 and pWM6,7 PWM预分频器(1,不分频,2个时钟分频器共用一个16位)
    CSRB |= (CSR1_CLK_1); //分频系数(不分频,同频模式下,组只定义偶数的时钟)
PCRB |= CH1_AU_RL;             //自动重装最大计数值
CNR1B = 65535;//最大计数值脉宽等于 65535+1-触发锁存值()上升沿或下降沿
CCR0B |= CFL_IE1;            //捕捉中断使能,CFL_IF1为下降沿
// CCR0B |= CRL_IE1;            //CRL_IE1为上升沿
//CCR0B |= INV1_ON;            //输入取反打开
CAPENRB |= CAPCH1_ON;         //Enable Capture1 channel input valid
    PIERB |=PWMIE1;                //PWM5中断使能                        
    NVIC_ISER |= PWMB_INT;      //使能NVIC PWM_INT中断   
    CCR0B |= CAPCH1EN;            // PWM B组通道1脉宽计数使能
    POEB &= ~(PWM5_OE);                                    //PWM5关闭输出   
    PCRB |= (CH5EN);   // 使能CAPENR定时器使能比特,应用时打开
}

void PWMB_IRQHandler(void)   //PWM中断,检测周期 ,脉宽捕捉
{
volatile   static uint16_t uiLow_Pulse, uiHigh_Pulse;
volatile uint32_t u32status;
    PIIRB &= PIIRB;//PWMIF5 | PWMIF4;
u32status = CCR0B;
    CCR0B |= CAPIF1;                      //Capture1 flag clearing by writing "1"
/* if(u32status & CRLRI1)
   {                           
    uiLow_Pulse = CNR1B - CRLR1B;         //CRLR1 上升沿锁存寄存器
    CCR0B |= CRLRI1;
   }         // */
    if(u32status & CFLRI1)
   {                           
       TCAP1 = CNR1B - CFLR1B;               //CFLR1 下降沿锁存寄存器
    CCR0B |= CFLRI1;
   }
}
页: [1]
查看完整版本: M054LAN脉宽捕捉问题请教!