主题 : tiny6410 实现按键外部中断控制LED灯 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 70205
精华: 1
发帖: 18
金钱: 140 两
威望: 28 点
贡献值: 1 点
综合积分: 56 分
注册时间: 2012-05-16
最后登录: 2017-09-13
楼主  发表于: 2012-07-24 12:15

 tiny6410 实现按键外部中断控制LED灯

管理提醒: 本帖被 xoom 执行加亮操作(2013-12-22)
作为新手很是悲催,为了这个问题,研究了很久,终于能正常跳入中断处理程序
[attachment=4273]为了这个调试的箭头真是不容易,在此庆贺一下  
一、cpu的初始化
1、开启vic
mrc    p15,0,r0,c1,c0,0
    orr r0,r0,#(1<<24)
    mcr p15,0,r0,c1,c0,0
2、堆栈初始化
LDR     R0, =Stack_Top

    MSR     CPSR_c, #Mode_UND:OR:I_Bit:OR:F_Bit
    MOV     SP, R0
    SUB     R0, R0, #UND_Stack_Size
    MSR     CPSR_c, #Mode_ABT:OR:I_Bit:OR:F_Bit
    MOV     SP, R0
   
本部分内容设定了隐藏,需要回复后才能看到

      rVIC1INTENABLE |=1;
       rVIC1INTENABLE |=2;
   
    rVIC0VECTADDR0 =addr;  //中断向量的地址
    rVIC0VECTADDR1 =addr;
    rVIC1VECTADDR0 =addr;
    rVIC1VECTADDR1 =addr;
}

中断函数
void __irq Interrupt(void)
{
    if(rEINT0PEND&0x01)
    
        rUTXH0='1';
    else if(rEINT0PEND&0x02)
        rUTXH0='2';
    else if(rEINT0PEND&0x04)
        rUTXH0='3';
    else if(rEINT0PEND&0x08)
        rUTXH0='4';
        else if(rEINT0PEND&0x10)
        rUTXH0='5';
    rEINT0PEND=0xffffffff;
    
    rGPKDAT=~rGPKDAT;
    
    rVIC0ADDRESS =0x0;
        rVIC1ADDRESS =0x0;
}
[ 此帖被diandianzd在2012-08-03 20:32重新编辑 ]
级别: 新手上路
UID: 74444
精华: 0
发帖: 12
金钱: 60 两
威望: 12 点
贡献值: 0 点
综合积分: 24 分
注册时间: 2012-07-24
最后登录: 2015-06-15
1楼  发表于: 2012-09-17 17:47