请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:MSP430FR5739 您好,
我尝试让定时器A在捕获模式下工作:
#include <MSP40.0.h>
#include <stdint.h>/**
* main.c
*/
UINT32_t count_rotate =0;
uint16_t count_time =0;
int main(void){
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
CSCTL0_H = 0xA5; //解锁时钟门
CSCTL1 |= DCORSEL + DCOFSEL0 + DCOFSEL1;// 24 MHz上的DCO,用于MSP DCORSEL =1,DCOFSEL =11
CSCTL2 =拉美经济体系0 + SESS_0 + SELM_3; // ACLK (Periph)-> XT1CLK / SMCLK (Periph)-> XT1CLK / MCLK -> DCOCLK
CSCTL3 = DIVA_0 + DIVS_0 + DIVM_0; // Div = 0 ->全速
CSCTL4 |= XT1DRIVE_0; //启用低功率
CSCTL4 &=~Ω XT1OFF; // XT1启用
P1DIR &=~BIT0;
P1SEL0 |= BIT0;//在1.2 上启用CCI1A
P1SEL1 &=~BIT0;
P3DIR = BIT4;//启用LED
P3OUT ^= BIT4;
TA0CCTL1 = CM_1 + CCIS_0 + SCS + CAP + CCIE; //在上升边缘捕获+捕获模式+捕获中断+ CCI1A +同步
TA0EX0 = TAIDEX_3;//除以4 ->获取1024
TA0CTL = tassel_1 + MC_2 + ID_8; // ACLK (32kHz),连续模式-> 3.2768万 / 8 -> 4096
//TA0CTL |= TALCLR;//重置计时器
(;;)
{
}
返回0;
}
#pragma矢量= TIMER0_A0_Vector
__interrupt void Timer0_A0_ISR(void)
{
开关(__偶 数_in_range(TA0IV, 0x0E))//检查选择了哪个中断
{
案例2:{//CCR1
P3OUT ^= BIT4;
count_rotate++;
COUNT_TIME = TA0CCR1;
}
}
}
当我在Debug中观察寄存器时,计数器在TA0R中正在计数,但当上升边缘到来时,它不会将值复制到TA0CCR1。
另外,TA0CCTL1的CCI与1.0 的独处酒店始终保持在'1'。
有人看到错误?
祝你好
Eric