中断实验(3)

接上文,我们进入到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个中断都打开
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值