请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:RF430FRL152H 工具/软件:Code Composer Studio
Hallo 所有人、
我的目标是通过 RF430frl152h 微控制器读取/检测外部源的频率。
我找到了一个使用计时器(捕获比较)来确定 外部信号周期的值的代码。
遗憾 的是、它不起作用(周期的值始终为0、它似乎计时器不起作用。。我选中了、并且始终处于"默认情况"。) 我不明白我是否在配置上犯了一些错误、或者在其他地方发生了一些错误。
如果有人知道如何解决问题或有其他选择、请告诉我。
此致。
朱利亚诺
// RF430frl152h // -------- // /|\| | // || | // -|RST | // | | // | P1.0/TA0.1|<- CCI1A <-(通过捕捉比较定时器测量的外部频率源) // | | // | | // | | #include #include unsigned int Count; unsigned int REdge1、REdge2; unsigned int period; int main (void) { WDTCTL = WDTPW + WDTHOLD; //停止看门狗计时器 //配置端口引脚 P1DIR &=~BIT0; // P1.0/TA0.1输入捕捉 P1SEL0 |= BIT0; // TA0.1选项选择 P1SEL1 |= BIT0; // TA0.1选项选择 //将 TA0CCR1配置为执行输入捕捉 TA0CCTL1 = CAP + CM_1 + CCIE + SCS + CCIS_0; // TA0CCR1捕捉模式;CCI1A;两者 //上升沿和下降沿;中断使能 TA0CTL |= tassel_2 + MC_2 + TACLR + TAIE; // SMCLK、控制模式;启动定时器 //变量初始化 计数= 0; while (1) { _bis_SR_register (LPM0_bits + GIE);//输入 LPM0 __no_operation(); //用于调试器 //退出 LPM0 IF (TA0CCTL1和 COV) //检查捕捉溢出 while (1); //永久循环 周期= REdge2 - REdge1; //计算周期 } } // TA0_A1中断矢量 #pragma vector = TIMER0_A1_vector __interrupt void TIMER0_A1_ISR (void){ switch (__even_in_range (TA0IV、0x0A)) }{ 案例 TA0IV_TACCR1: //向量2:TACCR1 CCIFG IF (TA0CCTL1和 CCI){ //捕捉输入引脚状态 如果(!Count){ //捕获上升沿 REdge1 = TA0CCR1; count++; } 否则{ REdge2 = TA0CCR1; 计数= 0; __BIC_SR_REGISTER_ON_EXIT (LPM0_Bits + GIE);//返回 main 时退出 LPM0 } } 否则{} 中断; 案例 TA0IV_TACCR2:break; //向量4:TACCR2 CCIFG 默认值:中断; } }