请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:MSP430FR2311 工具/软件:Code Composer Studio
我知道GPIO中断在LPM3中工作,并且已经对其进行了测试。 但是,有没有办法使用3.5 中的GPIO中断?
#include <MSP430-h>
#include <stdio.h>
#include
<stdint.h>
#include "./inc/rtc.h"
#include "../inc/clock.h"
void initGpio();
int main (void)
{
WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器
// setup_vloclk();//将VLO设置为主时钟
setup_xt1clk();//将XT1设置为主时钟
initGpio();
//首先确定是从LPMx.5还是定期重置。
如果(SYSRSTIV == SYSRSTIV_LPM5WU) //当从3.5 唤醒时,重新连接
{//
如果3.5 从3.5 唤醒,重新初始化,然后再次返回L。
//从备份RAM内存中恢复P1OUT值,在LPMx.5后保持P1OUT重置
P1OUT =*(unsigned int *) BKMEM_BASE;//如果未完成此步骤,LED将始终处于打开状态
__enable_interrupt (); // RTC中断应立即触发...
}
否则
{
//配置备份内存
*(unsigned int *) BKMEM_BASE = 0;
//设备从冷启动启动启动。
//它配置设备并将设备放入4.5 L和平
1DIR &=~BIT4; //将WFP 1.4 配置为输入方向引脚
P1OUT |= BIT4; //将WFP 1.4 配置为P1REN
|= BIT4; // WFP 1.4 上拉寄存器启用
P1IES |= BIT4; // WFP 1.4 Hi-/ Low edge
P1IFG = 0; //清除所有P1中断标志
P1IE |= BIT4; //已启用WFP 1.4 中断
//配置所需的GPIO
P1OUT &=~BIT1; //清除WFP 1.1 输出锁存
器P1DIR || BIT1; //对于LED
// rtcinit (RTC_VLO,10,RTC_1000);//将VLO设置为时钟源,10设置为初始值,1000设置为预校准
器rtcinit(RTC_XT1,32*20,RTC_1024); //将XT1设置为时钟源,640 (20秒)设置为初始值,1024设置为预校准
器//在输入3.5
*(unsigned int *) BKEM_BASE = P1OUT;
}//
在3.5 启用中断的情况下进入L1MOUT模式之前,将P1OUT值存储在备份内存寄存器中。 请注意,此操作不
返回//。 3.5 会通过重置事件退出,从而
导致//重新启动代码。
PMMCTL0_H = PMMPW_H; //用于写入
PMMCTL0_L的开放式PMM寄存器|| PMMREGOFF; //并设置PMMREGOFF
__bis_sr_register(LPM3_bits | GIE);
//__no_operation();
//return 0;
}
void initGpio()
{
P1DIR = 0xFF;P2DIR = 0xFF;
P1REN = 0xFF;P2REN = 0xFF;
P1OUT = 0x00;P2OUT = 0x00;
//配置所需的GPIO
P1OUT &=~BIT0; //清除WFP 1.0 输出锁存
器P1DIR || BIT0; //表示LED
//禁用GPIO开机默认高阻抗模式
//以激活先前配置的端口设置
PM5CTL0 &=~LOCKLPM5;
}//
端口1中断服务例程
#if defined(__TI_Compiler_version__)|| defined(__IAR_systems_icc__)
#pragma vector=Port1_vector
__interrupt Portvoid Port_1(void)
#Elif defined(_________)__NUC_attribute_1)
#endif
{
P1IFG &=~BIT4; //清除WFP 1.4 IFG
P1OUT ^= BIT1;//切换
//__BIC_SR_REGISTER_ON_EXIT (LPM3_bits);//退出LPM3
}
在上述代码中,如果我注释第61行和第62行(LMP3),GPIO中断工作正常。 如果取消注释这些线路(LPIO),3.5 中断将不起作用。
同时,我在做这个实验的时候测量电流。 在3.5 中,当我按住中断开关(上面代码中为WFP 1.4)时,电流消耗会达到900uA,但中断不起作用。 为什么会发生这种情况?