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.

[参考译文] MSP430FR4133:在 LPM 3.5模式下启用按钮事件需要帮助

Guru**** 2587365 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/865471/msp430fr4133-need-help-to-enable-push-button-event-in-lpm-3-5-mode

器件型号:MSP430FR4133

您好!

我能够从 Blow link 运行示例代码。 我正在使用 Launch Pad MSP‑EXP430FR4133。

http://dev.ti.com/tirex/explore/node?node=AIIst5gLtBM7DVuyhd5.8A__IOGqZri__LATEST

现在、我想通过按下按钮来打开几个 LED。 我在下面的 TI 提供的示例代码中添加了突出显示的行、但不会触发 ISR 例程。

如果我移除2条以下的线路、按钮中断开始触发、但 RTC 中断失败。

PMMCTL0_H = PMMPW_H;  
PMMCTL0_L |= PMMREGOFF;

能否在 LPM 3.5模式下运行 RTC 和端口 ISR? 请帮助我解决问题

#include

#define pos1 4 //数字 A1 - L4
#define pos2 6 //数字 A2 - L6
#define pos3 8 //数字 A3 - L8
#define pos4 10 //数字 A4 - L10
#define pos5 2 //数字 A5 - L2
#define pos6 18 //数字 A6 - L18

const char digit[10]=

0xFC、//"0"
0x60、//"1"
0xDB、//"2"
0xF3、//"3"
0x67、//"4"
0xB7、//"5"
0xBF、//"6"
0xE4、//"7"
0xFF、//"8"
0xF7 //"9"
};

volatile unsigned char * seconds =&BAKMEM0_L;//在备份 RAM 模块中存储秒
volatile unsigned char * minutes =&BAKMEM0_H;//在备份 RAM 模块中存储分钟
volatile unsigned char * hours =&BAKMEM1_L;//在备份 RAM 模块中存储小时数

void initGpio (void);
void incumentRtc (void);

int main( void )

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

//配置 GPIO
initGpio();

//初始化 XT1 32kHz 晶振
P4SEL0 |= BIT1 | BIT2;//将 XT1引脚设置为第二功能
操作

CSCTL7 &=~(XT1OFFG | DCOFFG);//清除 XT1和 DCO 故障标志
SFRIFG1 &=~OFIFG;
} while (SFRIFG1 & OFIFG);//测试振荡器故障标志

IF (SYSRSTIV = SYSRSTIV_LPM5WU)//如果 LPM3.5唤醒

__ENABLE_INTERRUPT ();// RTC 中断应立即触发...

其他

//器件从冷启动加电。
//它配置器件并将器件置于 LPM3.5中

*seconds = 0;//将初始时间设置为04:30:00
*分钟=30;
*小时=4;

//配置 RTC
RTCCTL = RTCSS_XT1CLK | RTCIE;//初始化 RTC 以使用 XT1并启用 RTC 中断
RTCMOD = 32768-1;//将 RTC 模数设置为32768以每秒触发一次中断

//配置 LCD 引脚
SYSCFG2 |= LCDPCTL;//选择 R13/R23/R33/LCDCAP0/LCDCAP1引脚

LCDPCTL0 = 0xFFFF;
LCDPCTL1 = 0x07FF;
LCDPCTL2 = 0x00F0;//选择 L0~L26 & L36~L39引脚

LCDCTL0 = LCDSSEL_0 | LCDDIV_7;// flcd 参考频率为 xtclk

//LCD 运行-模式2、内部3.08v、电荷泵256Hz
LCDVCTL = LCDCPEN | LCDSELVDD | VLCD_8 |(LCDCPFSEL0 | LCDCPFSEL1 | LCDCPFSEL2 | LCDCPFSEL3);

