BF533实现了PS2键盘的中断函数
0赞
发表于 5/4/2012 8:33:11 AM
阅读(2132)
#include "dm_bf5xx.h"
#include "dm_types.h"
volatile uint8_t key;
volatile uint8_t key2;
volatile uint8_t key3;
volatile uint8_t key_up;
static int_t time;
/****************************************************************************
* 名称 :EX_INTERRUPT_HANDLER(FlagA_ISR_KBD)
* 功能 :键盘中断处理函数
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
EX_INTERRUPT_HANDLER(FlagA_ISR_KBD)
{
int_t i;
int_t data;
do{
i =* pCtrIn_Int_B;
}while((Keyy_INT&i)); //等待时钟线低电平
if ((time > 0) && (time < 9)) //截取第一帧数据
{
READ_PF_STAT(data);
if((data&SCL) == 0)
{
key = key>>1;
}
if((data&SCL) == 0x0001)
{
key = key>>1;
key = key|0x80;
}
}
if ((time > 11) && (time < 20)) //截取第二帧数据
{
READ_PF_STAT(data);
if((data&SCL) ==0 )
{
key2 = key2>>1;
}
if((data&SCL)==0x0001)
{
key2 = key2>>1;
key2 = key2|0x80;
}
}
if ((time > 22) && (time < 31)) //截取第三帧数据
{
READ_PF_STAT(data);
if((data&SCL) == 0)
{
key3 = key3>>1;
}
if((data&SCL) == 0x0001)
{
key3 = key3>>1;
key3 = key3|0x80;
}
}
time++;
do{
i =* pCtrIn_Int_B;
}while(!(i&Keyy_INT)); //等待时钟线到高电平
if(time >30)
{
*pFIO_FLAG_C = 0x0020; //清中断
time = 0;
key_up = 1;
//*pFIO_MASKA_C = 0x0020; //禁止中断
}
}
