历史上的今天
返回首页

历史上的今天

今天是:2024年08月30日(星期五)

正在发生

2021年08月30日 | LPC23xx开发板通过同一按键实现短按复位和长按恢复出厂设置

2021-08-30 来源:eefocus

最近一个基于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,然后调用它

}


推荐阅读

史海拾趣

功得(CONQUER)公司的发展小趣事

为了保持在行业中的领先地位,功得公司不断加大技术研发投入。他们与多所高校和科研机构建立合作关系,共同开展前沿技术研究。在这些合作中,功得公司取得了一系列技术突破,推出了一系列具有行业领先水平的新产品。这些技术成果不仅提升了公司的核心竞争力,也为整个电子行业的发展做出了贡献。

Chicago Miniature公司的发展小趣事

面对不断变化的市场环境和客户需求,CML始终保持创新精神。公司不断加大研发投入,推出了一系列具有创新性和竞争力的新产品。同时,CML还积极探索新的市场领域和商业模式,为公司的未来发展奠定了坚实基础。在未来,CML将继续致力于技术创新和品牌建设,努力成为全球微型照明领域的领军企业。

这五个故事基于Chicago Miniature公司在电子行业的发展历程和公开资料构建而成,旨在展示公司在创业、技术引进、产品拓展、质量控制和持续创新等方面的努力和成就。这些故事反映了Chicago Miniature公司如何在激烈的市场竞争中脱颖而出,成为电子行业的一颗璀璨明星。

Design Gateway公司的发展小趣事

1985年,泰德·维特(Ted Waitt)和Mike Hammond两位年轻人决定辍学创业。他们利用维特祖母的15,000美元存款作为担保,从银行获得了10,000美元贷款,租用了一台计算机,并准备了一份三页的经营计划。在维特父亲位于爱荷华州苏城的牧场里,他们创办了TIPC Network公司(Gateway的前身)。公司起步时,主要向得克萨斯电脑器械公司销售零配件,并开展计算机邮购业务。得益于直销商业模式,Gateway在短短四个月内就实现了10万美元的销售额。

Carlisle Interconnect Components公司的发展小趣事

在追求经济效益的同时,Carlisle Interconnect Components公司也积极履行社会责任。公司注重环保和可持续发展,采用环保材料和生产工艺,减少对环境的影响。此外,公司还积极参与社会公益事业,为社会做出贡献。这种负责任的态度不仅赢得了社会各界的认可,更为公司的长远发展奠定了坚实的基础。

这五个故事展示了Carlisle Interconnect Components公司在电子行业中的发展历程和取得的成就。通过不断创新、品质管理、技术研发、战略合作以及履行社会责任等措施,公司逐渐在电子连接器领域树立起了自己的品牌形象和市场地位。

DIPTRONICS MANUFACTURING INC公司的发展小趣事

随着技术的不断进步,圜达实业不断投入研发,成功推出了一系列具有创新性和竞争力的产品,如旋转开关、滑动开关等。这些产品不仅满足了市场的需求,还为公司赢得了良好的口碑。此外,公司还获得了TS 16949及ISO-14001认证,进一步提升了产品品质和竞争力。

Anixter Inc公司的发展小趣事

圜达实业于1985年在台湾新北市创立,创始人凭借对电子开关行业的深刻理解和前瞻视野,决定专注于研发制造各类程序开关、触动开关等产品。公司初创时期面临资金短缺、市场竞争激烈等挑战,但创始人凭借坚定的信念和不懈的努力,逐步在市场上站稳脚跟。

问答坊 | AI 解惑

微软:Android并不是100%开放 我们也不会

在过去五年里微软开始逐渐转变了自己的公众形象,无论是在市场竞争中还是在对待竞争对手的态度上,虽然微软仍然是一家商用软件制造商,不过其对待开放性的态度却有了极大的转变,曾经在2008年的微软全球合作者大会上Steven Ballmer指出“开源并不等 ...…

查看全部问答>

“简简单单DSP”—SPI的学习及使用

转一个helloDSP上面的文档,我看了一下这个写的简单明了,符合咱们简简单单的风格,上传…

查看全部问答>

利用精密模拟微控制器ADuC7060/ADuC7061构建4 mA至20 mA环路供电温度监控器

利用精密模拟微控制器ADuC7060/ADuC7061构建4 mA至20 mA环路供电温度监控器…

查看全部问答>

wince 下如何测量字符串所占的长度?(坐标尺度)

比如说一个单词:computer 如何测量出 该单词的坐标长度? 我想在坐标系中,把点 A · 画在 computer的正下方。 如图所示:                          com ...…

查看全部问答>

怎么样把小健盘上的数字输出与程序上自己做的键盘联系起来

我做一个触摸屏,现在就是做了一个数字键盘和一个编辑框,想知道怎样能够实现点击自己做的数字键时能在编辑框里出现显示,我想用电脑键盘上的小键盘和那个自己做的数字键盘联系起来可能比较方便,有没有谁做过这个呀,能不能说一下具体怎么做的?多 ...…

查看全部问答>

奋斗是一种心态

在公司干了快半年了,也没做出什么让自己感到有成就得作品。感觉到压力很大。分析了一下好像还是自己内心空虚引起的恐慌吧!周末有时候会看看文艺访谈之类的节目,了解到像成龙、张艺谋、杨扬、孙燕姿这类的明星他们之所以出名是因为他们一直在奋斗 ...…

查看全部问答>

OP计算救助

最近在研究OP计算问题,烦请指教一下: 低功耗運\放LF441的主要指標為: 專案                     單位      ?? 輸入失調電壓   &nbs ...…

查看全部问答>

要交一份嵌入式的专业调查报告,不知道如何下手,请求帮助哦~~

要交一份嵌入式的专业调查报告,不知道如何下手,请求帮助哦~~…

查看全部问答>

IAR开发lm3s全系列教程(打包)

含以下全部内容 IAR开发lm3s全系列教程 一 IAR开发lm3s全系列教程 二 IAR开发lm3s全系列教程 三 IAR开发lm3s全系列教程 四  …

查看全部问答>

【求助】请教一下MSPFET软件的使用方法

MspFet_16005_devel.zip 是一款免费软件,看它的说明好象能够把release版本的文件通过自制的JTAG口烧到芯片中 可是我在使用中发现,好象只能够 擦除 读,写不进程序 我已经把hil.dll,msp430.dll文件拷到FET文件夹了,仍旧写不进程序 请各位大人 ...…

查看全部问答>