接上文,我们进入到init.c中
#define GPBCON (*(volatile unsigned long *) 0x56000010)
#define GPBDAT (*(volatile unsigned long *) 0x56000014)
#define GPFCON (*(volatile unsigned long *) 0x56000050)
#define GPFDAT (*(volatile unsigned long *) 0x56000054)
#define EINTMASK (*(volatile unsigned long *) 0x560000A4)
#define PRIORITY (*(volatile unsigned long *) 0x4A00000C)
#define INTMSK (*(volatile unsigned long *) 0x4A000008) //这一部分宏定义了一些寄存器的地址,相信看我前面一些文章都知道是怎么回事。
#define GPB5_out (1<<(5*2))
#define GPB6_out (1<<(6*2))
#define GPB7_out (1<<(7*2))
#define GPB8_out (1<<(8*2)) //这里是宏定义4栈LED等,将他们的状态设置为打开
#define GPF1_eint (2<<(1*2))
#define GPF2_eint (2<<(4*2))
#define GPF3_eint (2<<(2*2))
#define GPF4_eint (2<<0) //这里定义打开4个按键的中断
void init_irq() //上文汇编中的跳转就是跳到了这个函数
{
GPBCON = GPB5_out | GPB6_out | GPB7_out | GPB8_out; //在控制寄存器里先打开4盏LED灯
GPFCON = GPF1_eint | GPF2_eint | GPF3_eint | GPF4_eint; //道理相同,打开4个按键中断
GPBDAT = 0x3FF; //关闭所有LED灯
GPFCON = 0x22A; //打开4个中断
EINTMASK &= (~(1<<4)); //在EINTMASK寄存其中,打开EINT4,否则用不了K2这个按键
PRIORITY = (PRIORITY & 0); //这个是排列优先级的寄存器,把它和0想与,让其按默认优先级
INTMSK &= (~(1<<0)) & (~(1<<1)) & (~(1<<2)) & (~(1<<4)); //最后在INTMSK寄存器中,把4个中断都打开
}