BF533鼠标的初始化函数
0赞
发表于 6/8/2012 2:31:01 PM
阅读(2531)
****************************************************************************/
#include "dm_bf5xx.h"
struct mousedat
{
int_t dat;
int_t newly;
}mousedat;
struct mousedat mdat1,mdat2,mdat3;
int_t RecNewDat; // 接收到新的数据
int_t ResOrDat; // 响应 或 是数据 响应为1 数据为0
int_t ResNum ; // 响应数据字节数
int_t RecDat=3;
int_t WR; // 中断程序中是发送子程序还是接收子程序 WR=1 发送
// WR =0 接收
int_t sendok ; // 标志发送成功
extern int_t mkey;
int_t newflag ;
int_t mcmd ;
/****************************************************************************
* 名称 : Init_CPLD
* 功能 : 允许连接鼠标数据线的74HC245工作
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
void Init_MCPLD()
{
*pCtrIner_Flag_OE =~MOUSE_SW_OE;//MOUSE_SW_OE=0
}
/****************************************************************************
* 名称 : PS2_DAT_DIR_IN
* 功能 : 允许连接鼠标数据线PF口为输入状态
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
void PS2_DAT_DIR_IN()
{
*pFIO_DIR = (*pFIO_DIR)&(~SDA); // 输入允许
*pFIO_INEN |= SDA;
*pCtrOut_Flag_A =PS_DAT_DIR;
}
/****************************************************************************
* 名称 : PS2_DAT_DIR_OUT
* 功能 : 允许连接鼠标数据线PF口为输出状态
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
void PS2_DAT_DIR_OUT()
{
*pFIO_DIR = ((*pFIO_DIR)|SDA); // 数据输出允许
*pFIO_INEN &= ~SDA;
*pCtrOut_Flag_A =(~PS_DAT_DIR);
}
/****************************************************************************
* 名称 :PS_CLK_IN
* 功能 :CPLD内部鼠标时钟切换到输入状态
* 入口参数 :无
* 出口参数 :无
***************************************************************************/
void PS_CLK_IN()
{
*pCtrOut_Flag_C = MOUSE_SW;//MOUSE_SW=1 SHU RU
}
/****************************************************************************
* 名称 :PS_CLK_OUT
* 功能 :CPLD内部鼠标时钟切换到输出状态
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
void PS_CLK_OUT()
{
*pCtrOut_Flag_C = 0x00;//(Out_Flag_C &(~MOUSE_SW ));//MOUSE_SW=0 SHU CHU
}
/****************************************************************************
* 名称 :PS2_Disable
* 功能 :CPLD内部ps2sw 不允许 此时不能进行鼠标操作
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
void PS2_Disable()
{
*pCtrIner_Flag_OE = 0xff;//Iner_Flag_OE;//MOUSE_SW_OE=1
}
/****************************************************************************
* 名称 : ps_send_start
* 功能 :发送鼠标命令起始条件
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
void ps_send_start()
{
uint8_t i;
*pFIO_MASKA_C = 0x0020; //允许中断
PS2_DAT_DIR_OUT();
SET_PF(SDA); // 拉高数据
PS_CLK_IN();
for(i=0;i<50;i++)
{
udelay(0xfff);
}
*pCtrOut_Flag_C =0x00;//(Out_Flag_C &(~MOUSE_SW ));
for(i=0;i<50;i++)
{
udelay(0xfff);
}
CLR_PF(SDA); // 拉低数据
udelay(0xffff);
PS_CLK_IN(); //时钟输入 ,同时拉高CLK 释放
*pFIO_MASKA_S = 0x0020; //允许中断
}
/****************************************************************************
* 名称 : Decode_Dat
* 功能 :打印鼠标动作信息
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
void Decode_Dat(void)
{
if((mdat3.dat&LeftBtn)!=0x00) { printf("LeftBtn is pressing!\n\r"); }
if((mdat3.dat&RightBtn)!=0x00) { printf("RightBtn is pressing!\n\r"); }
if((mdat3.dat&Middle )!=0x00) { printf("Middle is pressing!\n\r"); }
if((mdat3.dat&Xsign)!=0x00) { printf("Mouse Xsign move to left !\n\r"); }
else { printf("Mouse Xsign move to right !\n\r"); }
if((mdat3.dat&Ysign)!=0x00) { printf("Mouse Ysign move to down !\n\r"); }
else { printf("Mouse Ysign move to up !\n\r"); }
}
/****************************************************************************
* 名称 : Decode_Res
* 功能 :对鼠标进行复位
* 入口参数 :num 当为1时对鼠标进行复位
* 出口参数 :0
****************************************************************************/
int_t Decode_Res(int_t num) // 响应正确返回 1 ,响应错误返回0
{
if(num== 1)
{
if (mdat1.newly == 1 )
{
if(mdat1.dat == 0xfa)
return 1;
else
return 0;
mdat1.newly =0 ;
}
else return 0;
}
}
/****************************************************************************
* 名称 : Zero_dat
* 功能 :清除变量值
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
void Zero_dat(void)
{
mdat1.dat = 0 ;
mdat1.newly = 0;
mdat2.dat = 0 ;
mdat2.newly = 0;
mdat3.dat = 0 ;
mdat3.newly = 0;
}
/****************************************************************************
