大家好、
客户正在尝试从 MSP430FR2433创建一个单线制从器件。 在 此处找到该指南。
他们使用本教程中的代码、其中对所有内容都进行了完美描述、并帮助他们了解单线的工作原理。 但在使用计时器 A0时遇到问题、它不会遇到中断、并且永远无法进入中断。
这是计时器初始化代码
// TA1将处理早期复位逻辑
TA1CCTL0 = CCIE;// TACCR1中断被启用
TA1CTL = tassel_SMCLK | MC_STOP;// SMCLK、现在停止
// TA0对通信线路上的脉冲长度进行计数
// TA0对通信线路上的脉冲长度进行计数
TA0CCTL1 = CM_3 | CCIS_0 | SCS | CAP | CCIE;
//捕获上升/下降沿,
//使用 CCI1A = P1.7/TA0.1、
//同步捕捉,
//启用捕获模式,
//启用捕捉中断
TA0CCTL1 &=~ COV;//复位捕捉溢出
TA0CTL = tassel_SMCLK | MC__Continous;// SMCLK、连续模式
TA0CTL |= TACLR;//复位计数器
主函数代码
TA1CTL |= MC__UP | TACLR;//计时器 A1递增模式、复位计数器
TA1CCR0 = 16000;//为暂停值加载计时器
timerOverflow = 0;//重置计时器溢出
_bis_SR_register (LPM0_bits | GIE);
TA1CTL &=~ MC__UP;//停止计时器 A1
如果(timerOverflow)//如果发生计时器溢出、则下一个脉冲应为复位
{
TA0CTL &=~ MC__Continous;//停止 TA0、它使用 SMCLK
P1SEL0 = 0x00;//将 P1.7选择更改为 GPIO
P1IFG = 0x00;//复位 P1中断标志
P1IE = BIT7;// P1.7中断使能
_bis_SR_register (LPM4_bits | GIE);//安全进入更高效的 LPM 以节省功耗
P1SEL0 = BIT7;// TA0.CCI1A 外设选择
P1IE = 0x00;//禁用 P1.7中断
TA0CTL |= MC__Continous | TACLR;//重置计时器计数器
_bis_SR_register (LPM0_bits | GIE);
}
中断处理程序代码
/********* *********
// Timer0_A3 CC1-2,TA 中断处理程序
//测量主设备将单线保持低电平的时间长度
/********* *********
#if defined (_ TI_Compiler_version_)|| defined (_ IAR_systems_icc_)
#pragma vector = TIMER0_A1_vector
_interrupt void Timer0_A1_ISR (void)
#Elif defed (__ GNU_)
void __attribute__((中断(TIMER0_A1_vector)) Timer0_A1_ISR (void)
其他
错误编译器不受支持!
#endif
{
switch (__evo_in_range (TA0IV、TA0IV_TAIFG)){
/* switch (TA0IV){*/
案例 TA0IV_NONE:
中断;//无中断
案例 TA0IV_TACCR1:
如果(! firstinterrupt)//如果没有第一个中断标志,则需要执行操作
{
timerValue = TA0CCR1;//记录脉冲长度
_BIC_SR_REGISTER_ON_EXIT (LPM4_BITS);//退出 LPM (0-4)以处理脉冲
firstInterrupt = 1;
}
否则 firstInterrupt = 0;//在第一个中断后复位标志
TA0CTL |= TACLR;//复位定时器计数器
countInterrupts ++;
中断;
案例 TA0IV_TACCR2:
中断;
案例 TA0IV_TAIFG:
中断;
默认值:
中断;
}
}
请告诉我如何与客户解决此问题。
谢谢、
Jonathan