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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硬核程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值