中断的概念
指 CPU 在正常运行程序时,由于内部或外部事件引起 CPU 暂时中止执行现行程序,转
去执行请求 CPU 为其服务的那个外设或事件的服务程序,待该服务程序执行完后又返
回到被中止的程序这样一个过程。
中断的优先级:
为使系统能及时响应并处理发生的所有中断,系统根据引起中断事件的重要性和紧迫程度,硬件将中断源分为若干个级别,称作中断优先级。
中断的嵌套:
是指中断系统正在执行一个中断服务时,有另一个优先级更高的中断提出中断请求,这时会暂时终止当前正在执行的级别较低的中断源的服务程序,去处理级别更高的中断源,待处理完毕,再返回到被中断了的中断服务程序继续执行,这个过程就是中断嵌套。
PRESERVE8
先是在启动代码里设置异常向量表
start
b reset
b halt
b halt
b halt
b halt
b halt
b _irq
b halt
reset
(关闭看门狗)
ldr sp,=(0x32000000+0x100000) ;在reset中设置reset异常的栈指针
MOV r0,#0x53 ; 设置 ARM9 的工作模式和中断允许
msr CPSR_cxsf,r0
_irq
ldr sp,=(0x31000000+0x100000)
stmdb sp!,{r0-r12,lr}
IMPORT do_irq
bl do_irq
ldmia sp!,{r0-r12,pc}^ ;压栈内容出栈
halt
b halt
void do_irq() //中断服务函数
{
unsigned int i;
for(i=0; i<4; i++) //四个按键
{
if(SRCPND1 & (1<<i)) //中断触发
{
if(GPFDAT & (1<<i)) //下降沿
{
my_printf("K%d is release\r\n",