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

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

?? arm7279_driver.c

?? 簡單的鍵盤驅動程序
?? C
字號:
?
#include <linux/config.h>
#include <linux/utsname.h>
#include <linux/kernel.h>
#include <linux/major.h>
#include <linux/string.h>
#include <linux/fcntl.h>
#include <linux/slab.h>
#include <linux/timer.h>#include <linux/sched.h>
#include <linux/tty.h>
#include <linux/module.h>
#include <linux/init.h>
#include <asm-arm/arch-s3c2410/irqs.h>
#include <asm-arm/mach/irq.h>
#include <asm/hardware.h>
#include <asm/io.h>
#include <asm/irq.h>
#include <asm/system.h>

#include <linux/poll.h>
#include <asm/arch/io.h>

/********************************** 送給HD7279指令 *************************************/

#define  cmd_reset 0xa4
#define  cmd_test  0xbf
#define  cmd_read  0x15
#define  decode1   0xc8


/********************************** 函數定義 ********************************************/

void          long_delay   (void);
void          short_delay  (void);
void          write7279    (unsigned char,unsigned char);
unsigned char read7279     (unsigned char);
void          send_byte    (unsigned char);
unsigned char receive_byte (void);

int kbd_isopen;unsigned char kbd_buf = 0xFF;
/******************************** HD7279A的使用原理說明 ***************************************/
/*
--HD7279A的數據是通過CPLD作為與S3C241O通訊的接口,CPU通過在相應地址上的讀寫CPLD,即可與HD7279
  進行有效的通訊。由于CPLD是通過CPU的NGCS4選擇的,所以向CPLD讀寫均需要使用NGCS4。下面為具體的
  使用方法。
  
--向地址 0x20000004 里寫0X01,表示選中HD7279,即CS7279='0
--從地址 0x20000004 中寫0x02,表示未選中HD7279,即CS7279='1
--向地址 0x20000004 里寫0x05,表示數據流從CPLD到HD7279
--從地址 0x20000004 中寫0x06,表示數據流從HD7279到CPLD
*/
/******************************** 7279時鐘模擬信號 ***************************************/

        #define clrcs1  	        *((volatile unsigned char *)(CPLD_BASE + 0x4)) = 0x01
	#define setcs1      		*((volatile unsigned char *)(CPLD_BASE + 0x4)) = 0x02

             #define s_clr  	                *((volatile unsigned char *)(CPLD_BASE + 0x4)) = 0x05
	#define s_set      		*((volatile unsigned char *)(CPLD_BASE + 0x4)) = 0x06
	#define clk     		(GPIO_MODE_OUT | GPIO_PULLUP_EN | GPIO_E13)
	#define dat             	(GPIO_MODE_OUT | GPIO_PULLUP_EN | GPIO_E12)
                #define setclk                  write_gpio_bit(clk, 1)        #define clrclk                  write_gpio_bit(clk, 0)         #define setdat                  write_gpio_bit(dat, 1)        #define clrdat                  write_gpio_bit(dat, 0)
//CPLD_BASE的定義在/includ/asm-arm/arch-s3c2410/smdk.h內.#define KEYBOARD_MAJOR 50
#define Kbd7279_GETKEY 0
int KeyValue;
/*
*************************************************************************************************************
- 函數名稱 : Kbd7279_Close
- 函數說明 : 關閉鍵盤設備
- 輸入參數 : 無
- 輸出參數 : 0
*************************************************************************************************************
*/
static int Kbd7279_Close(struct inode * inode, struct file * file){
         printk("Close successful\n");
	kbd_isopen = 0;
	return 0;}
/*
*************************************************************************************************************
- 函數名稱 : Kbd7279_Open
- 函數說明 : 打開鍵盤設備
- 輸入參數 : 無
- 輸出參數 : 0
*************************************************************************************************************
*/static int Kbd7279_Open(struct inode * inode, struct file * file){ printk("Open successful\n");	      kbd_isopen++;
      return 0;}/**************************************************************************************************************- 函數名稱 : Kbd7279_Read- 函數說明 : 打開鍵盤設備- 輸入參數 : 無- 輸出參數 : 0**************************************************************************************************************/
