小磷光一

BF533实现了PS2键盘的中断函数

0
阅读(2135)

 

#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;		 //禁止中断
	}	
}