亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ps2.c

?? ps2在44B0下的驅(qū)動源代碼,要下的趕快了:)
?? C
字號:
#include "../inc/44blib.h"
#include "../inc/44b.h"
#include "ps2.h"

#define MAX_PS2_BUF (20)
#define PS2DATA		(rPDATG & 0x40)

unsigned int buf_w_pt, buf_r_pt;
unsigned char ps2_buffer[MAX_PS2_BUF];

KEYBOARD_STRUCT key1_lut[]=
{
0x16,	0x31,	0x21,	0,	0,	// { 1 }    { ! }
0x1e,	0x32,	0x40,	0,	0,	// { 2 }    { @ }
0x26,	0x33,	0x23,	0,	0,	// { 3 }    { # }
0x25,	0x34,	0x24,	0,	0,	// { 4 }    { $ }
0x2e,	0x35,	0x25,	0,	0,	// { 5 }    { % }
0x36,	0x36,	0x5e,	0,	0,	// { 6 }    { ^ }
0x3d,	0x37,	0x26,	0,	0,	// { 7 }    { & }
0x3e,	0x38,	0x2a,	0,	0,	// { 8 }    { * }
0x46,	0x39,	0x28,	0,	0,	// { 9 }    { ( }
0x45,	0x30,	0x29,	0,	0,	// { 0 }    { ) }
0x1c,	0x61,	0x41,	0,	0,	// { a }    { A }
0x32,	0x62,	0x42,	0,	0,	// { b }    { B }
0x21,	0x63,	0x43,	0,	0,	// { c }    { C }
0x23,	0x64,	0x44,	0,	0,	// { d }    { D }
0x24,	0x65,	0x45,	0,	0,	// { e }    { E }
0x2b,	0x66,	0x46,	0,	0,	// { f }    { F }
0x34,	0x67,	0x47,	0,	0,	// { g }    { G }
0x33,	0x68,	0x48,	0,	0,	// { h }    { H }
0x43,	0x69,	0x49,	0,	0,	// { i }    { I }
0x3b,	0x6a,	0x4a,	0,	0,	// { j }    { J }
0x42,	0x6b,	0x4b,	0,	0,	// { k }    { K }
0x4b,	0x6c,	0x4c,	0,	0,	// { l }    { L }
0x3a,	0x6d,	0x4d,	0,	0,	// { m }    { M }
0x31,	0x6e,	0x4e,	0,	0,	// { n }    { N }
0x44,	0x6f,	0x4f,	0,	0,	// { o }    { O }
0x4d,	0x70,	0x50,	0,	0,	// { p }    { P }
0x15,	0x71,	0x51,	0,	0,	// { q }    { Q }
0x2d,	0x72,	0x52,	0,	0,	// { r }    { R }
0x1b,	0x73,	0x53,	0,	0,	// { s }    { S }
0x2c,	0x74,	0x54,	0,	0,	// { t }    { T }
0x3c,	0x75,	0x55,	0,	0,	// { u }    { U }
0x2a,	0x76,	0x56,	0,	0,	// { v }    { V }
0x1d,	0x77,	0x57,	0,	0,	// { w }    { W }
0x22,	0x78,	0x58,	0,	0,	// { x }    { X }
0x35,	0x79,	0x59,	0,	0,	// { y }    { Y }
0x1a,	0x7a,	0x5a,	0,	0,	// { z }    { Z }
0x0e,	0x60,	0x7e,	0,	0,	// { ` }    { ~ }
0x4e,	0x2d,	0x5f,	0,	0,	// { - }    { _ }
0x55,	0x3d,	0x2b,	0,	0,	// { = }    { + }
0x5d,	0x5c,	0x7c,	0,	0,	// { \ }    { | }
0x54,	0x5b,	0x7b,	0,	0,	// { [ }    { { }
0x5b,	0x5d,	0x7d,	0,	0,	// { ] }    { } }
0x4c,	0x3b,	0x3a,	0,	0,	// { ; }    { : }
0x52,	0x27,	0x22,	0,	0,	// { ' }    { " }
0x41,	0x2c,	0x3c,	0,	0,	// { , }    { < }
0x49,	0x2e,	0x3e,	0,	0,	// { . }    { > }
0x4a,	0x2f,	0x3f,	0,	0,	// { / }    { ? }
0x5a,	0x0a,	0,		0,	0,	// { enter }
0x29,	0x20,	0,		0,	0,	// { space }
0x05, 	0,		0,		0,	"F1",	
0x06, 	0,		0,		0,	"F2",	
0x04, 	0,		0,		0,	"F3",	
0x0c, 	0,		0,		0,	"F4",	
0x03, 	0,		0,		0,	"F5",	
0x0b, 	0,		0,		0,	"F6",	
0x83, 	0,		0,		0,	"F7",	
0x0a, 	0,		0,		0,	"F8",	
0x01, 	0,		0,		0,	"F9",	
0x09, 	0,		0,		0,	"F10",	
0x78,	0,		0,		0,	"F11",	
0x07,	0,		0,		0,	"F12",
0x66,	0,		0,		0,	"BKSP",
0x0d,	0,		0,		0,	"TAB",
0x14,	0,		0,		0,	"L_CTRL",
0xe01f,	0,		0,		0,	"L_GUI",
0x11,	0,		0,		0,	"L_ALT",
0xe014,	0,		0,		0,	"R_CTRL",
0xe027,	0,		0,		0,	"R_GUI",
0xe011,	0,		0,		0,	"R_ALT",
0xe02f,	0,		0,		0,	"APPS",
0x76,	0,		0,		0,	"ESC",
0xe070,	0,		0,		0,	"Ins",	
0xe06c,	0,		0,		0,	"Home",
0xe07d,	0,		0,		0,	"PgUP",
0xe071,	0,		0,		0,	"Del",
0xe069,	0,		0,		0,	"End",
0xe07a,	0,		0,		0,	"PgDn",
0xe075,	0,		0,		0,	"U_ARROW",
0xe06b,	0,		0,		0,	"L_ARROW",
0xe072,	0,		0,		0,	"D_ARROW",
0xe074,	0,		0,		0,	"R_ARROW",
0xe04a,	0,		0,		0,	"KP_/",
0x7c,	0,		0,		0,	"KP_*",
0x7b,	0,		0,		0,	"KP_-",
0x79,	0,		0,		0,	"KP_+",
0xe05a,	0,		0,		0,	"KP_EN",
0x71,	0,		0,		0,	"KP_.",
0x70,	0,		0,		0,	"KP_0",
0x69,	0,		0,		0,  "KP_1",
0x72,	0,		0,		0,	"KP_2",    
0x7a,   0,		0,		0,  "KP_3",    
0x6b,	0,		0,		0,	"KP_4",    
0x73,   0,		0,		0,  "KP_5",    
0x74,	0,		0,		0,	"KP_6",    
0x6c,   0,		0,		0,  "KP_7",    
0x75,	0,		0,		0,	"KP_8",    
0x7d,   0,		0,		0,  "KP_9", 
0xe037,	0,		0,		0,	"Power",
0xe03f,	0,		0,		0,	"Sleep",
0xe05e,	0,		0,		0,	"Wake",
0, 0, 0, 0,	0,
};

