【NUC120】捕捉输入中断问题

direrwind |浏览1925次
收藏|2015/05/06 15:43

需要实现
PA12 捕捉输入
PA13 设定1KHz方波 Duty50% 输出
然后把PA12跟PA13接在一起测量1KHz方波
数据得到  CRLR0=0x31
                CFLR0=0x63
发觉PWMA->CCR0.CAPIF0=1; 设置为1的时候,PWM CNR应该要重新计时
但没有重新计数,因为CRLR0=0x31和CFLR0=0x63这两个数据没有一致


#include "NUC1xx.h"                                                     

void Initsystem(void);

void PwmInit(void);

int a,b;

main(void)

{

Initsystem();

PwmInit();

PWMA->CCR0.CAPIF0=1;

while(1)

{

while(!PWMA->CCR0.CAPIF0);

PWMA->CCR0.CAPIF0=1;

if(PWMA->CCR0.CFLRI0)//Calculate High Level

{

PWMA->CCR0.CFLRI0=0;

b=PWMA->CFLR0;

}

if(PWMA->CCR0.CRLRI0)//Calculate Low Level

{

PWMA->CCR0.CRLRI0=0;

a=PWMA->CRLR0;

}

while(!PWMA->CCR0.CAPIF0);

PWMA->CCR0.CAPIF0=1;

if(PWMA->CCR0.CFLRI0)//Calculate High Level

{

PWMA->CCR0.CFLRI0=0;

b=PWMA->CFLR0;

}

if(PWMA->CCR0.CRLRI0)//Calculate Low Level

{

PWMA->CCR0.CRLRI0=0;

a=PWMA->CRLR0;

}

while(!PWMA->CCR0.CAPIF0);

PWMA->CCR0.CAPIF0=1;

if(PWMA->CCR0.CFLRI0)//Calculate High Level

{

PWMA->CCR0.CFLRI0=0;

b=PWMA->CFLR0;

}

if(PWMA->CCR0.CRLRI0)//Calculate Low Level

{

PWMA->CCR0.CRLRI0=0;

a=PWMA->CRLR0;

}

}

}


void Initsystem()

{

   UNLOCKREG();

   SYSCLK->PWRCON.XTL12M_EN = 1;

   SYSCLK->CLKSEL0.HCLK_S = 0;

   LOCKREG();

}


void PwmInit(void)

{

SYSCLK->CLKSEL1.PWM01_S=0;  //00=external, 01=32.768k, 10=HCLK, 11=22.1184M

SYSCLK->APBCLK.PWM01_EN=1; //Enable PWM clock

GPIOA->PMD.PMD12=0;               // 設定PA.12 為輸入模式

PWMA->PCR.CH0MOD = 1;         

PWMA->CSR.CSR0=4;         

PWMA->PPR.CP01=119;          

PWMA->CCR0.CAPCH0EN=1;        // 致能

PWMA->CCR0.CRL_IE0=1;           // 致能正緣

PWMA->CCR0.CFL_IE0=1;            // 致能負緣

PWMA->CNR0=99;                        // 設定PWM週期

PWMA->CAPENR=1;                     // 致能PWM捕捉輸入模式

SYS->GPAMFP.PWM0_AD13=1;   // 設定PA.12 為PWM功能

PWMA->PCR.CH0EN=1;               // PWM start


PWMA->PCR.CH1MOD = 1;

PWMA->CSR.CSR1=4;

PWMA->CNR1=99;

PWMA->CMR1=49;                  

SYS->GPAMFP.PWM1_AD14=1;

PWMA->PCR.CH1EN=1; 

PWMA->POE.PWM1=1; 

}


满意回答

2022/09/06 18:04

请做如下检查,作为捕获的PWM要设置为周期模式,初值应设置大一点,以防止数到0了还没有捕捉到跳边沿的情况,不行的话可以到我们官网下载最新的BSP,里面有capture的例程

chenwenbin

其他回答(0)
0人关注该问题
+1
 加载中...