上图为中断控制流程图,SUBSRCPND为子中断状态寄存器,当中断发生时相应位被置一,清除中断标志位需要向该寄存器写1,因为它是只读存储器,只要向里面写就可以清除相应的位,而不是真的写进去了。SUBMASK为子中断屏蔽寄存器,向相应位写1代表屏蔽该中断,SRCPND为一类中断的状态寄存器,MASK为一类中断的屏蔽寄存器,INTPND为总的状态寄存器,这些寄存器与前面的功能相同,MODE寄存器是模式选择寄存器,0为IRQ模式,1为快速模式。通过按键1GPG0触发低电平引起ENIT8中断,蜂鸣器响。具体实验代码如下(放入src目录下的main函数中可直接在线仿真):
#define
#include <stdlib.h>
#include <string.h>
#include "def.h"
#include "option.h"
#include "2440addr.h"
#include "2440lib.h"
#include "2440slib.h"
#include "mmu.h"
#include "profile.h"
#include "memtest.h"
void delay(int times)//延时函数
{
}
void beep_init(void)//蜂鸣器初始化
{
}
void beep(void)
{
}
void key1_init() //按键1初始化
{
}
static void __irq Key1_ISR(void)
{
}
void inter_init()
{
}
void Main(void)
{
}
注意:第一次接触arm的中断,这个程序花了一天的时间,有两个问题值得注意!
1.