#define KEY_LSHIFT_MASK		(0x12)
#define KEY_RSHIFT_MASK		(0x59)
#define KEY_CAPS_MASK		(0x58)		
#define KEY_NUM_MASK		(0x77)

#define KEY_LSHIFT_INDEX	(0)
#define KEY_RSHIFT_INDEX	(1)
#define KEY_CAPS_INDEX		(2)
#define KEY_NUM_INDEX		(3)

KEYBOARD_STRUCT keys_lut[]=
{
KEY_LSHIFT_MASK,	0,	0,	0,	0,		//L_shift
KEY_RSHIFT_MASK,	0,	0,	0,	0,		//R_shift
KEY_CAPS_MASK,		0,	0,	0,	0,		//caps
KEY_NUM_MASK,		0,	0,	0,	0,		//num
0, 0, 0, 0, 0,
};


void ps2_interrupt(void)
{
	static unsigned int dat, count;
	
	count++;
	dat >>= 1;
	if(PS2DATA) dat |= 0x200;
	
	if(count == 11)
	{
	
		if((buf_w_pt+1)%MAX_PS2_BUF != buf_r_pt)
		{	
			ps2_buffer[buf_w_pt] = (unsigned char)(dat&0xff);
			buf_w_pt = (buf_w_pt+1)%MAX_PS2_BUF;
		}

		dat = 0;
		count = 0;
	}
}

