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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? altera_up_avalon_ps2.c

?? 花了半個月才改好的Atera DE1/DE2 ps2 IP 驅動核。放在FPGA工程目錄下可以直接使用。本IP能夠驅動PS/2鍵盤和鼠標。使用時只要調用HAL目錄下的文件即可以直接使用!
?? C
字號:
/******************************************************************************
*                                                                             *
* License Agreement                                                           *
*                                                                             *
* Copyright (c) 2007 Altera Corporation, San Jose, California, USA.           *
* All rights reserved.                                                        *
*                                                                             *
* Permission is hereby granted, free of charge, to any person obtaining a     *
* copy of this software and associated documentation files (the "Software"),  *
* to deal in the Software without restriction, including without limitation   *
* the rights to use, copy, modify, merge, publish, distribute, sublicense,    *
* and/or sell copies of the Software, and to permit persons to whom the       *
* Software is furnished to do so, subject to the following conditions:        *
*                                                                             *
* The above copyright notice and this permission notice shall be included in  *
* all copies or substantial portions of the Software.                         *
*                                                                             *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR  *
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,    *
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE *
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER      *
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING     *
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER         *
* DEALINGS IN THE SOFTWARE.                                                   *
*                                                                             *
* This agreement shall be governed in all respects by the laws of the State   *
* of California and by the laws of the United States of America.              *
*                                                                             *
* Altera does not recommend, suggest or require that this reference design    *
* file be used in conjunction or combination with any other product.          *
*                                                                             *
******************************************************************************/

#include <errno.h>

#include <priv/alt_file.h>

#include "altera_up_avalon_ps2.h"
#include "altera_up_avalon_ps2_regs.h"

#define PS2_ACK 	(0xFA)


//////////////////////////////////////////////////////////////////////////////////////////////
// Internal Functions
alt_u8 read_RI_bit(alt_u32 ctrl_reg)
{
	alt_u8 ri = (alt_u8) ((ctrl_reg & ALT_UP_PS2_PORT_CONTROL_RI_MSK) >> ALT_UP_PS2_PORT_CONTROL_RI_OFST);
	return ri;
}

alt_u8 read_RE_bit(alt_u32 ctrl_reg)
{
	alt_u8 re = (alt_u8) ((ctrl_reg & ALT_UP_PS2_PORT_CONTROL_RE_MSK) >> ALT_UP_PS2_PORT_CONTROL_RE_OFST);
	return re;
}

alt_u8 read_CE_bit(alt_u32 ctrl_reg)
{
	alt_u8 re = (alt_u8) ((ctrl_reg & ALT_UP_PS2_PORT_CONTROL_CE_MSK) >> ALT_UP_PS2_PORT_CONTROL_CE_OFST);
	return re;
}

alt_u16 read_num_bytes_available(alt_u32 data_reg)
{
	alt_u16 ravail = (alt_u16)((data_reg & ALT_UP_PS2_PORT_DATA_REG_RAVAIL_MSK ) >> ALT_UP_PS2_PORT_DATA_REG_RAVAIL_OFST);
	return ravail;
}

alt_u8 read_data_byte(alt_u32 data_reg)
{
	alt_u8 data = (alt_u8) ( (data_reg & ALT_UP_PS2_PORT_DATA_REG_DATA_MSK) >> ALT_UP_PS2_PORT_DATA_REG_DATA_OFST) ;
	return data;
}

//////////////////////////////////////////////////////////////////////////////////////////////
// HAL Functions
void alt_up_ps2_init(alt_up_ps2_dev *ps2)
{
	// initialize the device
	alt_u8 byte;
	//send the reset request, wait for ACK
	int status = alt_up_ps2_write_data_byte_with_ack(ps2, 0xff);
	if (status == 0)
	{
		// reset succeed, now try to get the BAT result, AA means passed
		status = alt_up_ps2_read_data_byte(ps2, &byte);
		if (status == 0 && byte == 0xAA)
		{
			//get the 2nd byte
			status = alt_up_ps2_read_data_byte(ps2, &byte);
			if (status == -ETIMEDOUT)
			{
				//for keyboard, only 2 bytes are sent(ACK, PASS/FAIL), so timeout
				ps2->device_type = PS2_KEYBOARD;
			}
			else if (status == 0 && byte == 0x00)
			{
				//for mouse, it will sent out 0x00 after sending out ACK and PASS/FAIL.
				ps2->device_type = PS2_MOUSE;
			}
		}
	}
}

int alt_up_ps2_write_data_byte(alt_up_ps2_dev *ps2, alt_u8 byte)
{
	//note: data are only located at the lower 8 bits
	//note: the software send command to the PS2 peripheral through the data
	//		register rather than the control register
	IOWR_ALT_UP_PS2_PORT_DATA(ps2->base, byte);
	alt_u32 ctrl_reg = IORD_ALT_UP_PS2_PORT_DATA(ps2->base);
	if (read_CE_bit(ctrl_reg))
	{
		//CE bit is set --> error occurs on sending commands
		return -EIO;
	}
	return 0;
}

