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:不触发 MSP430FR2311端口2中断。

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/925410/msp430fr2311-msp430fr2311-port2-interrupt-do-not-trigger

器件型号:MSP430FR2311

您好德州仪器。

我正在使用 MSP430FR2311 LaunchPad、遇到了一个非常不寻常的问题。

端口2中断未被触发。

我编写了下面的测试程序。

我运行了该程序、并在 P2.0至 P2.7的输入端使用方波发生器对其进行了测试、每次一个并进行组合。 我发现 P2IFG 记录一直为0。

在主循环中、我放置一行将 P2IN 复制到 P1OUT、以查看是否正确检测到方波、P1显然复制了 P2。

由于我有两个 LaunchPad、我使用另一个 LaunchPad 进行了测试、以查看这是否是硬件问题、但也会发生同样的情况。


我使用的是 CCS 版本10.0.00010。 我发现另一位成员的帖子报告了类似的问题、但 CCS8:

https://e2e.ti.com/support/microcontrollers/msp430/f/166/t/692426?MSP430FR2433-Port-2-Interrupt-not-triggering-and-defaulting-to-ISR-Trap

我将 CCS 更新为版本10.1.0.00010、但问题仍然存在。

如果您能帮我、我已经在这个问题上停留了几天了。

感谢您的关注。

----------------------------------------------------------------------

#include

#include

#include

_interrupt void port2_ISR (void);

uint32_t P2_int_cnt[8]={0、0、0、0、0、 0、0、0};

void main (void){

WDTCTL = WDTPW | WDTHOLD;//停止看门狗

FRCTL0 = FRCTLPW | NWAITS_1;//系统时钟= 16MHz 时为1等待状态

_bis_SR_register (SCG0);//禁用 FLL

CSCTL3 |= SELREF_REFOCLK;//将 REFO 设置为 FLL 基准源

CSCTL0 = 0;//清除 DCO 和 MOD 寄存器

CSCTL1 &=~(DCORSEL_7);//首先清除 DCO 频率选择位

CSCTL1 |= DCORSEL_5;//设置 DCO = 16MHz

CSCTL2 = FLLD_0 + 487;//设置为 fDCOCLKDIV =(FLLN + 1)*(fFLLREFCLK/n) =(487 + 1)*(32.768kHz/1) = 16MHz

_DELAY_CYCLES (3);//等待3个周期

_BIC_SR_register (SCG0);//启用 FLL

while (CSCTL7 &(FLLUNLOCK0 | FLLUNLOCK1));// FLL 锁定

CSCTL4 = SELA_REFOCLK | SELMS_DCOCLKDIV;

PM5CTL0 &=~LOCKLPM5;

P1DIR = 0xFF;// P1所有引脚输出

P1SEL0 = 0x00;// P1所有引脚 GPIO

P1SEL1 = 0x00;

P1OUT = 0x00;

P1REN = 0x00;

P2DIR = 0x00;// P2所有引脚输入

P2SEL0 = 0x00;// P2所有引脚 GPIO

P2SEL1 = 0x00;

P2OUT = 0x00;

P2REN = 0x00;

P2IES = 0x00;// P2所有引脚上升沿中断

P2IFG = 0;//清除所有 P2中断标志

P2IE = 0x00;

P2IE |= BIT0;//启用 P2.0中断

// P2IE |= BIT1;//启用 P2.1中断

// P2IE |= BIT2;//启用 P2.2中断

// P2IE |= BIT3;//启用 P2.3中断

// P2IE |= BIT4;//启用 P2.4中断

// P2IE |= BIT5;//启用 P2.5中断

// P2IE |= BIT6;//启用 P2.6中断

// P2IE |= BIT7;//启用 P2.7中断

_bis_SR_register (GIE);//常规中断使能

while (true){

P1OUT = P2IN;//将 P2输入复制到 P1输出

#pragma vector = port2_vector
_interrupt void port2_ISR (void){

switch (__evo_in_range (P2IV、P2IV_P2IFG7)){

案例 P2IV__NONE:

中断;

案例 P2IV_P2IFG0:

P2_INT_cnt[0]++;

中断;

案例 P2IV_P2IFG1:

P2_INT_cnt[1]++;

中断;

案例 P2IV_P2IFG2:

P2_INT_cnt[2]++;

中断;

案例 P2IV_P2IFG3:

P2_INT_cnt[3]++;

中断;

案例 P2IV_P2IFG4:

P2_INT_cnt[4]++;

中断;

案例 P2IV_P2IFG5:

P2_INT_cnt[5]++;

中断;

案件 P2IV_P2IFG6:

P2_INT_cnt[6]++;

中断;

案件 P2IV_P2IFG7:

P2_INT_cnt[7]++;

中断;

默认值:

中断;

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

    我将此代码放在我的 Launchpad 上、移除 P2.0 (LED)跳线、然后将该引脚接地、再接至3V3、并在 ISR 的第一行达到断点。 我多次成功。

    你怎么能知道 ISR 没有被调用-- ISR 中的一个断点,或者你是不是以某种方式观察 IFG 的? 如果暂停调试器、您在执行什么操作?

    请记住、FR2311只能在 P2.0/1/6/7 [参考数据表(SLASE58E)第6.11.3]节上中断。 已将 P2.0 (如注释所示)跳线至 LED。 P2.1似乎未受任何影响、因此我不知道您为什么会遇到这种问题。

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

    非常感谢 Bruce 的回答。

    我发送的代码、我只是为了调试而编写的代码、在我的项目中、我使用的是完全不支持您提到的中断的引脚 P2.2、P2.3、P2.4和 P2.5。
    我对其他引脚进行了测试、并验证了中断是否正常工作。
    很抱歉、我发现感兴趣的 PIN 没有产生中断、我认为我对其他 PIN 的测试很粗心。


    非常感谢 Bruce。