tiny 6410按键中断控制LED灯

本文主要介绍实现KEY1~4控制点亮LED1~4, KEY5-8控制熄灭LED1~4的实现。会上传全部的代码。

 前面LED的硬件连接已经介绍过了,在此只贴出KEY的硬件连接:

 

下面看上图中GPN 和GPL的配置寄存器:

 

第一步:为了让按键能产生中断,就要使GPN0~5设置为Ext.Interrupt【0~5】,GPL11,12设置为Ext.Interrupt【19,20】。

下面继续写外部中断的控制:

外部中断寄存器中我们需要现在需要关心的中有:EINT0CON0(配置外部中断0~15的触发方式),EINT0CON1(配置外部中断16~27的触发方式),EINT0MASK(外部中断屏蔽),EINT0PEND(0~27位的值代表外部中断0~27是否发生,写1代表清除)。

s3c6410用户手册截图如下:

 

第二步:为了按键能触发中断,要配置外部中断0~5,19,20的触发方式,然后设置中断屏蔽寄存器,不要屏蔽外部中断0~5,19,20,清空EINT0PEND(全写1)。

下面继续写矢量中断控制寄存器:

在矢量中断控制寄存器中我们需要关心的有:VICxINTSELECT(中断选择寄存器,选择是IRQ还是FIQ),VICxINTENABLE(中断使能寄存器),VICxINTENCLEAR(中断使能清除寄存器),VICxVECTADDR0~63(矢量地址寄存器,就是各个中断的入口地址),VICxADDRESS(在中断服务结束时,向该寄存器写值清除中断)。

s3c6410用户手册截图如下:

 

第三步:为了外部中断能上报到CPU,要使能相应中断源,设置中断方式(在此为IRQ),设置中断矢量地址(中断源对应的中断入口地址)。

在中断服务程序中通过判断EINT0PEND来确认哪个按键按下,最后要注意清除VICxADDRESS,清除EINT0PEND。

 上述3步中不分先后顺序。

在汇编引导程序中有以下代码,分别是开总中断和使能VIC:

mrc p15, 0, r0, c1, c0 , 0
orr r0, r0, #(1<<24)
mcr p15, 0, r0, c1, c0, 0

mrs r0, cpsr
bic r0, r0, #0x80
msr cpsr_c, r0

 

最后整个源码的下载地址:http://download.csdn.net/detail/lrs030740304/4565549

 本人所有博文目录:http://blog.csdn.net/lrs030740304/article/details/7941984

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值