int alt_up_ps2_wait_for_ack(alt_up_ps2_dev *ps2)
{
	alt_u8 data = 0;
	alt_u8 status = 0;
	do
	{
		status = alt_up_ps2_read_data_byte(ps2, &data); 
		if ( status == 0)
		{
			if (data == PS2_ACK)
				return 0;
		}
		else 
		{
			return status;
		}
	} while(1);
	return -ETIMEDOUT;
}

int alt_up_ps2_write_data_byte_with_ack(alt_up_ps2_dev *ps2, alt_u8 byte)
{
	int send_status = alt_up_ps2_write_data_byte(ps2, byte);
	if ( send_status != 0)
		// return on sending error
		return send_status;

	int ack_status = alt_up_ps2_wait_for_ack(ps2);
	return ack_status;
}

int alt_up_ps2_read_data_byte(alt_up_ps2_dev *ps2, alt_u8 *byte)
{
	alt_u32 data_reg = 0; 
	alt_u16 num = 0; 
	alt_u32 count = 0;
	do {
		count++;
		data_reg = IORD_ALT_UP_PS2_PORT_DATA(ps2->base);
		num = read_num_bytes_available(data_reg);
		if (num > 0)
		{
			*byte = read_data_byte(data_reg);
			return 0;
		}
		//timeout = 0 means to disable the timeout
		if ( ps2->timeout != 0 && count > ps2->timeout)
		{
			return -ETIMEDOUT;
		}
	} while (1);
}

void alt_up_ps2_clear_fifo(alt_up_ps2_dev *ps2)
{
	// The DATA byte of the data register will be automatically cleared after a read
	// So we simply keep reading it until there are no available bytes
	alt_u16 num = 0;
	alt_u32 data_reg = 0;
	do
	{
		// read the data register (the DATA byte is cleared)
		data_reg = IORD_ALT_UP_PS2_PORT_DATA(ps2->base);
		// get the number of available bytes from the RAVAIL part of data register
		num = read_num_bytes_available(data_reg);
	} while (num > 0);
}

//////////////////////////////////////////////////////////////
// FD Functions
int alt_up_ps2_read_fd (alt_fd* fd, char* ptr, int len)
{
	alt_up_ps2_dev *ps2 = (alt_up_ps2_dev*) fd->dev;
	int status = 0;
	int count = 0;
	while (count < len);
	{
		status = alt_up_ps2_read_data_byte(ps2, ptr++);
		if (status!=0)
			return count;
		count++;
	} 
	return count;
}

int alt_up_ps2_write_fd (alt_fd* fd, const char* ptr, int len)
{
	alt_up_ps2_dev *ps2 = (alt_up_ps2_dev*) fd->dev;
	int status = 0;
	int count = 0;
	while (count < len)
	{
		status = alt_up_ps2_write_data_byte(ps2, *(ptr++) );
		if (status!=0)
			return count;
		count++;
	}
	return count;
}

