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.

[参考译文] CCS/MSP430FR2000:无法在 P1.6上获取中断

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/726373/ccs-msp430fr2000-unable-to-take-interrupt-at-p1-6

器件型号:MSP430FR2000
主题中讨论的其他器件:MSP430FR2100

工具/软件:Code Composer Studio

您好!

我的代码在 P1.3上使 P1.6导通并由低边沿到高边沿关闭、并打开 RTC 1秒、然后切换回 P1.6、等待 P1.3上的中断。 这就重复了。

#include 

/*全局变量*/
#if defined (__IAR_systems_icc__)
__persistent volatile unsigned char timeIncrement = 0;//软件计数变量
#Elif defined (__TI_Compiler_version__)

#endif

#define MODCOUNT (32-1)

int main (void)
{
WDTCTL = WDTPW | WDTHOLD;

P1OUT = 0x00;
P1DIR =~BIT3;

P2OUT = 0x00;
P2DIR = 0xFF;

P2SEL1 = BIT6 | BIT7; // P2.6~P2.7:晶振引脚
SYSCFG0 = FRWPPW; //启用 FRAM 写入访问

P1OUT ^= BIT6;


PM5CTL0 &=~LOCKLPM5;

//初始化晶振
操作
{
CSCTL7 = 0; //清除 XT1故障标志
SFRIFG1 = 0; //清除故障标志
} while (SFRIFG1和 OFIFG);//测试振荡器故障标志


P1REN = BIT3;
P1IES = 0x00;
P1IE = BIT3;
CSCTL4 = SELA_XT1CLK;

_bis_SR_register (LPM3_bits | GIE); //输入 LPM3、启用中断
}

#pragma vector=RTC_vector
__interrupt void RTC_ISR (void)
{
开关(__evo_in_range (RTCIV、RTCIV__RTCIFG))
{
案例 RTCIV_none:中断; //无中断
案例 RTCIV_RTCIFG: // RTC 溢出

P1OUT ^= BIT6;
RTCCTL = RTCSS_XT1CLK | RTCSR | RTCPS__1024;//停止 RTC
P1REN = BIT3; // P1.3下拉寄存器使能
P1IES = 0x00; // P1.3低边沿/高边沿
P1IE = BIT3; // P1.3中断被启用
_bis_SR_register_ON_EXIT (LPM3_BITS | GIE);

中断;
默认值:break;
}
}

#pragma vector=Port1_vector
__interrupt void Port_1 (void)
{
P1OUT ^= BIT6;
P1IE = 0x00;
P1IFG = 0x00; //清除 P1.3 IFG

RTCMOD = MODCOUNT;

RTCCTL = RTCSS_XT1CLK | RTCSR | RTCPS__1024 | RTCIE;

_bis_SR_register_ON_EXIT (LPM3_BITS | GIE);

}

如果我反转 P1.3和 P1.6的工作方式、即等待 P1.6中的中断、ISR 将不会用于 P1.6。 为什么会发生这种情况、因为它应该对两者都起相同的作用。 我是否遗漏了什么

#include 

/*全局变量*/
#if defined (__IAR_systems_icc__)
__persistent volatile unsigned char timeIncrement = 0;//软件计数变量
#Elif defined (__TI_Compiler_version__)

#endif

#define MODCOUNT (32-1)

int main (void)
{
WDTCTL = WDTPW | WDTHOLD;

P1OUT = 0x00;
P1DIR =~BIT6;

P2OUT = 0x00;
P2DIR = 0xFF;

P2SEL1 = BIT6 | BIT7; // P2.6~P2.7:晶振引脚
SYSCFG0 = FRWPPW; //启用 FRAM 写入访问

P1OUT ^= BIT3;


PM5CTL0 &=~LOCKLPM5;

//初始化晶振
操作
{
CSCTL7 = 0; //清除 XT1故障标志
SFRIFG1 = 0; //清除故障标志
} while (SFRIFG1和 OFIFG);//测试振荡器故障标志


P1REN = BIT6;
P1IES = 0x00;
P1IE = BIT6;
CSCTL4 = SELA_XT1CLK;

_bis_SR_register (LPM3_bits | GIE); //输入 LPM3、启用中断
}

#pragma vector=RTC_vector
__interrupt void RTC_ISR (void)
{
开关(__evo_in_range (RTCIV、RTCIV__RTCIFG))
{
案例 RTCIV_none:中断; //无中断
案例 RTCIV_RTCIFG: // RTC 溢出

P1OUT ^= BIT3;
RTCCTL = RTCSS_XT1CLK | RTCSR | RTCPS__1024;//停止 RTC
P1REN = BIT6; // P1.3下拉寄存器使能
P1IES = 0x00; // P1.3低边沿/高边沿
P1IE = BIT6; // P1.3中断被启用
_bis_SR_register_ON_EXIT (LPM3_BITS | GIE);

中断;
默认值:break;
}
}

#pragma vector=Port1_vector
__interrupt void Port_1 (void)
{
P1OUT ^= BIT3;
P1IE = 0x00;
P1IFG = 0x00; //清除 P1.3 IFG

RTCMOD = MODCOUNT;

RTCCTL = RTCSS_XT1CLK | RTCSR | RTCPS__1024 | RTCIE;

_bis_SR_register_ON_EXIT (LPM3_BITS | GIE);

}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    P1.3/P1.6的附加功能是什么? 我无法对您的测试设置进行测试。

    我看到潜在的回弹问题:一般而言、您应该(习惯)在设置 IE 之前清除 IFG。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    第一种情况 P1.6具有 LED、P1.3获得从低边沿到高边沿。 在第二种情况下、P1.3具有 LED、P1.6获得低边沿到高边沿。 在这两种情况下代码是相同的(只是互换了 P1.6和 P1.3)、但仅在第一种情况下工作。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我将这两个示例都放在 FR2311 Launchpad 上(反转跳线),它们都按预期运行--当我将触发引脚接地时,我看到 LED 指示灯熄灭了一段时间,然后又回来了。 我没有 FR2000。

    我必须为 RTC 使用 VLOCLK、因为我没有安装晶体。 我确实看到了一些反弹效应(幻象 LED 闪烁)、但它们已经被整理好了、当我在设置 P1IE 之前添加了清除 P1IFG 时、它们完全消失了。

    您使用的平台是什么? 如果这是 Launchpad、我会问您的 UCA0TXD/RXD 跳线是否仍然连接。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     您好!

    谢谢你。 我跟在你。 我对 FR2433 Launchpad 使用了相同的代码。 它工作得非常好。 我有一个定制的评估板。  MSP430FR2100也是如此。 我还将检查其他引脚。

    此致、

    Prudhvi Sagar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我还检查了端口1的其他引脚。 中断在 P1.0、1.1、1.2、1.3上工作。 我认为它与数据表中给出的"C"相关。

    此致、
    Prudhvi Sagar
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我不确定你的意思。 您是否参考了数据表的修订版 C? (变化似乎无害。) 还是比较器 CX 引脚功能?

    我本来要指责(4线制) JTAG、但在书籍中没有找到任何证据。 (我仍然在盲区工作。)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。


    您好!

    是指这些。 我不确定。

    此致、

    Prudhvi Sagar

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

    嗯。 数据表(SLASE78c)第6.11.3节中的"边沿可选中断、[...] 适用于 P1.0至 P1.3、P2.0、P2.1、P2.6和 P2.7。" 它在第1.1和1.4节中提出了类似的建议、但在这里枚举了这些建议。

    似乎他们可能会对此有点大声。

    [编辑:点击 Post too fast。]