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

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

?? arm7279_driver.c

?? 嵌入式Linux鍵盤驅動程序,內含驅動程序和測試程序以及Makefile文件,適合初學者.
?? 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一区二区三区免费野_久草精品视频
日韩美女天天操| 亚洲一区二区五区| 国产精品传媒视频| 亚洲成av人片一区二区三区| 国产一区二区在线视频| 91在线小视频| 精品久久久久久亚洲综合网| 亚洲精品国产a| 加勒比av一区二区| 欧美三级电影精品| 国产精品免费人成网站| 男女视频一区二区| 欧美午夜影院一区| 国产欧美一区二区精品忘忧草| 亚洲高清免费视频| 成人午夜精品在线| 欧美xxxx老人做受| 亚洲va韩国va欧美va| 97久久人人超碰| 久久综合五月天婷婷伊人| 亚洲一区二区三区四区在线免费观看 | 成人99免费视频| 精品三级av在线| 亚洲一区二区四区蜜桃| 成人av午夜影院| 久久青草国产手机看片福利盒子| 日韩精品一卡二卡三卡四卡无卡| 97国产一区二区| 国产情人综合久久777777| 日韩精品三区四区| 欧美色综合网站| 夜夜爽夜夜爽精品视频| 色婷婷综合久色| 一区在线中文字幕| 成人黄色免费短视频| 国产亚洲一区二区在线观看| 九色综合狠狠综合久久| 欧美一级在线视频| 免费成人在线播放| 欧美一二三区精品| 蜜乳av一区二区三区| 欧美一区二区在线视频| 日韩专区欧美专区| 91麻豆精品久久久久蜜臀| 午夜欧美电影在线观看| 91久久久免费一区二区| 亚洲综合丝袜美腿| 欧美日韩一区二区三区高清| 一区二区成人在线观看| 欧美日韩一区 二区 三区 久久精品| 1000精品久久久久久久久| 91在线云播放| 亚洲成在人线在线播放| 在线综合+亚洲+欧美中文字幕| 亚洲高清三级视频| 日韩手机在线导航| 国产精品1024久久| 亚洲欧洲精品一区二区精品久久久| 91香蕉视频黄| 午夜精品福利一区二区蜜股av| 7777精品伊人久久久大香线蕉的| 日韩精品福利网| 亚洲精品在线观| 不卡视频在线观看| 亚洲成人手机在线| 欧美变态凌虐bdsm| av电影在线观看一区| 亚洲国产sm捆绑调教视频 | 欧美一区二区福利在线| 极品少妇一区二区| 中文字幕一区二区三区在线观看| 91香蕉视频mp4| 日韩精品色哟哟| 久久久久国产精品免费免费搜索| 99国产精品视频免费观看| 亚洲福利视频三区| 国产亚洲欧美日韩俺去了| aaa国产一区| 奇米一区二区三区| 国产精品久久久久国产精品日日| 欧美三区在线视频| 国产91丝袜在线播放| 亚洲不卡在线观看| 日本一区二区免费在线观看视频| 欧美日韩夫妻久久| 成人影视亚洲图片在线| 亚洲观看高清完整版在线观看| 国产亚洲欧美一级| 91精品国产综合久久久蜜臀粉嫩 | 有码一区二区三区| 亚洲精品在线观看视频| 欧美在线免费播放| 国产99精品国产| 久久疯狂做爰流白浆xx| 尤物在线观看一区| 国产女同性恋一区二区| 91精品国产一区二区人妖| 色综合一个色综合亚洲| 国产成人精品免费一区二区| 青青草精品视频| 一区二区三区欧美| 欧美激情艳妇裸体舞| 91精品国产欧美一区二区| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 国产精品久久久久久久蜜臀| 日韩欧美一二三四区| 欧美在线视频你懂得| 成人理论电影网| 国产精品夜夜嗨| 久久99国产乱子伦精品免费| 亚洲福利视频导航| 一区二区三区欧美| 亚洲蜜臀av乱码久久精品| 日本一区二区三区电影| 久久久噜噜噜久久人人看| 欧美一级免费大片| 欧美美女一区二区在线观看| 欧洲生活片亚洲生活在线观看| av色综合久久天堂av综合| 国产精品99久久久久久久女警| 美国十次综合导航| 日日夜夜精品视频天天综合网| 亚洲制服丝袜av| 亚洲一区二区在线视频| 亚洲精品第1页| 一区二区在线观看视频| 亚洲免费观看高清| 精品一区二区三区视频在线观看| 丝袜诱惑亚洲看片| 久久国产精品99久久久久久老狼| 日本欧美久久久久免费播放网| 日韩精品电影在线| 毛片av一区二区| 另类的小说在线视频另类成人小视频在线 | 中文字幕在线不卡一区| 国产精品视频观看| 亚洲日本在线视频观看| 亚洲精品日日夜夜| 亚洲一区二区三区不卡国产欧美| 亚洲一区二区黄色| 日韩成人精品在线| 韩国av一区二区| 国产69精品久久久久毛片| av日韩在线网站| 欧美日韩aaaaa| 精品久久一区二区三区| 国产日韩欧美激情| 亚洲精品欧美专区| 天堂va蜜桃一区二区三区| 韩国v欧美v日本v亚洲v| 不卡电影一区二区三区| 在线视频一区二区三区| 欧美日韩久久不卡| 久久女同性恋中文字幕| 综合在线观看色| 丝袜亚洲另类欧美| 国产91在线|亚洲| 欧美日韩情趣电影| 久久久久高清精品| 一区二区三区自拍| 麻豆免费精品视频| 91视频在线观看| 亚洲乱码国产乱码精品精小说 | 日本在线不卡视频一二三区| 国产伦精品一区二区三区免费| 99在线精品视频| 欧美一级专区免费大片| 国产精品成人网| 蜜臀av一级做a爰片久久| 成人一区二区三区| 69久久99精品久久久久婷婷| 亚洲国产精品成人综合 | 99免费精品在线| 337p亚洲精品色噜噜狠狠| 国产精品理论片在线观看| 日产欧产美韩系列久久99| 波波电影院一区二区三区| 日韩一区二区电影| 一区二区三区在线看| 国产一区二区精品久久91| 欧美日韩三级一区| 亚洲色欲色欲www在线观看| 久久9热精品视频| 欧美日韩国产bt| 国产精品久久久久久久久免费相片| 免费成人在线播放| 欧美丝袜第三区| 亚洲男人天堂av网| 国产盗摄视频一区二区三区| 日韩一区二区电影在线| 亚洲已满18点击进入久久| www.成人网.com| 久久久久久久久久久黄色| 男男gaygay亚洲| 51精品视频一区二区三区| 亚洲一区二三区| 欧美吞精做爰啪啪高潮| 亚洲三级在线播放| 99国产精品久久久久久久久久久| 国产视频一区在线播放|