void ps2_waitack(unsigned int count, unsigned int *ack)
{
	unsigned int i, wait_time;

	*ack = 0;
	for(i=0;i<count;i++)
	{
		wait_time = 20000;
		while((buf_r_pt == buf_w_pt) && wait_time--);
		if(buf_r_pt != buf_w_pt)
		{
			(*ack) <<= 8;
			*ack|=ps2_buffer[buf_w_pt-1];
			buf_w_pt = (buf_w_pt-1)%MAX_PS2_BUF;
		}
	}
}

void ps2_command(unsigned char cmd)
{
	unsigned int i, j;
	
	rINTMSK |= BIT_EINT4567;
	rPCONG = (rPCONG&(~(0xf<<12))) | (0x5<<12);
	
	rPDATG &= ~(1<<7);					//Bring the Clock line low for at least 100 microseconds.
	Delay(100);
	
	rPDATG &= ~(1<<6);					//Bring the Data line low.
	Delay(15);
	
	rPCONG = (rPCONG&(~(0xf<<12))) | (0x1<<12);		//Release the Clock line.

	while(rPDATG&0x80);					//Wait for the device to bring the Clock line low.

	for(i=0,j=0;i<8;i++)
	{
		if(cmd&0x01)					//Set/reset the Data line to send the first data bit.
		{
			rPDATG |= (1<<6);
			j++;
		}
		else
			rPDATG &= ~(1<<6);
		
		cmd >>=1;
		
		while(!(rPDATG&0x80));			//Wait for the device to bring Clock high.
		
		while(rPDATG&0x80);				//Wait for the device to bring Clock low.
	}
	
	if(!(j&0x01)) rPDATG |= (1<<6);		//Send parity bit
	else rPDATG &= ~(1<<6);
	
	while(!(rPDATG&0x80));				//Wait for the device to bring Clock high.
		
	while(rPDATG&0x80);					//Wait for the device to bring Clock low.

	rPDATG |= (1<<6);					//Send stop bit
	
	while(!(rPDATG&0x80));				//Wait for the device to bring Clock high.
		
	while(rPDATG&0x80);					//Wait for the device to bring Clock low.

	rPCONG = (rPCONG&(~(0xf<<12)));		//Release the Data line.
	
	while(rPDATG&0x40);					//Wait for the device to bring Data low.
	
	while(rPDATG&0x80);					//Wait for the device to bring Clock low.
	
	while((rPDATG&0xc0)!=0xc0);			//Wait for the device to release Data and Clock.
	
	rPCONG = (rPCONG&(~(0xf<<12))) | (0xc<<12);
	rINTMSK &= ~BIT_EINT4567;
}