alt_up_ps2_dev* alt_up_ps2_open_dev(const char* name)
{
  // find the device from the device list 
  // (see altera_hal/HAL/inc/priv/alt_file.h 
  // and altera_hal/HAL/src/alt_find_dev.c 
  // for details)
  alt_up_ps2_dev *dev = (alt_up_ps2_dev*)alt_find_dev(name, &alt_dev_list);

  return dev;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久毛片av大全日韩| 久久蜜桃av一区精品变态类天堂| www.成人在线| 国产精一品亚洲二区在线视频| 久久精品国产精品亚洲红杏| 免费成人结看片| 久久国产精品一区二区| 久久99久久99精品免视看婷婷| 久久97超碰国产精品超碰| 狠狠狠色丁香婷婷综合激情| 国产一区欧美二区| 成人午夜av在线| jiyouzz国产精品久久| 欧美亚洲综合色| 欧美剧在线免费观看网站| 精品视频一区三区九区| 欧美精品一卡二卡| 337p粉嫩大胆色噜噜噜噜亚洲 | 午夜精品久久久久久久99水蜜桃| 一区二区三区欧美在线观看| 久久狠狠亚洲综合| 狠狠色狠狠色综合日日91app| 丰满放荡岳乱妇91ww| 色综合婷婷久久| 欧美一区二区在线看| 久久毛片高清国产| 一区二区三区精品在线| 免费成人小视频| 成人av网址在线| 91精品在线麻豆| 国产精品免费视频观看| 丝袜国产日韩另类美女| 国产69精品久久777的优势| 色哟哟一区二区三区| 欧美电影免费提供在线观看| 国产精品久久久久9999吃药| 免费久久99精品国产| 成人精品gif动图一区| 欧美精品在线一区二区| 国产精品久久久久久久久久久免费看 | 中文字幕一区二区三区四区| 日韩成人免费看| av激情成人网| 日韩欧美一区二区在线视频| 亚洲欧美视频在线观看视频| 精品在线播放午夜| 欧美欧美欧美欧美| 国产精品国产三级国产a| 日本vs亚洲vs韩国一区三区二区 | 国产精品99久久久久久久女警| av电影天堂一区二区在线| 欧美一区二区日韩一区二区| 亚洲精品国产a久久久久久| 国产在线精品一区二区不卡了| 欧美三级电影网站| 综合色天天鬼久久鬼色| 国产精品1区2区| 日韩久久久精品| 午夜精品久久久久久久99水蜜桃| 91一区二区在线观看| 国产网站一区二区三区| 韩日欧美一区二区三区| 91精品国产综合久久香蕉麻豆 | 欧美午夜理伦三级在线观看| 欧美激情一区二区三区不卡| 国产一区二区三区综合| 日韩精品最新网址| 日本中文一区二区三区| 色88888久久久久久影院按摩| 国产精品麻豆视频| 91蝌蚪国产九色| 国产欧美一区二区三区鸳鸯浴 | 99天天综合性| 国产精品国产三级国产| 国产福利一区在线观看| 国产欧美日韩不卡| 成人晚上爱看视频| 欧美高清一级片在线观看| 成人免费不卡视频| 国产精品三级视频| 波多野结衣中文一区| 国产精品久久久久久久久久免费看| 成人aa视频在线观看| 日韩伦理电影网| 欧洲亚洲国产日韩| 日日摸夜夜添夜夜添国产精品| 欧美精品在线观看一区二区| 美女精品一区二区| 久久精品亚洲麻豆av一区二区| 国产乱理伦片在线观看夜一区| 欧美国产日韩a欧美在线观看| 成人妖精视频yjsp地址| 自拍偷拍国产精品| 欧美美女黄视频| 久久99国产精品尤物| 国产亚洲欧美一级| 日本韩国精品一区二区在线观看| 亚洲图片欧美色图| 精品成人a区在线观看| 成人性生交大片免费看中文| 一个色妞综合视频在线观看| 7777女厕盗摄久久久| 国产成人a级片| 亚洲国产一区在线观看| 欧美哺乳videos| 色综合久久久久综合体| 麻豆国产欧美一区二区三区| 国产丝袜美腿一区二区三区| 欧美在线免费视屏| 久久99精品国产麻豆婷婷| 成人免费小视频| 欧美一级理论性理论a| 成人av在线电影| 麻豆精品一二三| 中文字幕一区三区| 欧美一区二区精品在线| 成年人网站91| 久久精工是国产品牌吗| 亚洲欧洲制服丝袜| 精品少妇一区二区三区在线播放| 91丝袜美腿高跟国产极品老师| 蜜桃精品视频在线| 136国产福利精品导航| 日韩免费观看高清完整版| 色视频成人在线观看免| 国产高清不卡二三区| 日韩电影免费一区| 亚洲免费在线视频| 国产欧美精品国产国产专区| 337p亚洲精品色噜噜| 在线观看国产一区二区| 国产精品一区在线观看你懂的| 热久久国产精品| 亚洲国产乱码最新视频| 国产精品国产三级国产有无不卡| 精品美女被调教视频大全网站| 欧美日韩一区二区不卡| 91精品国产综合久久福利| 91官网在线观看| jlzzjlzz亚洲女人18| 大胆欧美人体老妇| 国产精品一品二品| 国产剧情av麻豆香蕉精品| 免费高清在线一区| 蜜桃视频一区二区三区| 免费高清在线视频一区·| 日韩激情中文字幕| 亚洲v精品v日韩v欧美v专区| 亚洲一区二区综合| 亚洲激情自拍视频| 亚洲一区二区精品视频| 亚洲国产综合人成综合网站| 亚洲制服丝袜一区| 亚洲精品国产一区二区精华液| 亚洲久草在线视频| 一二三四区精品视频| 视频一区二区不卡| 日韩av一级片| 精品亚洲成a人| 成人精品高清在线| 91久久精品一区二区二区| 色婷婷国产精品| 欧美日韩日本视频| 欧美成人aa大片| 久久精品免费在线观看| 国产精品第13页| 亚洲一区在线观看网站| 欧美a级理论片| 国产剧情一区二区三区| 99久久99久久免费精品蜜臀| 欧美影院精品一区| 欧美一级精品在线| 亚洲国产精品传媒在线观看| 国产精品不卡视频| 亚洲成人av在线电影| 久久国产精品第一页| 国产精品一二三区在线| 91日韩在线专区| 91精品国产欧美一区二区18| 久久久亚洲高清| 亚洲精品国产a| 老司机一区二区| 成年人国产精品| 欧美一级黄色片| 亚洲色图色小说| 经典三级视频一区| www.欧美.com| 欧美电影精品一区二区 | 色吧成人激情小说| 欧美一区二区在线播放| 国产色婷婷亚洲99精品小说| 一区二区三区91| 国产一区二区剧情av在线| 色综合久久久久网| 26uuuu精品一区二区| 亚洲妇熟xx妇色黄| 粉嫩aⅴ一区二区三区四区 | 成人av午夜电影| 日韩精品影音先锋| 一区二区三区中文字幕电影|