static int Kbd7279_Read(struct file *fp, char *buf, size_t count)
{    put_user(kbd_buf, buf);    kbd_buf = 0xFF;    return 1;
}
/*
*************************************************************************************************************
- 函數名稱 : kbd7279_getkey
- 函數說明 : 獲取一個鍵值
- 輸入參數 : 無
- 輸出參數 : -1
*************************************************************************************************************
*/static int kbd7279_getkey(void){	int  i,j;
	enable_irq(33);         
	KeyValue = 0xff;	for (i=0;i<3000;i++)	     for (j=0;j<900;j++);        return KeyValue; //如果有按鍵按下,返回鍵值}

/*
*************************************************************************************************************
- 函數名稱 : Kbd7279_ISR
- 函數說明 : 鍵盤服務子程序
- 輸入參數 : irq,dev_id,regs
- 輸出參數 : -1
*************************************************************************************************************
*/static void Kbd7279_ISR(int irq,void* dev_id,struct pt_regs * regs){	int i;
	disable_irq(33);        for(i=0;i<100;i++);
  	KeyValue = read7279(cmd_read);
		  switch (KeyValue)	    {	    case 8:	      KeyValue = 0x4;	      break;            case 9:              KeyValue = 0x5;	      break;            case 10:              KeyValue = 0x6;              break;            case 11:              KeyValue = 0x7;              break;            case 4:	      KeyValue = 0x8;              break;            case 5:              KeyValue = 0x9;              break;            case 6:              KeyValue = 0xa;              break;            case 7:              KeyValue = 0xb;              break;            default:              break;	    }        write7279(decode1+5,KeyValue/16*8);
        write7279(decode1+4,KeyValue & 0x0f);
	kbd_buf = (unsigned char)KeyValue;
        printk("KeyValue = %d\n",KeyValue); }
/*
*************************************************************************************************************
- 函數名稱 : Setup_kbd7279
- 函數說明 : 鍵盤設備的硬件初始化函數
- 輸入參數 : 無
- 輸出參數 : 無
*************************************************************************************************************
*/void Setup_Kbd7279(void){	int i;   
        BWSCON &=(~(3<<16));  // set the bank4 databus is 8 bitwidth	/* GPE13: CLK, OUTPUT */	set_gpio_ctrl(clk);	/* GPE12: DATA, OUTPUT */	set_gpio_ctrl(dat);                             	set_gpio_ctrl(GPIO_F5|GPIO_MODE_EINT);
           //set EINT MODE        set_external_irq(33,2,0);                           //set falling edge triger        for(i=0;i<100;i++);}
							//其他選項省略/*
*************************************************************************************************************
- 函數名稱 : Kbd7279_Ioctl
- 函數說明 : 鍵盤控制
- 輸入參數 : 無
- 輸出參數 : 0
*************************************************************************************************************
*/static int Kbd7279_Ioctl(struct inode *inode,struct file *file,                         unsigned int cmd, unsigned long arg){//	int i;	switch(cmd) 	{		case Kbd7279_GETKEY:
			 return kbd7279_getkey(); 	
        	default:                         printk("Unkown Keyboard Command ID.\n");    }    return 0;}

/*
*************************************************************************************************************
- 函數名稱 : struct file_operations Uart2_fops
- 函數說明 : 文件結構
- 輸入參數 : 無
- 輸出參數 : 無
*************************************************************************************************************
*/
struct file_operations Kbd7279_fops = 
{	open:	  Kbd7279_Open,  //打開設備文件	ioctl:	  Kbd7279_Ioctl, //設備文件其他操作	release:    Kbd7279_Close, //關閉設備文件	read:	  Kbd7279_Read,  //讀取設備文件};

/*
*************************************************************************************************************
- 函數名稱 : int Kbd7279Init(void)
- 函數說明 : 注冊鍵盤設備,調用初始化函數
- 輸入參數 : 無
- 輸出參數 : -1
*************************************************************************************************************
*/int __init Kbd7279_Init(void){   	int     result;	printk("\n Registering Kbdboard Device\t--- >\t");	result = register_chrdev(KEYBOARD_MAJOR, "Kbd7279", &Kbd7279_fops);//注冊設備	
	if (result<0)	{		printk(KERN_INFO"[FALLED: Cannot register Kbd7279_driver!]\n");		return result;	}	else		printk("[OK]\n");	
	printk("Initializing HD7279 Device\t--- >\t");	Setup_Kbd7279();	
	if (request_irq(33,Kbd7279_ISR,0,"Kbd7279","88"))	{   		printk(KERN_INFO"[FALLED: Cannot register Kbd7279_Interrupt!]\n");		return -EBUSY;	}	else		printk("[OK]\n");	printk("Kbd7279 Driver Installed.\n");	return 0;}

								//其他選項省略
/*
*************************************************************************************************************
- 函數名稱 : void long_delay(void)
- 函數說明 : 長延時程序
- 輸入參數 : 無
- 輸出參數 : 無
*************************************************************************************************************
*/
void long_delay(void)
{ 
	unsigned char i;
   	for (i=0;i<250;i++)
   	{
	}
	
}

/*
*************************************************************************************************************
- 函數名稱 : void short_delay(void)
- 函數說明 : 短延時程序
- 輸入參數 : 無
- 輸出參數 : 無
*************************************************************************************************************
*/
void short_delay(void)
{ 
	int i;
  	for(i=0;i<150;i++)
  	{
  	}

}

/*
*************************************************************************************************************
- 函數名稱 : void send_byte(unsigned char out_byte )
- 函數說明 : 向7279發送一個字節的程序
- 輸入參數 : out_byte
- 輸出參數 : 無
*************************************************************************************************************
*/
void send_byte(unsigned char out_byte )
{
	unsigned short  i;
	
	clrcs1;
	  s_clr;  	long_delay();
  	
  	for (i=0;i<8;i++)
  	{   
  		if (0x80 == (out_byte & 0x80))  
      	{ 
      		setdat;
      	}
      	else
      	{
      		clrdat;
      	}
      	
      	setclk;
      	short_delay();
      	clrclk;
      	short_delay();
      	
      	out_byte <<= 1;
  	}
  	short_delay();
  	clrdat;
  
 }
 
/*
*************************************************************************************************************
- 函數名稱 : unsigned char receive_byte (void)
- 函數說明 : 向7279接收一個字節的程序
- 輸入參數 : 無
- 輸出參數 : in_byte
*************************************************************************************************************
*/
unsigned char receive_byte (void)    
{
   	unsigned char i,in_byte=0;   	   	s_set;	set_gpio_ctrl(GPIO_MODE_IN | GPIO_PULLUP_EN | GPIO_E12);   	long_delay();    for(i=0;i<8;i++)    {    	setclk;     	short_delay();    	in_byte <<= 1;    	if (read_gpio_bit(GPIO_E12)&0x01)    	{     		in_byte |= 1;    	} 	clrclk;    	short_delay();	    }    s_clr;    set_gpio_ctrl(GPIO_MODE_OUT | GPIO_PULLUP_EN | GPIO_E12);    clrdat;    short_delay();       return(in_byte);}
 
/*
*************************************************************************************************************
- 函數名稱 : unsigned char read7279(unsigned char comand)
- 函數說明 : 讀鍵盤指令程序
- 輸入參數 : 無
- 輸出參數 : in_byte
*************************************************************************************************************
*/    
unsigned char read7279(unsigned char comand)
{
  	send_byte(comand);
   	return (receive_byte());
}

/*
*************************************************************************************************************
- 函數名稱 : void write7279 (unsigned char cmd, unsigned char dat)
- 函數說明 : 寫鍵盤指令程序
- 輸入參數 : 無
- 輸出參數 : in_byte
*************************************************************************************************************
*/   
void write7279 (unsigned char cmd, unsigned char date)
{
	send_byte(cmd);
 	send_byte(date);
}



/*
*************************************************************************************************************
- 函數名稱 : Kbd7279_Close
- 函數說明 : 關閉鍵盤設備
- 輸入參數 : 無
- 輸出參數 : 0
*************************************************************************************************************
*/
void __exit Kbd7279_Exit(void){        unregister_chrdev(KEYBOARD_MAJOR, "Kbd7279");        free_irq(33,"88");        send_byte(cmd_reset);        printk("You have uninstall The Kbd7279 Driver succesfully,\n if you want to install again,please use the insmod command \n");
}
module_init(Kbd7279_Init);
module_exit(Kbd7279_Exit);
/*
*************************************************************************************************************
*-						結束文件                                                   -*
*************************************************************************************************************
*/
    



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品一区二区男女羞羞无遮挡| 国产精品欧美久久久久无广告| 视频一区二区不卡| 久久国产夜色精品鲁鲁99| 99精品视频免费在线观看| 欧美一区二区网站| 中文字幕亚洲在| 狠狠色狠狠色综合日日91app| 在线观看精品一区| 国产精品久久久久久户外露出| 五月天激情综合网| 色婷婷久久久亚洲一区二区三区| 久久天天做天天爱综合色| 亚洲自拍都市欧美小说| 91视频com| 成人欧美一区二区三区1314| 国产一区二区三区免费| 日韩美女在线视频| 日韩制服丝袜先锋影音| 欧美优质美女网站| 亚洲精品高清在线| av电影在线观看一区| 国产天堂亚洲国产碰碰| 韩国女主播一区| 精品国产成人系列| 久久99热这里只有精品| 欧美一区二区三区色| 香蕉乱码成人久久天堂爱免费| 91丨九色丨蝌蚪丨老版| 日韩伦理免费电影| 99麻豆久久久国产精品免费优播| 欧美国产视频在线| 国产91清纯白嫩初高中在线观看| 精品福利av导航| 久久99精品一区二区三区| 日韩欧美视频在线| 色素色在线综合| 亚洲美女偷拍久久| 色婷婷国产精品| 亚洲尤物在线视频观看| 欧美午夜精品久久久久久超碰 | 成人av免费观看| 亚洲国产激情av| 91在线观看污| 樱桃视频在线观看一区| 欧美视频一区二区三区在线观看| 亚洲国产成人tv| 日韩一区二区在线观看视频播放| 美脚の诱脚舐め脚责91 | 欧美美女直播网站| 久久精品国产色蜜蜜麻豆| 26uuu另类欧美亚洲曰本| 国产91精品露脸国语对白| 中文字幕一区二区三区在线观看| 色综合久久久久综合体| 亚洲国产精品一区二区久久恐怖片 | 成人深夜视频在线观看| 亚洲欧洲中文日韩久久av乱码| 欧美色中文字幕| 久久99国产精品免费| 国产欧美日韩中文久久| 在线免费不卡电影| 久久精品国产77777蜜臀| 中文字幕国产精品一区二区| 91高清视频免费看| 美女一区二区视频| 国产精品免费视频网站| 欧美午夜影院一区| 激情文学综合丁香| 一区二区国产视频| 久久久久国产免费免费| 欧美三级乱人伦电影| 国产一区二区三区综合| 亚洲一区二区三区美女| 久久久久国产免费免费| 欧美三级蜜桃2在线观看| 国产高清不卡二三区| 亚洲国产成人av网| 国产精品久久三| 日韩欧美国产一区二区在线播放| aaa亚洲精品| 精品一区二区av| 天天综合天天做天天综合| 中文字幕不卡的av| 91.com在线观看| 欧美一a一片一级一片| 国产jizzjizz一区二区| 日本vs亚洲vs韩国一区三区| 国产精品福利av| 欧美电影精品一区二区| 欧美婷婷六月丁香综合色| 精品一二三四区| 色综合天天综合在线视频| 精品亚洲成a人| 亚洲第一成年网| 日韩理论片在线| 亚洲国产精品黑人久久久| 精品日韩成人av| 欧美群妇大交群的观看方式| 99精品欧美一区二区三区小说 | 亚洲国产成人porn| 亚洲日本在线天堂| 欧美韩国日本不卡| 精品免费99久久| 欧美日韩精品是欧美日韩精品| youjizz国产精品| 日本欧美久久久久免费播放网| 麻豆免费精品视频| 欧美激情一区在线| 在线91免费看| 国产精品久久影院| 国产电影一区在线| 五月激情六月综合| 日韩精品免费专区| 国产欧美日韩在线看| 亚洲精品成人悠悠色影视| 亚洲精品乱码久久久久久久久| 日韩精品久久理论片| 懂色av一区二区三区免费看| 成人精品一区二区三区四区| 欧美日韩一区视频| 国产三级欧美三级| 亚洲综合在线免费观看| 国产一区二区91| 欧美视频一区二区在线观看| 国产亚洲午夜高清国产拍精品| 一区二区三国产精华液| 国产在线日韩欧美| 欧美一区二区网站| 精品一区二区在线播放| 97久久精品人人做人人爽 | 黑人巨大精品欧美黑白配亚洲| 色综合久久88色综合天天6| 精品99久久久久久| 亚洲国产综合91精品麻豆| 国产精品99久久久| 欧美高清dvd| 亚洲精品国产品国语在线app| 狠狠狠色丁香婷婷综合激情| 欧美狂野另类xxxxoooo| 亚洲欧美另类久久久精品| 国产一区二区在线免费观看| 91.com在线观看| 亚洲一区二区三区四区的| 99麻豆久久久国产精品免费优播| 久久久久久久久伊人| 蜜桃在线一区二区三区| 欧美色综合影院| 亚洲一区二区三区免费视频| 91丝袜美女网| 中文字幕中文字幕一区二区| 国产乱子轮精品视频| 日韩丝袜美女视频| 欧美aaa在线| 欧美一区二区三区男人的天堂| 亚洲一区二区在线播放相泽| 色哟哟国产精品| 中文字幕日韩av资源站| 成人一级片网址| 国产精品网站导航| 国产a区久久久| 国产精品免费网站在线观看| 国产精品99久久久| 欧美国产日产图区| 国产精品18久久久久久久久| 日韩欧美黄色影院| 理论片日本一区| 欧美精品一区二区久久婷婷| 免费成人深夜小野草| 日本高清不卡aⅴ免费网站| 日韩专区在线视频| 678五月天丁香亚洲综合网| 欧美午夜电影一区| 日日骚欧美日韩| 国产日韩欧美综合在线| 91蝌蚪porny| 成人性色生活片免费看爆迷你毛片| 中文字幕日韩一区| 久久九九久精品国产免费直播| 99久久精品国产麻豆演员表| 日韩精品免费视频人成| 久久一留热品黄| 精品少妇一区二区三区免费观看| 欧美国产亚洲另类动漫| 另类欧美日韩国产在线| 久久综合资源网| 成人精品一区二区三区中文字幕| 国产精品美女久久久久久久久久久| 99精品欧美一区二区三区小说| 夜夜嗨av一区二区三区中文字幕 | 国产精品香蕉一区二区三区| 久久美女艺术照精彩视频福利播放| 国产盗摄视频一区二区三区| 中文字幕亚洲一区二区va在线| 91精品福利在线| 人人超碰91尤物精品国产| 久久这里只有精品首页| 欧美一级二级三级乱码| 国产成人免费高清| 一区二区三区精品视频在线|