LPC23xx开发板通过同一按键实现短按复位和长按恢复出厂设置

发布者:世界因你而精彩最新更新时间:2021-08-30 来源: eefocus关键字:LPC23xx  按键实现  出厂设置 手机看文章 扫描二维码
随时随地手机看文章

最近一个基于LPC23xx的项目要通过一个按键同时实现复位和恢复出厂设置(类似于有些ADSL和路由器上用细针顶一下孔)。我是通过外部中断来实现的,分享下我的思路和方案,算是抛砖引玉吧。


【需求】


通过一个按键同时实现复位(短按)和恢复出厂设置(长按两秒)


【实现方案】


产品基于LPC23xx的开发板。(其它NXP ARM7实现方法也相似)


把按键接到LPC23xx的外部中断管脚(我这里使用EINT3即P2.13管脚),按下按键则触发中断,中断处理中发出重启系统操作。系统重启时候把P2.13设为GPIO输入,判断P2.13管脚输入电平。如果持续2秒为低电平(按键长按)则发起恢复出厂设置。设置完然后把P2.13改为外部中断3。整体流程如下图:

【关键源码】


主函数main()部分


PINSEL4 &= ~0x0C000000;  //设置P2.13为GPIO

FIO2DIRL &= ~(1<<13);    //GPIO方向为输入

        if(!(FIO2PINL & (1<<13)))  //P2.13为低电平输入,按钮仍按下

{

mS_Delay(2000);//等2秒再看

if(!(FIO2PINL & (1<<13)))  //2秒后还是按下的,可以恢复出厂设置了

{

while(!(FIO2PINL & (1<<13)))  //等待按键松开后再开始恢复出厂设置

{

}

//开始恢复出厂设置

SetFactory();  //调用恢复出厂设置函数

         }else{ //不足两秒,判断为重启操作

printf("Device has rebooted...rn");

}

    

}


///处理完复位/恢复出厂设置后

//设置P2.13为EINT3

EInt3_init();


外部中断处理部分


//初始化中断

void EInt3_init()

{

    EXTINT = 0x08;      //先清除中断3

    EXTMODE &= ~0x08;  //设置外部中断3触发模式为电平触发

        EXTPOLAR &= ~0x08; //设置电平触发极性为低电平触发中断

    VICIntEnable |= (1<<17); //向量表中使能外部中断3

    VICVectAddr17 = (unsigned long)factory_reset_irq;   //设置外部中断3的中断处理函数

    VICVectPriority17 = 4;         //设置优先级

    PINSEL4 |= 0x04000000; //Set P2.13 as INT3

}


//中断处理函数

void factory_reset_irq (void) __irq 

{


    EXTINT = 0x08;   //Clear Ext Int

    SoftReboot();              //重启

VICVectAddr = 0;  //中断处理结束,写一下VICAddress


}


重启系统

//软复位其实就是让程序从main()处重新运行,即把程序指针PC移到0地址处。

//使用函数指针实现

void SoftReboot()

{

   ((void(*)())0x0)(); //函数指针指向把地址0,然后调用它

}


关键字:LPC23xx  按键实现  出厂设置 引用地址:LPC23xx开发板通过同一按键实现短按复位和长按恢复出厂设置

上一篇:ARM芯片的定时器功能:匹配输出,捕获输入
下一篇:ARM7用户模式下禁止/使能中断的一种方法-使用软中断forKeilMDK

推荐阅读最新更新时间:2024-11-03 19:22

MSP430 DM430-A开发板学习笔记(五)IO中断方式来实现按键检测
1.按键说明 在MSP430开发板中,有四个按键连接到P1,即 2.中断流程图 中断流程图如下,在用C语言实现我们想要的功能的时候,我们可能需要使用switch、if语句对某些变量进行多次判别,这样会加长我们的代码并且不易观看,使用外部中断的好处就是: 1.可以在中断服务程序中对变量的值进行修改,从而达到随时更改变量值的目的 2.对一些变量可以进行单独控制,减少主程序代码的长度 3.中断配置 我们要开启P1口的低四位中断,使用下降沿触发中断,意思就是,我们按下按键,某个p1口由高电平状态→低电平状态,便产生了一个下降沿,从而触发了中断程序,代码如下: //*******************************
[单片机]
MSP430 DM430-A开发板学习笔记(五)IO中断方式来<font color='red'>实现</font><font color='red'>按键</font>检测
基于LIN总线的汽车方向盘按键控制器的设计与实现
 人们在选购家用轿车时,对舒适性的要求在不断提高,舒适性能已成为购车因素的一项重要指标。传统的汽车方向盘只具备控制转向和喇叭的功能,而随着汽车车身电子的发展,方向盘上正逐渐集成许多用于控制其他功能的按键,如控制收音机的按钮、控制DVD或者CD播放的按钮、手机蓝牙免提、自动巡航控制等,甚至还预留了用户可配置功能的按键,即学习型按键。 方向盘按键的设计风格体现了每种车型不同的个性,因此方向盘的按键控制设计正受到越来越多车厂的关注。考虑到汽车方向盘按键控制器受到安装空间、多重命令和设计成本等诸多因素的限制,同时LIN(Local Interconnect Network)总线在车身电子低速应用领域具有可靠性高、节省线束的优势,我们选
[嵌入式]
【stm32f407】外部中断实现按键中断方式
.外部中断 STM32F4的每个IO都可以作为外部中断的中断输入口,这点也是STM32F4的强大之处。STM32F407的中断控制器支持22个外部中断/事件请求。每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。 STM32F407的22个外部中断为: EXTI线0~15:对应外部IO口的输入中断。 EXTI线16:连接到PVD输出。 EXTI线17:连接到RTC闹钟事件。 EXTI线18:连接到USB OTG FS唤醒事件。 EXTI线19:连接到以太网唤醒事件。 EXTI线20:连接到USB OTG HS(在FS中配置)唤醒事件。 EXTI线21:连接到RTC入侵和时间戳事件。
[单片机]
【stm32f407】外部中断<font color='red'>实现</font><font color='red'>按键</font>中断方式
stm32利用oled显示屏与按键进行PID参数调节实现人机交互
上一个学期在学校做四轮车利用PID实现直线走,在调试过程中,我之前是每改一个参数就下载程序进控制板进行调试,观察车是否偏移来确定pid参数,但是后来我发现这样的效率很慢,经别人提醒后,我自己做了一个小小的人机交互界面,来显示pid的参数以及对pid参数进行调整。 以下是显示效果: 接着我在附上主要代码: // 功能描述 : OLED 7针SPI接口演示例程(STM32F103系列) // 说明: // ---------------------------------------------------------------- // GND 电源地 // VCC 3.
[单片机]
stm32利用oled显示屏与<font color='red'>按键</font>进行PID参数调节<font color='red'>实现</font>人机交互
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved