本帖最后由 yinshiyouquan 于 2015-12-3 01:17 编辑
近日弄了一个小东西,功能要求是把P11和P12设置为外部中断,中断唤醒之后解除低功耗模式,如果是P11中断唤醒则把P11改为输出模式,同时输出持续5
s高电平,最后重新转入睡眠状态;同理如果是P12被唤醒同样处理
现在出现的问题是:假如P11被唤醒,我改变P11由输入变为输出,同时输出高电平,在高电平期间,P12发生中断事件,此时系统立马奔溃无法挽救,我用led测试发现P12中断发生时候,根本没进入中断服务函数,直接就停在那了,所以个人认为是死机了,那么有谁可以告诉我是怎么回事,有没什么解决建议
附上io输入和输出配置函数:
/*************************************
函数名称:Config_IOIN_Mode
功 能:io口配置为输入模式,并根据 IS_OpenInt判断是否开启中断
参 数:IO_Pin,IS_OpenInt
返回值 :无
*************************************/
void Config_IOIN_Mode(char IO_Pin,char IS_OpenInt)
{
P1DIR &= ~IO_Pin; //设置IO-Pin为输入模式
P1REN |= IO_Pin; //使能上下拉电阻
P1OUT &= ~IO_Pin; //配置为下拉电阻
if(IS_OpenInt == ENABLE)
{
P1IE |= IO_Pin; //使能IO_Pin外部中断
P1IES &= ~IO_Pin; //中断触发方式:上升沿
P1IFG &= ~IO_Pin; //清除中断标志
}
}
/*************************************
函数名称:Config_IOIN_Mode
功 能:io口配置为输入模式
参 数:IO_Pin
返回值 :无
*************************************/
void Config_IOOut_Mode(char IO_Pin)
{
P1DIR |= IO_Pin; //设置IO-Pin为输出模式
P1REN &= ~IO_Pin; //关闭上下拉电阻使能
P1IE &= ~IO_Pin; //关闭中断
P1OUT &= ~IO_Pin; //默认输出低电平
}
|