裸板程序,按键中断程序框架

1、编写start.S
在start.S文件中设置中断向量,s3c2440中断向量表中,IRQ硬件中断是在第六个向量中,因此将irq中断放到向量表的第六个上,前面的五个中断有其他用处,我们暂时不用,当出现他们时我们设置一个死循环。

.text
.global _start
_start:
	b reset
	b halt
	b halt
	b halt
	b halt
	ldr pc, =irq_addr
irq_addr:
	.word do_irq
do_irq:
	ldr sp, = 0x33e00000
	sub lr,lr, #4
	stmdb sp!,{r0-r12, lr}
	bl key_handle
	ldmia sp!,{r0-r12, pc}^
reset:
	.........(关闭看门狗、设置MPLL、判断NOR或NAND启动、代码重定位)
	mrs r0,cpsr       //将cpsr读出来
	bic r0,r0,#0xf    //设置为use模式
	bic r0,r0,#(1<<7) //清除I位,使能中断
	msr cpsr,r0
	ldr sp, =0x33f00000
	ldr pc, =sdram
sdram:
	bl uart0_init    //跳转到sdram初始化函数
	ldr pc, =main
halt:
	b halt

2、编写中断函数,interrupt.c

查看arm手册,寻找相关寄存器,并设置寄存器。

void eint_init(void)
{
	使能INTMSK,使其不再屏蔽相应位的中断
	设置中断源,将相应引脚设置为中断引脚
	设置中断触发方式:双边沿触发
	设置EINTMASK使能相应中断
}

void key_eint_irq(int irq)
{
	中断处理函数
	清中断,EINTPEND
}
void key_handle(void) //中断处理函数
{
	判断中断源
	调用相应的处理函数
	从源头清中断,SRCPND、INTPND
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值