BF533读取鼠标数据的中断函数
0赞
发表于 6/8/2012 2:29:16 PM
阅读(2573)
****************************************************************************/
#include "cdefBF533.h"
#include "dm_bf5xx.h"
int_t mkey;
static uint8_t Time; //CLK 计数
static uint8_t parity;// 奇偶校验位
extern int_t WR; // 中断程序中是发送子程序还是接收子程序 WR=1 发送
// WR =0 接收
extern int_t sendok ;
extern int_t newflag ;
extern int_t mcmd ;
/****************************************************************************
* 名称 : EX_INTERRUPT_HANDLER(FlagA_ISR_M)
* 功能 : 鼠标中断处理函数
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
EX_INTERRUPT_HANDLER(FlagA_ISR_M)
{
uint16_t data;
uint8_t i;
if(WR==0)
{
PS2_DAT_DIR_IN();
do{
i = *pCtrIn_Int_B;
}while((Mouse_INT&i));
if ((Time > 0) && (Time< 9))
{
READ_PF_STAT(data);
if((data & SDA)==0)
{
mkey = mkey >> 1;
}
if((data&SDA)==0x0002)
{
mkey = mkey >> 1;
mkey = mkey | 0x80;
}
}
Time++;
do{
i = *pCtrIn_Int_B;
}while(!(i&Mouse_INT));
if(Time>=10)
{
newflag = 1; // 标志新的数据接收到
*pFIO_FLAG_C = 0x0020; //清中断
Time=0;
}
}
if(WR==1)
{
do{
i = *pCtrIn_Int_B ;
}while((Mouse_INT&i));
if((Time>=0) && (Time< 11))
{
if((Time>=0) && (Time< 8))
{
if((mcmd&0x01)==0)
{
CLR_PF(SDA);
mcmd = mcmd>>1;
}
else
{
SET_PF(SDA);
mcmd = mcmd>>1;
parity = parity+1;
}
}
if((Time >7) && (Time< 9))
{
parity=parity%2;
if(parity == 0)
{
SET_PF(SDA);
}
if(parity == 1)
{
CLR_PF(SDA);
}
}
if((Time >8) && (Time< 10))
{
SET_PF(SDA);
PS2_DAT_DIR_IN();
}
if((Time >9) && (Time< 11))
{
READ_PF_STAT(data);
if((data&SDA)==0)
{
sendok = 1; // 标志发送结束
}
}
}
Time++;
do{
i = *pCtrIn_Int_B;
}while(!(i&Mouse_INT));
if (Time > 10)
{
parity = 0;
Time = 0;
*pFIO_FLAG_C = 0x0020; //清中断
WR = 0;
}
}
}