void ps2_buffer_check(void)
{
	unsigned short dat, key;
	unsigned int i, ps2ack;
	static unsigned int end_state, exp_state;
	static unsigned char key_led;

//#define KEYBOARD_TEST	
#ifdef KEYBOARD_TEST
	while(buf_r_pt != buf_w_pt)
	{	
		Uart_Printf("%2.2x ",ps2_buffer[buf_r_pt]);
		buf_r_pt = (buf_r_pt+1)%MAX_PS2_BUF;
	}
#else
	while(buf_r_pt != buf_w_pt)
	{	
		dat = ps2_buffer[buf_r_pt];
		
		if(end_state)
		{
			switch(dat)
			{
				case KEY_LSHIFT_MASK :
					keys_lut[KEY_LSHIFT_INDEX].state = KEY_UP;
					break;
				case KEY_RSHIFT_MASK :
					keys_lut[KEY_RSHIFT_INDEX].state = KEY_UP;
					break;
				case KEY_CAPS_MASK :
					keys_lut[KEY_CAPS_INDEX].state = KEY_UP;
					break;
				default :
					if(exp_state) 
					{
						dat |= 0xe000;
						exp_state = 0;
					}
					for(i=0;(key1_lut[i].mask!=0)&&(key1_lut[i].mask!=dat);i++);
					if(key1_lut[i].mask)
					{
						key1_lut[i].state = KEY_UP;
						if(key1_lut[i].desc)
						{
							Uart_Printf(key1_lut[i].desc);
							Uart_Printf(" Up\n");
						}
					}
			}

			buf_r_pt = (buf_r_pt+1)%MAX_PS2_BUF;	
			end_state = 0;
			continue;
		}
		
		switch(dat)
		{
			case 0xf0 :
				end_state = 1;
				break;
			case 0xe0 :
				exp_state = 1;
				break;
			case KEY_LSHIFT_MASK :
				keys_lut[KEY_LSHIFT_INDEX].state=KEY_DOWN;
				break;
			case KEY_RSHIFT_MASK :
				keys_lut[KEY_RSHIFT_INDEX].state=KEY_DOWN;
				break;
			case KEY_CAPS_MASK :
				if(!(keys_lut[KEY_CAPS_INDEX].state))
				{	
					buf_r_pt = (buf_r_pt+1)%MAX_PS2_BUF;
					if(key_led&0x04) key_led&=0x03;
					else key_led|=0x04;
					ps2_command(0xed);
					ps2_waitack(1, &ps2ack);
					ps2_command(key_led);
					ps2_waitack(1, &ps2ack);
					keys_lut[KEY_CAPS_INDEX].state=KEY_DOWN;
					continue;
				}
				break;
			default :
				if(exp_state) 
				{
					dat |= 0xe000;
					exp_state = 0;
				}
				for(i=0,key=0;(key1_lut[i].mask!=0)&&(key1_lut[i].mask!=dat);i++);
				if(key1_lut[i].mask)
				{
					key1_lut[i].state=KEY_DOWN;
					if(keys_lut[KEY_LSHIFT_INDEX].state||keys_lut[KEY_RSHIFT_INDEX].state)
					{
						key=key1_lut[i].up_value;
						if((key_led&0x04) && (key>='A' && key<='Z'))
							key += 0x20;		
					}
					else
					{
						key=key1_lut[i].value;
						if((key_led&0x04) && (key>='a' && key<='z'))
							key -= 0x20;	
					}
					
					if(key1_lut[i].desc)
					{
						Uart_Printf(key1_lut[i].desc);
						Uart_Printf(" Down\n");
					}
					else
						Uart_SendByte(key);
				}
		}

		buf_r_pt = (buf_r_pt+1)%MAX_PS2_BUF;
	}
#endif
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩国产免费一区二区 | 久久免费看少妇高潮| 亚洲电影激情视频网站| 精品国产亚洲一区二区三区在线观看| 久久精品国产99国产精品| 亚洲日本护士毛茸茸| 日韩一区二区免费高清| 欧美伊人久久大香线蕉综合69 | 亚洲国产成人私人影院tom| 欧美tk丨vk视频| 26uuu精品一区二区三区四区在线| 欧美疯狂性受xxxxx喷水图片| 在线精品视频免费播放| 欧美性感一类影片在线播放| 欧美亚洲国产bt| 欧美精品一卡二卡| 精品噜噜噜噜久久久久久久久试看 | 91精品麻豆日日躁夜夜躁| 制服丝袜一区二区三区| 日韩精品一区二区三区中文不卡| 日韩一区二区三区视频| 久久久天堂av| 中文字幕一区二区三区乱码在线| 亚洲精品日产精品乱码不卡| 亚洲国产精品久久艾草纯爱| 蜜桃在线一区二区三区| 国产精品羞羞答答xxdd| 99精品热视频| 6080yy午夜一二三区久久| 精品久久久久久无| 1区2区3区精品视频| 亚洲成人精品一区二区| 国产精品中文欧美| 色av综合在线| 精品免费99久久| 亚洲欧洲一区二区在线播放| 视频一区国产视频| 国产成人欧美日韩在线电影| 欧洲精品一区二区| 国产日产欧美一区二区三区 | 蜜臀av性久久久久蜜臀aⅴ| 国产一区二区三区免费播放| 91激情在线视频| 久久婷婷成人综合色| 一区二区三区美女视频| 欧美日韩aaa| 91九色02白丝porn| 国产成人精品免费| 精品视频在线免费看| 国产亚洲午夜高清国产拍精品| 亚洲综合免费观看高清完整版在线 | 亚洲精品一线二线三线无人区| 亚洲欧洲一区二区在线播放| 久久精品国产精品青草| 欧美亚州韩日在线看免费版国语版| 精品av久久707| 天堂av在线一区| 在线视频欧美区| 国产精品免费看片| 韩国毛片一区二区三区| 欧美精品v国产精品v日韩精品 | 亚洲不卡在线观看| 99re热这里只有精品免费视频| 亚洲精品一区二区三区精华液| 亚洲成人av在线电影| 色又黄又爽网站www久久| 亚洲国产激情av| 国产一区二区三区四区五区入口 | 91极品视觉盛宴| 亚洲人精品一区| 波多野结衣中文字幕一区二区三区 | 欧美日韩aaa| 亚洲电影中文字幕在线观看| 91国产丝袜在线播放| 亚洲视频在线观看三级| 成人激情动漫在线观看| 久久精品夜色噜噜亚洲aⅴ| 久久99精品久久久久久国产越南 | 国产超碰在线一区| 国产亚洲欧美日韩在线一区| 韩国女主播一区二区三区| 久久综合精品国产一区二区三区 | 精品少妇一区二区三区在线播放| 亚洲国产va精品久久久不卡综合 | 日韩一区二区免费电影| 日本女优在线视频一区二区 | 国产在线乱码一区二区三区| 精品久久一区二区| 国产精品一区二区在线播放| 久久久久久久网| 国产精品一二三| 国产精品日日摸夜夜摸av| 色欧美片视频在线观看| 亚洲无人区一区| 日韩一区二区精品葵司在线| 国产精品一色哟哟哟| 中文字幕日韩一区二区| 欧美性猛交一区二区三区精品| 午夜视频一区二区| 精品国产凹凸成av人网站| 国产成人高清视频| 亚洲综合激情网| 精品国产91乱码一区二区三区| 国产精品性做久久久久久| 国产精品国产精品国产专区不蜜 | 国产成人av电影在线观看| 1024亚洲合集| 日韩视频一区在线观看| 国产成人自拍网| 亚洲最新视频在线观看| 精品久久一区二区| 91丨九色丨国产丨porny| 视频一区视频二区中文字幕| 国产欧美一区视频| 欧美色图在线观看| 国产二区国产一区在线观看| 一区二区三区在线观看欧美| 欧美成人一区二区三区| 色综合天天视频在线观看| 秋霞午夜鲁丝一区二区老狼| 国产精品人人做人人爽人人添| 日本高清不卡一区| 韩国成人精品a∨在线观看| 亚洲一二三专区| 国产欧美久久久精品影院| 欧美喷潮久久久xxxxx| 成人激情文学综合网| 精品一区二区av| 亚洲综合成人在线视频| 欧美高清一级片在线观看| 欧美精品久久99| 欧洲一区二区三区在线| 成人国产电影网| av成人老司机| 欧美一区二区福利在线| av一区二区三区在线| 一区二区高清免费观看影视大全| 不卡欧美aaaaa| 亚洲一区二区五区| 欧美刺激午夜性久久久久久久| 蜜桃视频一区二区三区| 精品伦理精品一区| 99v久久综合狠狠综合久久| 亚洲精品国产品国语在线app| 色呦呦国产精品| 国产亚洲精品aa| 国产电影一区二区三区| 激情文学综合丁香| 日韩电影在线看| 午夜视频一区二区| 亚洲国产裸拍裸体视频在线观看乱了 | 麻豆精品视频在线观看视频| 午夜欧美在线一二页| 性做久久久久久久免费看| 一区二区久久久久久| 亚洲久本草在线中文字幕| 中文字幕欧美一区| 一区二区三区在线视频播放| 亚洲欧美日韩一区二区三区在线观看| 国产精品久久久久一区二区三区共| 久久亚洲二区三区| 欧美—级在线免费片| 欧美激情一区在线| 亚洲欧洲美洲综合色网| 成人欧美一区二区三区小说| 亚洲男人天堂av| 亚洲一卡二卡三卡四卡五卡| 图片区小说区区亚洲影院| 日本午夜一本久久久综合| 蜜臀91精品一区二区三区 | 国产成人自拍高清视频在线免费播放| 久久99精品一区二区三区三区| 国内精品伊人久久久久影院对白| 久久国产夜色精品鲁鲁99| 国产成人在线视频网址| 99久久久久免费精品国产| 91精彩视频在线观看| 日韩一区二区三区视频在线观看| 2021中文字幕一区亚洲| 国产精品久久久久久久久免费樱桃| 亚洲私人影院在线观看| 午夜久久电影网| 国产不卡高清在线观看视频| 一本一本久久a久久精品综合麻豆| 欧洲一区在线电影| 久久在线观看免费| 亚洲婷婷综合色高清在线| 午夜精品久久久久久久| 国内成人自拍视频| 色综合色综合色综合| 欧美一区二区视频观看视频| 欧美国产在线观看| 日日摸夜夜添夜夜添国产精品 | 中文字幕第一页久久| 久久久久国产精品麻豆ai换脸| 九色综合狠狠综合久久| 日韩一本二本av| 亚洲欧美日韩在线播放| 国产一区二区在线影院| 欧美日韩精品欧美日韩精品一综合|