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.

[参考译文] MSP430FR2311:不要通过提供输入逻辑高电平来进入中断

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1371517/msp430fr2311-do-not-enter-interrupt-by-giving-an-input-logic-high

器件型号:MSP430FR2311

工具与软件:

我将使用 FR2311来驱动超声波传感器、传感器的输出将加载到端口2.1中。 可以使用示波器捕获输入脉冲。 正在 CCS 中调试。

但我无法进入中断、并且我已经多次检查了配置。 下面是代码:

 
#include
unsigned int capture_up = 0;
unsigned int capture_down = 0;
char capture_number = 0;
char state = 0x00;
unsigned long distance_in_CM = 0;


void Ultrasonic_trig (){
P2OUT |= BIT0;
__delay_cycles (8);// Delay (延迟)以生成脉冲
P2OUT 且=~BIT0;
}


int main (void)

WDTCTL = WDTPW | WDTHOLD;//停止 WDT
P2OUT 且=~BIT0;// P2.0无启动输出
P2DIR |= BIT0;// P2.0输出
P2SEL0 |= BIT1;// P2.1选项选择、

PM5CTL0 &=~μ H LOCKLPM5;

TB1CTL = TBSSEL__SMCLK | ID_0 | MC_2 | TBCLR | TBIE;
TB1CCTL1 = CM_1 | CCIS_1 | SCS | CAP | CCIE;

___ bis_SR_register (GIE);

while (1){
ultrig();
__delay_cycles (80000);//延迟  
}
}

#if defined (__TI_Compiler_version__)|| defined (__IAR_SYSTEMS_ICC__)
#pragma vector = Timer1_B1_vector
__interrupt void Timer1_B1_ISR (void)
#elif defined (_GNUC__)
void __attribute__(((interrupt (Timer1_B1_vector))) Timer1_B1_ISR (void)
#else
错误编译器不受支持!
#endif

开关(__EVEN_IN_RANGE (TB1IV、TB1IV_TBIFG))

情形0:break;//无中断
案例2:
状态= TB1CCTL1 >> 14;
TB1CCTL1并且=~CCIFG;//清除标志
if (TB1CCTL1 & CM_1){//开始在上升沿捕捉高电压
CAPTURE_UP = TB1CCR1;
TB1CCTL1 &=~CM_1;
TB1CCTL1 |= CM_2;
如果(TB1CCTL1 & CM_2){、则另选  
CAPTURE_DOWN = TB1CCR1;
Distance_in_CM =(CAPTURE_DOWN - CAPTURE_UP)* 0.34/2;  
TB1CCTL1 &=~CM_2;
TB1CCTL1 |= CM_1;
其他
break;//未使用 CCR1
案例4:断路;//未使用 CCR2
案例6:break;//保留
案例8:break;//保留
案例10:中断;//保留
案例12:中断;//保留
案例14:
TB1CTL &=~μ H TBIFG;
if (capture_down < capture_up){
CAPTURE_NUMBER ++;
}
break;//溢出
默认值:中断;
}
}

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

    TB1CCTL1 = CM_1 | CCIS_1 | SCS | CAP | CCIE;

    CCIS=1这里请求 TB1.CCI1B、但 P2.1是 TB1.CCI1A、所以您希望 CCIS=0。 请尝试改用:

    >  TB1CCTL1 = CM_1 | CCIS_0 | SCS | CAP | CCIE;

    [参考数据表(SLASE58E)表6-44、用户指南(SLAU445I)表14-8]

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

    谢谢、我更改了配置、但问题仍然存在。 这是在 while 循环中运行到"__delay_cycles (80000);// delay"行后的寄存器值。

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

    阅读 Re 的数据表(SLASE58E)表6.44 (喝点咖啡后):P2.1实际上是 TB1.CCI2A (也称为 TB1.2):

    因此、您应该使用 TB1CCTL2 (CCIS=0)。

    我注意到 TB1.CCI1A 是 P2.0、因此更简单的更改(无需键入)是反向使用 P2.0/1、因此 P2.0是返回路径。

    [编辑:如果您使用的是 Launchpad、请不要忘记移除将 P2.0连接到 LED2的 J11跳线。]

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

    非常感谢、我想现在可以进入中断、我 之前使用了 TB1CCTL2、但配置不正确。