本发明涉及计算机嵌入式驱动技术领域,尤其涉及一种cpu复位的控制方法、系统及存储介质。
背景技术:
嵌入式环境和普通的桌面系统一样,也经常重启整个系统。windows和linux桌面系统一般是手动点击或者命令复位系统,在复位的时候会关闭各种资源保存文件等,防止文件损坏甚至磁盘损坏。嵌入式系统在要复位的时候,一般可能直接由监控芯片(通俗叫法是看门狗,watchdog,从本质上来说就是一个定时器电路,一般有一个输入和一个输出,其中输入叫做喂狗,输出一般连接到另外一个部分的复位端,一般是连接到单片机;看门狗的功能是定期的查看芯片内部的情况,一旦发生错误就向芯片发出重启信号,看门狗命令在程序的中断中拥有最高的优先级)拉低cpu的硬件复位信号,强制复位系统。当然,在复位系统之前也有做关闭保存文件的动作,但这一般都是主动复位。如果是被看门狗复位,可能根本不能实现这些操作。
同时,早期的ddr2(ddr=doubledatarate,双倍速率,ddrsdram=双倍速率同步动态随机存储器,人们习惯称为ddr,就是平时说的运行内存,ddr2就是二代ddr)内存,并不带硬件复位功能,如果强制复位可能造成ddr2芯片内部状态出错,内存读写不一致,cpu不能正确执行指令,嵌入式系统再也无法启动,除非断电重启。一般的硬件设计,也不好单独对ddr2进行单独上下电,一旦嵌入式系统不能正常重启,在无人值守的环境下,会造成设备瘫痪,除非人工干预,后果很严重。
因此,现有技术还有待于改进和发展。
技术实现要素:
本发明的主要目的在于提供一种cpu复位的控制方法、系统及存储介质,旨在解决现有技术的上述缺陷。
为实现上述目的,本发明提供一种cpu复位的控制方法,其中,所述cpu复位的控制方法包括:
在监控芯片或者cpld逻辑复位cpu前,cpld给cpu发送一个外部中断信号;
cpu响应所述外部中断信号,并在中断服务程序中,关闭cpu全部要访问ddr2的模块、ddr2控制器,和发送给ddr2的时钟信号;
cpu根据锁存在指令缓存中的部分指令,执行写cpld寄存器,确认复位;
cpld拉低cpu的硬件复位管脚,cpu真正被复位,若是监控芯片进行复位,则延时后拉低cpu的硬件复位管脚,cpu被真正复位。
可选地,所述的cpu复位的控制方法,其中,所述cpld给cpu发送一个外部中断信号具体为:
cpld给cpu发送一个/irq0,所述/irq0为外部中断信号。
可选地,所述的cpu复位的控制方法,其中,所述cpu优先响应所述外部中断信号具体为:
cpld输出低电平给cpu,cpu触发中断并且进入预先设定的中断复位程序中。
可选地,所述的cpu复位的控制方法,其中,所述中断服务程序为cpu被触发中断后执行的程序。
可选地,所述的cpu复位的控制方法,其中,cpld通过/hd-rst信号直接复位cpu,所述/hd-rst信号低电平有效。
可选地,所述的cpu复位的控制方法,其中,所述cpu复位的控制方法还包括:
在cpld复位cpu前,cpu已关闭对ddr2内存的所有访问,cpld延迟1秒后,等ddr2内部没有被访问后,复位cpu。
可选地,所述的cpu复位的控制方法,其中,所述cpu复位的控制方法还包括:
当中断服务程序开始后,关闭网口硬件,卸载驱动;
关闭dma通道,禁止dma访问ddr2;
关闭cpu的协处理器,禁止协处理器访问ddr2;
关闭cpu的内存控制器,关闭内存刷新时钟;
写cpld寄存器,立即复位cpu;
软件死循环等待,cpld等待1秒后复位cpu,cpu重新启动。
可选地,所述的cpu复位的控制方法,其中,所述网口通过dma控制器直接访问内存。
此外,为实现上述目的,本发明还提供一种cpu复位的控制系统,其中,所述cpu复位的控制系统包括:cpu和cpld;在监控芯片或者cpld逻辑复位cpu前,cpld给cpu发送一个外部中断信号;cpu优先响应所述外部中断信号,并在中断服务程序中,关闭cpu全部要访问ddr2的模块、ddr2控制器,和发送给ddr2的时钟信号;cpu根据锁存在指令缓存中的部分指令,执行写cpld寄存器,确认复位;cpld拉低cpu的硬件复位管脚,cpu真正被复位,若是监控芯片进行复位,则延时后拉低cpu的硬件复位管脚,cpu被真正复位。
此外,为实现上述目的,本发明还提供一种存储介质,其中,所述存储介质存储有cpu复位的控制程序,所述cpu复位的控制程序被处理器执行时实现如上所述的cpu复位的控制方法的步骤。
本发明中,在监控芯片或者cpld逻辑复位cpu前,cpld给cpu发送一个外部中断信号;cpu响应所述外部中断信号,并在中断服务程序中,关闭cpu全部要访问ddr2的模块、ddr2控制器,和发送给ddr2的时钟信号;cpu根据锁存在指令缓存中的部分指令,执行写cpld寄存器,确认复位;cpld拉低cpu的硬件复位管脚,cpu真正被复位,若是监控芯片进行复位,则延时后拉低cpu的硬件复位管脚,cpu被真正复位。本发明中,cpld要复位cpu之前,cpu已经关闭了对ddr2内存的所有访问,cpld延迟1秒钟后,等ddr2内部没有被访问后,复位cpu,cpu重启后,会重新配置ddr2控制器,ddr2内存也能正常工作。
附图说明
图1是本发明cpu复位的控制方法的较佳实施例的流程图;
图2是本发明cpu复位的控制方法和系统的较佳实施例中cpu和cpld交互通信的原理示意图;
图3是本发明cpu复位的控制方法的较佳实施例中cpu启动中断服务程序的流程图;
图4是本发明cpu复位的控制方法的较佳实施例中cpu进行复位的流程图。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明较佳实施例所述的cpu复位的控制方法,如图1所示,所述cpu复位的控制方法包括:
步骤s10、在监控芯片或者cpld逻辑复位cpu前,cpld给cpu发送一个外部中断信号;
步骤s20、cpu响应所述外部中断信号,并在中断服务程序中,关闭cpu全部要访问ddr2的模块、ddr2控制器,和发送给ddr2的时钟信号;
步骤s30、cpu根据锁存在指令缓存中的部分指令,执行写cpld寄存器,确认复位;
步骤s40、cpld拉低cpu的硬件复位管脚,cpu真正被复位,若是监控芯片进行复位,则延时后拉低cpu的硬件复位管脚,cpu被真正复位。
具体地,一般嵌入式系统主动复位,软件都会做文件保护。对于硬件看门狗或者cpld逻辑直接拉低cpu复位信号,复位cpu,软件根本无法察觉。由于ddr2的不能硬复位缺陷(ddr3/ddr4均可硬复位),因此不良产品ddr2的颗粒可能出现在cpu等外围电路全部复位了,但是其内部却乱了。此时,cpu读写其单元内容不一致,导致cpu不能正确执行指令。就算反复重启cpu也不能解决该致命问题,除非整个环境先断电,并且ddr2内部电容放电彻底后,再重新上电,cpu才能正确读写ddr2的单位,并且正常启动。
本发明中,在看门狗或者cpld逻辑要复位cpu之前,cpld先给cpu一个外部中断信号(cpld有一根信号连接到了cpu的一个外部中断管脚上,cpld拉低此信号线,就可以给cpu发送中断)。cpu优先响应该中断,并在中断复位程序中,关闭cpu各种要访问ddr2的模块(包括网口,dma,协处理器),再关闭ddr2控制器,关闭送给ddr2的时钟信号,此时cpu依靠锁存在其指令cache(缓存)中的一小部分指令:继续执行写cpld寄存器,确认可以复位。此时,cpld立即拉低cpu的硬件复位管脚,cpu真正被复位。如果是看门狗来复位,直接延时1.8秒后拉低cpu硬件管,cpu被真正复位。
如图2所示,cpld通过/hd-rst信号直接硬复位cpu,该信号低电平有效;在复位之前,先给cpu发送中断。/irq0是cpu的外部中断信号,cpld输出低电平给cpu,cpu即可触发中断并且进入预先设定的中断复位程序中,执行上述描述的操作流程。
进一步地,如图3所示,中断服务程序就是当cpu被触发中断后执行的程序,该程序优先级最高,当前所有的事情都必须被打断,去执行此服务程序。
cpu有一批的中断类型,和中断源;int0就是一个外部中断源。低电平有效,就是当int0的电平为低电压时,cpu被触发中断,去执行服务程序。
不同的操作系统都提供中断注册功能函数,就是让cpu在发生中断时候能知道怎么操作。如果没有注册中断服务程序,中断来了也做不了具体的事情。
进一步地,如图4所示,当中断服务程序开始后,关闭网口硬件,卸载驱动;关闭dma通道,禁止dma访问ddr2;关闭cpu的协处理器,禁止协处理器访问ddr2;关闭cpu的内存控制器,关闭内存刷新时钟;写cpld寄存器,立即复位cpu;软件死循环等待,cpld等待1秒后复位cpu,cpu重新启动。
其中,网口是会直接访问ddr内存的,访问方式是dma通道。网口设备通过dma控制器,可以直接访问内存;这种访问对cpu或者软件来说是透明的,所以必须关闭网口,使其不能通过dma通道访问内存。
现在很多cpu并不是一个单一的通用芯片,很多都带有协处理器,协处理器是用来处理特定业务的。本发明涉及的powerpc芯片,就带有协处理器来处理网络报文,窄带数据。和第一条网口一样,协处理器也会访问内存。其访问内存的时候主cpu也是不知道的,所以要先关闭协处理器,终止它对内存的访问。
内存控制器是cpu访问内存的硬件接口。ddr有非常复杂的时序,控制器就是实现这些协议,让cpu可以透明的读写内存。关闭ddr控制器后,任何硬件模块都不能访问内存了。内存芯片进入一个自由状态,不受外部影响。
最后就是让cpld复位cpu。软件写一个cpld的寄存器后,cpld会在1秒钟后拉低cpu的/reset信号,cpu就会重新启动。
本发明中,在cpld要复位cpu之前,cpu已经关闭了对ddr2内存的所有访问,cpld延迟1秒钟后,等ddr2内部没有被访问后,复位cpu;cpu重启后,会重新配置ddr2控制器,ddr2内存也能正常工作。
进一步地,基于上述cpu复位的控制方法,本发明还提供一种cpu复位的控制系统,如图2所示,所述cpu复位的控制系统包括:cpu和cpld;在监控芯片或者cpld逻辑复位cpu前,cpld给cpu发送一个外部中断信号;cpu优先响应所述外部中断信号,并在中断服务程序中,关闭cpu全部要访问ddr2的模块、ddr2控制器,和发送给ddr2的时钟信号;cpu根据锁存在指令缓存中的部分指令,执行写cpld寄存器,确认复位;cpld拉低cpu的硬件复位管脚,cpu真正被复位,若是监控芯片进行复位,则延时后拉低cpu的硬件复位管脚,cpu被真正复位。
本发明还提供一种存储介质,其中,所述存储介质存储有cpu复位的控制程序,所述cpu复位的控制程序被处理器执行时实现如上所述的cpu复位的控制方法的步骤。
综上所述,本发明提供一种cpu复位的控制方法、系统及存储介质,所述方法包括:在监控芯片或者cpld逻辑复位cpu前,cpld给cpu发送一个外部中断信号;cpu响应所述外部中断信号,并在中断服务程序中,关闭cpu全部要访问ddr2的模块、ddr2控制器,和发送给ddr2的时钟信号;cpu根据锁存在指令缓存中的部分指令,执行写cpld寄存器,确认复位;cpld拉低cpu的硬件复位管脚,cpu真正被复位,若是监控芯片进行复位,则延时后拉低cpu的硬件复位管脚,cpu被真正复位。本发明中,cpld要复位cpu之前,cpu已经关闭了对ddr2内存的所有访问,cpld延迟1秒钟后,等ddr2内部没有被访问后,复位cpu,cpu重启后,会重新配置ddr2控制器,ddr2内存也能正常工作。
当然,本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关硬件(如处理器,编程器等)来完成,所述的程序可存储于一计算机可读取的存储介质中,所述程序在执行时可包括如上述各方法实施例的流程。其中所述的存储介质可为存储器、磁碟、光盘等。
应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。