微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 一起学mini2440裸机开发(十)mini2440外部中断实验

一起学mini2440裸机开发(十)mini2440外部中断实验

时间:11-20 来源:互联网 点击:

来标志寄存器INTPND的那种类型发生了。寄存器INTOFFSET的各位定义如图8所示,当清除寄存器SRCPND和寄存器INTPND中相应的中断标志位后,寄存器INTOFFSET的值自动清零。

例如,若外部中断0发生且没有被屏蔽,则寄存器INTOFFSET的值为0;若定时器0中断发生且没有被屏蔽,则寄存器INTOFFSET的值为10。

__irq关键字:在isrservice.c中中断响应函数为void __irq IRQ_Handler(void),其中IRQ_Handler为函数名,这里名字不能变,因为在你的S3C2440.s代码中有这样一句话,

当发生IRQ中断时,程序跳转到标号IRQ_Handler处去执行,这里的标号就是咱们的中断服务函数的名字。

关键字__irq必须得加上,注意它和ADS中的不同点是,MDK中irq前边加俩个"_",ADS中前边只有一个“_”。

__irq关键字主要有以下作用:

①中断发生后,自动保存所有需要保存的寄存器

②中断返回时,自动计算中断返回地址,并自动将IRQ模式下寄存器SPSR_irq的值恢复到寄存器CPSR(中断进入什么模式,则将该模式下寄存器SPSR的值恢复到CPSR中)。

关于中断,还有几个问题咱们需要思考,下面我仅列出来,就不再说了,时间有限:

①当中断发生后,程序是如何跳转到中断处理函数呢?

②执行完中断处理函数后,如何返回到原来被打断的地方接着执行呢?

③ARM处理器的流水线结构对中断返回地址的计算有什么影响呢?

④ARM7处理器是3级流水线结构,ARM9处理器是5级流水线结构,为什么中断返回地址的计算会相同呢?

⑤ARM处理器有7种工作模式,发生中断后,处理器进入什么工作模式呢?

⑥发生中断后,哪些事情是AMR处理器自动完成的呢?哪些事情是需要编程实现的呢?

理解了这些问题,相信你对中断的掌握又会上升到一个高度呢!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top