0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ARM9中断中(C语言)如何实现复位功能,而不是返回中断前的状态?

工程师邓生 来源:未知 作者:刘芹 2023-10-19 16:42 次阅读

ARM9中断中(C语言)如何实现复位功能,而不是返回中断前的状态?

在ARM9处理器的中断中,当系统发生异常时,处理器会暂停正在执行的指令并处理中断请求。处理中断的方式有两种,一种是通过向处理器发送中断请求信号,触发处理器中断程序的执行;另一种是通过异常处理器,由处理器检测异常事件并自动触发中断程序的执行。

CPU进入中断程序时,它会先保存当前现场的寄存器状态,并将中断的处理程序指针指向中断程序的入口地址。在中断程序的执行过程中,通常会完成一系列的操作,如访问状态寄存器、中断触发寄存器、中断向量表等。而针对本文讨论的问题,我们需要实现复位功能,即当CPU进入中断程序后,不再返回到中断前的状态,而是彻底地进行复位操作。

实现复位功能需要我们进行如下的步骤:

1. 设置复位向量

在ARM9中,复位向量被定义为地址为0x0000 0000的位置。在处理器执行复位操作时,会跳转至该地址,执行复位向量指针所指向的程序代码。在安装复位函数之前,需要先确保复位向量指针正确地指向我们的复位程序。

2. 编写复位函数

复位函数是我们实现彻底复位操作的代码。在该函数中,我们需要清除系统的所有状态和寄存器信息,使其恢复至初始状态。具体而言,我们需要执行如下操作:

- 清除所有CPU寄存器
- 复位所有系统寄存器和状态寄存器
- 清除所有外设寄存器
- 复位系统时钟
- 清除所有中断向量和中断状态寄存器

在完成上述所有操作后,我们需要修改复位向量指针,使其指向我们需要执行的下一条指令地址。通常情况下,这个地址应该是程序的入口地址,以启动系统的正常工作状态。

3. 在中断程序中调用复位函数

在中断处理程序中,我们需要手动调用复位函数,并防止系统返回中断前的状态。具体而言,我们可以在复位函数中修改系统状态寄存器,以防止中断返回执行。例如,对于ARM9,可以使用以下代码:

```
void reset(void) __attribute__((naked));
void reset(void) {
__asm__("cpsid i"); // 禁止中断
__asm__("ldr r0, =0x00000000"); // 设置复位向量指针
__asm__("ldr r1, [r0]"); // 读取复位向量指针
__asm__("mov sp, r1"); // 更新栈指针
__asm__("ldr r0, =SystemInit"); // 加载复位函数
__asm__("bx r0"); // 跳转至复位函数
}
```

在上述函数中,我们首先禁止了中断服务。然后,我们设置了复位向量指针,并用该指针更新了栈指针。接着,我们加载复位函数并跳转至其执行。在函数执行完毕后,我们可以根据需要选择是否启用中断服务。

总之,实现ARM9中断的彻底复位操作需要我们进行复位向量的设置、编写复位函数,并在中断程序中调用该函数并防止中断返回执行。这样可以保证系统处于一个完全初始化和安全的状态,使其能够愉快地进行下一轮的工作!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • arm
    arm
    +关注

    关注

    131

    文章

    8125

    浏览量

    359118
  • 寄存器
    +关注

    关注

    30

    文章

    4548

    浏览量

    116218
  • C语言
    +关注

    关注

    179

    文章

    7233

    浏览量

    117701
  • 系统时钟
    +关注

    关注

    1

    文章

    25

    浏览量

    8805
收藏 人收藏

    评论

    相关推荐

    讲讲ARM9中断控制器的控制流程

    ARM9中断控制器的控制流程:1.首先能识别触发的中断(对应中断源必须打开,然后查询当前中断状态寄存器),硬件会操控PC跳到中断向量入口(IRQ_HANDLE,硬件控制的只要是IRQ中断类型
    发表于 08-29 08:25

    ARM9中断C语言)如何实现复位功能呢?

    ARM9中断C语言)如何实现复位功能不是返回中断状态,求大神解答
    发表于 02-09 17:01

    Dsp28335中断的方法

    中断的方法Dsp28335中断的方法
    发表于 01-08 14:17 14次下载

    TMS320F2812中断系统分析及其C语言编程_华东交通大学

    中断系统分析及其C语言编程
    发表于 01-15 17:38 2次下载

    ARM9中断处理技术及其在Windows CE下实现的研究

    ARM9系列嵌入式微处理器的中断体系结构 ,论述 Windows CE.net 的中断处理过程 ,并在此基础上给出基于 EP9301 微处理器的 Windows CE.net 4. 2 下进行 程序开发的实例 。
    发表于 03-14 16:11 0次下载

    TMS320LF2407中断系统分析及C语言编程

    中断系统分析及C语言编程
    发表于 05-06 16:54 17次下载

    转载一篇MSP430中断c语言函数模板

    中断c语言函数模板包括了基本模块的所有中断模板,感兴趣的小伙伴们可以看看。
    发表于 07-26 11:11 3次下载

    80C51中断系统的结构

    C51中断系统的结构
    发表于 09-20 09:24 15次下载
    80<b>C</b>51<b>中断</b>系统的结构

    使用单片机实现INT0中断计数的C语言程序免费下载

    实现INT0中断计数的C语言程序免费下载。
    发表于 03-21 10:28 8次下载

    使用单片机实现INT0及INT1中断计数的C语言程序免费下载

    实现INT0及INT1中断计数的C语言程序免费下载
    发表于 03-24 09:40 16次下载

    微机原理——8086中断类型以及中断向量表、中断响应、中断返回

    中断响应2、外部不可屏蔽中断响应3、内部中断响应4、8086中断返回先验知识回顾控制寄存器回顾PSW是Program Status Word的缩写,即程序状态字(也叫程序状态寄存...
    发表于 11-24 16:51 14次下载
    微机原理——8086<b>中断</b>类型以及<b>中断</b>向量表、<b>中断</b>响应、<b>中断</b><b>返回</b>

    51中断系统与vhdl状态

    中断系统与vhdl状态机51中断系统与vhdl状态机51单片机中断系统1.为什么要引入中断?51中断系统与vhdl状态机51单片机中断系统1.为什么要引入中断中断是为使单片机具有对外部或内部
    发表于 01-14 14:58 2次下载
    51<b>中断</b>系统与vhdl<b>状态</b>机

    K210中断按键,自复位按键的两种状态

    中断按键,自复位按键的两种状态复位按键的功能通常有两种:按下按键松手,蓝灯亮起,再次按下按键松手,蓝灯熄灭;按下按键,蓝灯亮起,松手后,蓝灯熄灭。功能1from Maix import
    发表于 01-17 12:50 2次下载
    K210<b>中断</b>按键,自<b>复位</b>按键的两种<b>状态</b>

    ARM中断体系和ZYNQ中断体系详解

    ARM中断体系 ① ARM体系,在存储地址的低位,固化了一个32字节的硬件中断向量表。 ② 异常中断发生时,程序计数器PC所指的位置不同,异常中断就不同。中断结束后,中断不同,返回地址也
    的头像 发表于 11-27 11:01 5100次阅读
    <b>ARM</b><b>中断</b>体系和ZYNQ<b>中断</b>体系详解

    STM32关全局中断的方法 STM32中断类型

    中断很强大,STM32中断可以嵌套,任何外设都可以产生中断,其中中断和异常是等价的。 中断执行流程: 主程序执行过程可以产生中断去执行中断的内容(保护现场),然后在返回继续执行
    的头像 发表于 07-22 10:52 2.4w次阅读