This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430FR2433:MSP430FR2433单线从定时器 A0不触发 ISR

Guru**** 2534600 points
Other Parts Discussed in Thread: MSP430FR2433

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/976282/msp430fr2433-msp430fr2433-1-wire-slave-timer-a0-not-triggering-isr

器件型号:MSP430FR2433

大家好、

客户正在尝试从 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

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    >P1SEL0 = BIT7;// TA0.CCI1A 外设选择

    在 FR2433上、TA0.1 (TA0.CCI1A)位于 P1.1上。 非 P1.7 [参考数据表(SLASE59D)表6-17]。 您还需要设置 P1SEL.1=10b、而不是01b。 尝试:

    根据 SLASE59D 表6-17、> P1SEL1 |= BIT1;// P1.1作为 TA0.CCI1A 外设选择

    此外、由于它是同一个物理引脚、

    >P1IE = BIT7;// P1.7中断使能

    应该是

    >P1IE |= BIT1;// P1.1中断使能