BF533中断等寄存器的初始化
0赞
发表于 2012/1/7 15:26:14
阅读(2044)
#include "dm_bf5xx.h" #include "dm_keyb.h" /*************************************************************************** PROTOTYPES ***************************************************************************/ EX_INTERRUPT_HANDLER(keybord_ISR); static uint8_t cur_key=0xff; static inline void Init_PF(void) { /*0x20300000+0x00060000*/ *pCtrIner_Flag_OE =~KEY_SW_OE;//KEY_SW_OE=0 /*0x20300000+0x000A0000*/ *pCtrOut_Flag_C = KEY_SW ;//KEY_SW=1 mdelay(200); } void Init_Platform_KBD(void) { Init_PF(); } void Init_Timers(void) { *pTIMER0_CONFIG = 0x0019; *pTIMER0_PERIOD = 0x00008FFF; *pTIMER0_WIDTH = 0x00800000; *pTIMER_ENABLE |= 0x0001; } /**************************************************************************** * 名称 :Init_timer0_Interrupts * 功能 :开中断,注册中断服务程序 * 入口参数 :无 * 出口参数 :无 ****************************************************************************/ void Init_timer0_Interrupts(void) { *pSIC_IAR0 &= 0xffffffff; *pSIC_IAR1 &= 0xffffffff; *pSIC_IAR2 &= 0xfffffff4; register_handler(ik_ivg11, keybord_ISR); *pSIC_IMASK |= 0x00010000; } EX_INTERRUPT_HANDLER(keybord_ISR) { *pTIMER_STATUS &=0xefff; scanfkb(); } void keydecode(int_t flag ,uint8_t keydat); /**************************************************************************** * 名称 :scanfkb * 功能 :扫描键盘键值 * 入口参数 :无 * 出口参数 :无 ****************************************************************************/ void scanfkb(void) { int_t keypressflag ; uint8_t oldkbdat,kbdat; int_t i; uint8_t row=0x1; for(i = 0;i < 4;i++){ *pCtrIn_Kb = ~row; //列线循环输出1110,1101,1011,0111 mdelay(50); oldkbdat = *pCtrIn_Kb; //读取扫描数据 row = row << 1; //准备输出下一个列线值 if((oldkbdat&0xf0)!=0xf0){ //判断行线输入是否有低电平 kbdat = *pCtrIn_Kb; keypressflag = 1; if(oldkbdat == kbdat){ do{ kbdat = *pCtrIn_Kb; }while ((kbdat&0xf0)!=0xf0); //等待按键被释放 keydecode(keypressflag,oldkbdat); keypressflag = 0; } } } row = 0x01; } /**************************************************************************** * 名称 :keydecode * 功能 :打印键盘键值 * 入口参数 :flag 按键标志 * keydat 键值 * 出口参数 :无 ****************************************************************************/ void keydecode(int_t flag ,uint8_t keydat) { if(flag == 1){ switch (keydat) { case 0x7e: printf("The kb is F\n\r"); break; case 0xbe: printf("The kb is E\n\r"); break; case 0xde: printf("The kb is D\n\r"); break; case 0xee: printf("The kb is C\n\r"); break; case 0x7d: printf("The kb is B\n\r"); break; case 0xbd: printf("The kb is A\n\r"); break; case 0xdd: printf("The kb is 0\n\r"); break; case 0xed: printf("The kb is 9\n\r"); break; case 0x7b: printf("The kb is 8\n\r"); break; case 0xbb: printf("The kb is 7\n\r"); break; case 0xdb: printf("The kb is 6\n\r"); break; case 0xeb: printf("The kb is 5\n\r"); break; case 0x77: printf("The kb is 4\n\r"); break; case 0xb7: printf("The kb is 3\n\r"); break; case 0xd7: printf("The kb is 2\n\r"); break; case 0xe7: printf("The kb is 1\n\r"); break; default: break; } flag = 0; } } /**************************************************************************** * 名称 :scankb * 功能 :键盘初始化 * 入口参数 :无 * 出口参数 :无 ****************************************************************************/ void scankb(void) { Init_timer0_Interrupts(); Init_Timers(); Init_Platform_KBD();