外部中断(2)

来源:互联网 发布:淘宝hd官网下载 编辑:程序博客网 时间:2024/06/09 23:08



#include "key.h"
void hander_irq();
void led_on();
void led_off();
void wat_on();
void wat_off();
int (*printf)(char *,...) = (void *)0x57e11d4c;
int flag =1;
int flag_two = 1;
int main()
{
*(volatile unsigned long *)0x56000000 = hander_irq;
//cpsr
__asm__ __volatile__(


"mrs r0,cpsr\n"
"bic r0,r0,#0x80\n"
"msr cpsr,r0\n"
:
:
:"r0","memory"
);
//enable
VIC0INTENABLE |=((1<<0)|(1<<26));
//select
VIC0INTSELECT &= ~((1<<0)|(1<<26)); 
//ex_interrupt
//key 配成中断
GPNCON = 2; 
//ext_interrupt上升沿
EINT0CON0 |= (1<<1);
EINT0MASK &= ~(1<<0);
//int_interrupt
//watdog
WTCON = (1<<2)|(0<<3)|(1<<5)|(255<<8);
       // WTCNT = 0x8000;
        WTDAT = 0x2000;

         //led
        GPMCON = (1<<0)|(1<<4)|(1<<8)|(1<<12);
GPMDAT = 0xf;


}
void hander_irq()
{

if(VICxRAWINTR & (1<<0))
{
//clear ext_interrupt_key
EINT0PEND = 1;
printf("this is key\n");
if(flag)
{
wat_on();
}
else{
wat_off();
led_off();
}
flag ^= 1;

if(VICxRAWINTR & (1<<26))
{
//clear int_interruptu_watdong_count
WTCLRINT = 0;
printf("this is watdong\n");
if(flag_two)
{
led_on();
}
else{
led_off();
}
flag_two ^= 1;
}
}


void led_on(){
GPMDAT = 0;
}
void led_off(){
GPMDAT = 0xf;
}
void wat_on(){
  WTCON &= ~(1<<5);

}
void wat_off(){
WTCON |= (1<<5);
}



原创粉丝点击