您的位置 首页 开关

OK6410按键中止点亮lED

首先理清楚要准备的几个方面1LED初始化2按键初始化3中断初始化4中断处理程序首先初始化LED,以前说过了,不说按键初始化,这里既然要用

首要理清楚要预备的几个方面

1.LED初始化
2.按键初始化
3.中止初始化
4.中止处理程序
首要初始化LED,曾经说过了,不说
按键初始化,这儿已然要用到中止,就不必传统的延时消抖的方法了,直接用中止。
只要把对应的位设置成10,便是外部中止了
这儿用XEINT0和XEINT5,有理由的,为什么选这两个后边会说
void button_init()
{
*(GPNCON)=0x802; //装备按键位外部中止
}
接下来中止初始化,一下说的比较清楚了,寄存器的姓名直接在s3c6410里边查找就能够了,为什么选XEINT0和XEINT5的原因在注释最长的那一行里边
void init_irq()
{
//装备按键中止下降沿触发
*(EINT0CON0)=0b010;
//撤销中止屏蔽
*(EINT0MASK)=0x0;
//翻开中止
*(VIC0INTENABLE)=0x3;
*(VIC0VECTADDR0)=(int)k1_isr; //把中止处理程序的地址写入中止向量表
*(VIC0VECTADDR1)=(int)k2_isr; //留意external interrupt0和external interrupt1归于同一个VIC0,运用同一个中止向量地址,所以这儿用XEINT1和XEINT5
//设置cpsr寄存器运用向量方法中止,翻开总中止
__asm__(
“mrc p15,0,r0,c1,c0,0\n” //运用中止向量表
“orr r0,r0,#(1<<24)\n"
“mcr p15,0,r0,c1,c0,0\n”
“mrs r0,cpsr\n”
“bic r0, r0, #0x80\n” //cpsr第7位清零,撤销中止不使能
“msr cpsr_c, r0\n”
:
:
);
}
中止处理程序
void k1_isr()
{
//保存环境
__asm__(
“sub lr, lr, #4\n”
“stmfd sp!, {r0-r12, lr}\n”
:
:
);
//中止处理
led_off();
//铲除中止
EXT_INT_0_PEND = ~0x0; //铲除符号 pend是中止标志位
VIC0ADDRESS = 0; //把向量地址清零,便利下次用向量方法处理中止
VIC1ADDRESS = 0; //
//康复环境
__asm__(
“ldmfd sp!, {r0-r12, pc}^ \n”
:
:
);
}
OK6410里边我感觉中止有一点比较特别,便是能够选用向量方法处理中止,这儿就需要知道,先来个表格


便是这个,这儿能够看到,external interrupt0到external interrupt3一起归于VIC0组,这样它在运用向量方法时就会共用向量地址,所以在一起用external interrupt0和external interrupt1时就会呈现external interrupt1的按键没有用,便是由于向量地址被external interrupt0占用了,所以我用了external interrupt0和external interrupt5,external interrupt5归于V%&&&&&%1,向量地址在external interrupt0的向量地址的基础上加4。

This time can be OK

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/kaiguan/263080.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部