TQ210按键驱动

老惯例,裸机驱动!

void key_init(void)
{
// 外部中断相关的设置
// 1111 = EXT_INT[0] =PH0_0
GPH0CON |= 0xF<<0|0xF<<4|0xF<<8|0xF<<12|0xF<<16|0xF<<20;
// 010 = Falling edge triggered
EXT_INT_0_CON |= 1<<1|1<<5|1<<9|1<<13|1<<17|1<<21;
// unmasked 外部中断控制寄存器0 = Enables Interrupt
EXT_INT_0_MASK &= ~(1<<0|1<<1|1<<2|1<<3|1<<4|1<<5);
//GPH2
GPH2CON |= 0xF<<24|0xF<<28;
// 010 = Falling edge triggered
EXT_INT_2_CON |= 1<<25|1<<29;
// unmasked 外部中断控制寄存器0 = Enables Interrupt
EXT_INT_2_MASK &= ~(1<<6|1<<7);
// 设置中断EXT_INT[0] 的处理函数  isr_key为中断处理函数
intc_setvectaddr(NUM_EINT0, isr_key0);
intc_setvectaddr(NUM_EINT1, isr_key1);
intc_setvectaddr(NUM_EINT2, isr_key2);
intc_setvectaddr(NUM_EINT3, isr_key3);
intc_setvectaddr(NUM_EINT4, isr_key4);
intc_setvectaddr(NUM_EINT5, isr_key5);


intc_setvectaddr(NUM_EINT16_31, isr_key6);//EXINT6-7共用一个中断源

// 使能中断EXT_INT[0] 
intc_enable(NUM_EINT0);
intc_enable(NUM_EINT1);
intc_enable(NUM_EINT2);
intc_enable(NUM_EINT3);
intc_enable(NUM_EINT4);
intc_enable(NUM_EINT5);
intc_enable(NUM_EINT16_31);
}


void isr_key0(void)//按键0的中断处理函数
{


printf("EXT_INT[0] \r\n");
 
// clear VIC0ADDR
intc_clearvectaddr();
// clear pending bit
EXT_INT_0_PEND |= 1<<0;
}
void isr_key1(void)//按键1的中断处理函数
{


printf("EXT_INT[1] \r\n");
  
// clear VIC0ADDR
intc_clearvectaddr();
// clear pending bit
EXT_INT_0_PEND |= 1<<1;
}


void isr_key2(void)//按键2的中断处理函数
{


printf("EXT_INT[2] \r\n");
  
// clear VIC0ADDR
intc_clearvectaddr();
// clear pending bit
EXT_INT_0_PEND |= 1<<2;
}


void isr_key3(void)//按键3的中断处理函数
{


printf("EXT_INT[3] \r\n");
  
// clear VIC0ADDR
intc_clearvectaddr();
// clear pending bit
EXT_INT_0_PEND |= 1<<3;
}
void isr_key4(void)//按键4的中断处理函数
{

printf("EXT_INT[4] \r\n");

// clear VIC0ADDR
intc_clearvectaddr();
// clear pending bit
EXT_INT_0_PEND |= 1<<4;
}
void isr_key5(void)//按键5的中断处理函数
{

printf("EXT_INT[5] \r\n");

// clear VIC0ADDR
intc_clearvectaddr();
// clear pending bit
EXT_INT_0_PEND |= 1<<5;
}
void isr_key6(void)//按键6和7的中断处理函数
{
if(!(EXT_INT_2_PEND&(1<<6)))//判断是否为EXINT6中断
{
printf("EXT_INT[7] \r\n");
// clear pending bit
EXT_INT_2_PEND |= 1<<7;
}
else
{
printf("EXT_INT[6] \r\n");
// clear pending bit
EXT_INT_2_PEND |= 1<<6;
}
// clear VIC0ADDR
intc_clearvectaddr();

}

非全部代码,代码我传资源了。有需要的朋友下载吧!

http://download.csdn.net/detail/xsxsa/5505393

你可能感兴趣的:(天嵌TQ210)