JZ2440_5_NAND 中断控制器
来源:互联网 发布:生物软件下载 编辑:程序博客网 时间:2024/06/07 10:07
ARM的七种工作模式:
用户模式(usr):ARM处理器正常的程序执行状态
快速中断模式(fiq):用于高速数据传输或通道处理
中断模式(irq)(异常):用于通用的中断处理
管理模式(svc):操作系统使用的保护模式
数据访问终止模式(abt)(中断):当数据或者指令预取终止时进入该模式。可用于虚拟存储及存储保护
系统模式(sys):运行具有特权的的操作系统任务
未定义指令终止模式(und)(异常 ):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真
区别:
1.不同的寄存器:不同模式下,有的Rx是相同的寄存器,有的Rx是不同的寄存器,比如R8在用户模式和快速中断模式就表示不一样的寄存器。这样的好处是:模式切换后再切换回来原来寄存器(不同模式不同的那个寄存器)的值不影响。距离(ARM处于用户模式下由于发生了某件事情切换到了快速中断模式,需要做的事:1.保存现场(因为快速中断模式有自己的R8-R14,所以只需要保存R0-R7的数据即可)返回原来的模式后只需要把R0-R7赋原值即可,这样就省去了对某些寄存器的保存可恢复)快速中断模式下属于自己的寄存器比较多,所以在转换为快速中断模式后基本不需要保存数据,这使得处理中断很迅速
2.不同的权限:在用户模式下,寄存器不能访问某些寄存器和地址,可是在管理模式下就可以访问所有寄存器和地址,要配合MMU来使用
3.触发条件: 1.上电后CPU处于管理模式2.发生中断,进入中断模式(IRQ)
中断:
举例:一个人在家里看电视,怎么知道有客人来?方法一:每隔五分钟去门口看一下是否有人来?(查询的方式)方法二:客人来了就按门铃,你只要专心看自己的电视就好了,听到门铃你就可以知道有客人来了(中断模式)
程序想知道按键是否按下?方法一:轮询 方法二:按键会触发中断,使得CPU响应中断
中断属于异常,比如:按键中断,串口中断
发生了异常之后:
1.CPU进入异常模式(相当于切换寄存器(因为不同模式的寄存器不同,在区别1里有介绍 ))
2.PC指针=异常入口(一些固定地址)
怎么用中断?
1.中断发生 保存状态
初始化(引脚或其他等等)+使能中断
2.中断处理
分辨中断源+根据中断源进行不同的处理
3.恢复状态
发生中断?
硬件:
1.进入中断模式,切换寄存器,其中重要的是SP指针寄存器,因为切换到中断模式SP寄存器会发生变化,中断模式有自己的SP寄存器
2.PC=IRQ的入口地址
软件:
3.b HandleIRQ(跳转到中断处理函数)
计算返回到“被中断处”的地方
保存现场,即保存一大堆寄存器
调用中断处理函数
分辨中断源(2440里的INTOFFSET寄存器的值就可以分辨哪种中断源,所以在下一步处理的时候可以先读这个寄存器的值来确定中断源)
处理
清除,即清除中断标志位
恢复现场
用户模式(usr):ARM处理器正常的程序执行状态
快速中断模式(fiq):用于高速数据传输或通道处理
中断模式(irq)(异常):用于通用的中断处理
管理模式(svc):操作系统使用的保护模式
数据访问终止模式(abt)(中断):当数据或者指令预取终止时进入该模式。可用于虚拟存储及存储保护
系统模式(sys):运行具有特权的的操作系统任务
未定义指令终止模式(und)(异常 ):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真
区别:
1.不同的寄存器:不同模式下,有的Rx是相同的寄存器,有的Rx是不同的寄存器,比如R8在用户模式和快速中断模式就表示不一样的寄存器。这样的好处是:模式切换后再切换回来原来寄存器(不同模式不同的那个寄存器)的值不影响。距离(ARM处于用户模式下由于发生了某件事情切换到了快速中断模式,需要做的事:1.保存现场(因为快速中断模式有自己的R8-R14,所以只需要保存R0-R7的数据即可)返回原来的模式后只需要把R0-R7赋原值即可,这样就省去了对某些寄存器的保存可恢复)快速中断模式下属于自己的寄存器比较多,所以在转换为快速中断模式后基本不需要保存数据,这使得处理中断很迅速
2.不同的权限:在用户模式下,寄存器不能访问某些寄存器和地址,可是在管理模式下就可以访问所有寄存器和地址,要配合MMU来使用
3.触发条件: 1.上电后CPU处于管理模式2.发生中断,进入中断模式(IRQ)
中断:
举例:一个人在家里看电视,怎么知道有客人来?方法一:每隔五分钟去门口看一下是否有人来?(查询的方式)方法二:客人来了就按门铃,你只要专心看自己的电视就好了,听到门铃你就可以知道有客人来了(中断模式)
程序想知道按键是否按下?方法一:轮询 方法二:按键会触发中断,使得CPU响应中断
中断属于异常,比如:按键中断,串口中断
发生了异常之后:
1.CPU进入异常模式(相当于切换寄存器(因为不同模式的寄存器不同,在区别1里有介绍 ))
2.PC指针=异常入口(一些固定地址)
怎么用中断?
1.中断发生 保存状态
初始化(引脚或其他等等)+使能中断
2.中断处理
分辨中断源+根据中断源进行不同的处理
3.恢复状态
发生中断?
硬件:
1.进入中断模式,切换寄存器,其中重要的是SP指针寄存器,因为切换到中断模式SP寄存器会发生变化,中断模式有自己的SP寄存器
2.PC=IRQ的入口地址
软件:
3.b HandleIRQ(跳转到中断处理函数)
计算返回到“被中断处”的地方
保存现场,即保存一大堆寄存器
调用中断处理函数
分辨中断源(2440里的INTOFFSET寄存器的值就可以分辨哪种中断源,所以在下一步处理的时候可以先读这个寄存器的值来确定中断源)
处理
清除,即清除中断标志位
恢复现场
阅读全文