/*
// LCD 操作-模式3,内部3.08v,电荷泵256Hz
LCDVCTL = LCDCPEN | LCDREFEN | VLCD_8 |(LCDCPFSEL0 | LCDCPFSEL1 | LCDCPFSEL2 | LCDCPFSEL3);
*

LCDMEMCTL |= LCDCLRM;//清除 LCD 存储器

LCDCSSEL0 = 0x000F;//配置 COM 和 SEG
LCDCSSEL1 = 0x0000;// L0、L1、L2、L3:COM 引脚
LCDCSSEL2 = 0x0000;

LCDM0 = 0x21;// L0 = COM0、L1 = COM1
LCDM1 = 0x84;// L2 = COM2、L3 = COM3

LCDCTL0 |= LCD4MUX | LCDON;//打开 LCD、选择4路复用(LCD4MUX 还包括 LCDSON)

//显示时间
LCDMEM[pos1]= digit[(*hours)/10];
LCDMEM[pos2]= digit[(*hours)% 10];
LCDMEM[pos3]= digit[(*minutes)/10];
LCDMEM[pos4]= digit[(*minutes)% 10];
LCDMEM[pos5]= digit[(*seconds)/10];
LCDMEM[pos6]= digit[(*seconds)% 10];

//显示2个冒号
LCDMEM[7]= 0x04;
LCDMEM[11]= 0x04;


PMMCTL0_H = PMMPW_H;//打开 PMM 寄存器进行写入
PMMCTL0_L |= PMMREGOFF;//并设置 PMMREGOFF
_bis_SR_register (LPM3_bits | GIE);//重新进入 LPM3.5
__no_operation();//用于调试器

#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector = RTC_vector
_interrupt void RTC_ISR (void)
#Elif defined (_GNU_)
void __attribute__((interrupt (RTC_vector))) RTC_ISR (void)
其他
错误编译器不受支持!
#endif

switch (__evo_in_range (RTCIV、RTCIV_RTCIF))

案例 RTCIV_NONE:break;
案例 RTCIV_RTCIF:中断;
默认值:break;

空 initGpio (空)

//将所有 GPIO 配置为输出低电平

P1OUT = 0x00;P2OUT = 0x00;P3OUT = 0x00;P4OUT = 0x00;
P5OUT = 0x00;P6OUT = 0x00;P7OUT = 0x00;P8OUT = 0x00;

P1DIR = 0xFF;P2DIR = 0xFF;P3DIR = 0xFF;P4DIR = 0xFF;
P5DIR = 0xFF;P6DIR = 0xFF;P7DIR = 0xFF;P8DIR = 0xFF;

//禁用 GPIO 上电默认高阻抗模式
//激活先前配置的端口设置

P1OUT |= BIT7;//将 P1.3配置为上拉
P1REN |= BIT7;// P1.3上拉寄存器使能
P1IES |= BIT7;// P1.3高/低边沿
P1IE |= BIT7;// P1.3中断被启用

PM5CTL0 &=~LOCKLPM5;
P1IFG &=~BIT7;

//端口1中断服务例程
#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector=Port1_vector
_interrupt void Port_1 (void)
#Elif defined (_GNU_)
void __attribute__((interrupt (Port1_vector))) Port_1 (void)
其他
错误编译器不受支持!
#endif

P1IFG &=~BIT7;
P1OUT ^= BIT0;//清除 P1.3 IFG
_BIC_SR_REGISTER_ON_EXIT (LPM3_BITS);//退出 LPM3

 

此致、

Sundar

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

    您好、Sundaresan、

    您错过了一些将 P1.7设置为输入的代码:

    P1DIR &=~BIT7;//将 P1.7设置为输入 

    此致

    Johnson

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

     尊敬的 Johnson:

    感谢您的快速回复。 我添加了如下代码、但仍然无法正常工作。 请告诉我任何其他更改。


    空 initGpio (空)

    //将所有 GPIO 配置为输出低电平

    P1OUT = 0x00;P2OUT = 0x00;P3OUT = 0x00;P4OUT = 0x00;
    P5OUT = 0x00;P6OUT = 0x00;P7OUT = 0x00;P8OUT = 0x00;

    P2DIR = 0xFF;P3DIR = 0xFF;P4DIR = 0xFF;
    P5DIR = 0xFF;P6DIR = 0xFF;P7DIR = 0xFF;P8DIR = 0xFF;

    //禁用 GPIO 上电默认高阻抗模式
    //激活先前配置的端口设置
    P1DIR &=~BIT7;
    P1OUT |= BIT7;
    P1REN |= BIT7;
    P1IES |= BIT7;
    P1IE |= BIT7;

    PM5CTL0 &=~LOCKLPM5;
    P1IFG &=~BIT7;

    此致、

    Sundar

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

    您好!

    今天、我找到了以下链接、它看起来像类似的问题。 我将尝试并告诉您。

    https://e2e.ti.com/support/microcontrollers/msp430/f/166/t/635091?CCS-MSP430FR2311-Is-it-possible-to-use-GPIO-interrupts-in-LPM3-5-

    此致、

    Sundar