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

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

?? w83977.c

?? 華邦的超級IO芯片W83977TF的驅動程序。當初我是搞了好久的
?? C
字號:
#include "def.h"
#include "2410lib.h"
#include "2410addr.h"
#include "w83977.h"

/**************************************************
*  *date:2007-08-15 (created)
*  *author: baijb
*  *version: v1.0
*  *function: winbond W83977TF configuration
**************************************************/
static unsigned int efbase[] = { W977_EFIO_BASE+nGCS7, W977_EFIO2_BASE+nGCS7 };
static unsigned int efio = W977_EFIO_BASE;

#define readb(x)    		(*(volatile unsigned char *)x)  
#define writeb(val, x)   	(*(volatile unsigned char *)x)=val
#define readw(x)		(*(volatile unsigned short *)x)
#define writew(val, x)	(*(volatile unsigned short *)x)=val

/*
 * Enter extended function mode
 */
static void w977_efm_enter(unsigned int efio)
{
        writeb(0x87, efio);
        writeb(0x87, efio);
}

/*
 * Select a device to configure 
 * devnum:	UARTA:2                  KBC:5
 */

static void w977_select_device(unsigned char devnum, unsigned int efio)
{
	unsigned int addr;
	writeb(0x07, efio);
	addr=efio+1;
	writeb(devnum, addr);
} 

/* 
 * Write a byte to a register
 */
static void w977_write_reg(unsigned char reg, unsigned char value, unsigned int efio)
{
	unsigned int addr;
	
	writeb(reg, efio);
	addr=efio+1;
	writeb(value, addr);
}

/*
 * read a byte from a register
 */
static unsigned char w977_read_reg(unsigned char reg, unsigned int efio)
{
	unsigned int addr;
	writeb(reg, efio);
	addr=efio+1;
	return readb(addr);
}

/*
 * Exit extended function mode
 */
static  void w977_efm_exit(unsigned int efio)
{
	writeb(0xAA, efio);
}

/*******************************************************
*  *logic device operation
*******************************************************/
static unsigned char w83977_read_state(unsigned int addr)
{
	addr +=nGCS7;
	return readb(addr);
}

static unsigned char w83977_write_device(unsigned char val, unsigned int io_addr)
{
	io_addr +=nGCS7;
	return writeb(val, io_addr);
}

static void uart8250_init(unsigned int base_port, unsigned char divisor, unsigned char lcs)
 {
         lcs &= 0x7f;
         /* disable interrupts */
         w83977_write_device(0x0, base_port + UART_IER);
         /* enable fifo's */
         //w83977_write_device(0x01, base_port + UART_FCR);
         /* assert DTR and RTS so the other end is happy */
         //w83977_write_device(0x03, base_port + UART_MCR);
         /* Set Baud Rate Divisor to 12 ==> 115200 Baud */
         w83977_write_device(0x80 | lcs, base_port + UART_LCR);
         w83977_write_device(divisor & 0xFF,   base_port + UART_DLL);
         w83977_write_device((divisor >> 8) & 0xFF,    base_port + UART_DLM);
         w83977_write_device(lcs, base_port + UART_LCR);
 }


 static unsigned char check_w83977tf(void)
 {
 	unsigned char device_id, device_version;
	
 	w977_efm_enter(efbase[1]);
	device_id=w977_read_reg(0x20, efbase[1]);
	device_version=w977_read_reg(0x21, efbase[1]);

	printf("device_id(0x97)=0x%x, device_version(0x73)=0x%x\n", device_id, device_version);

	if(device_id != 0x97 || device_version !=0x73) {
		printf("there is no W83977 device!\n");
		return -1;
	}
	printf("W83977 device detected!\n");
	return 0;
 }	

void init_w83977(void)
{
 	unsigned char  tmp1, tmp2;

   	rBANKCON7=0;             //w83977
   	rBANKCON7|= 0<<15 | 2<<13 | 2<<11 | 7<<8 | 3<<6 | 3<<4;   //Tacc=14clk  ROM
/*
	printf("rBWSCON=0x%x\n", (rBWSCON>>28)&0x0f);    	//BANK7
	printf("rBANKCON7=0x%x\n", rBANKCON7);				//BANK7
*/	
	if(check_w83977tf()) { 
		//exit the extend function setting
 		w977_efm_exit(efbase[1]);
		return ;
	}

	//GPI014 port------------------------------------------
	w977_select_device(W977_DEVICE_GP14, efbase[1]);    //select logic device
	w977_write_reg(0x2c, 0x01, efbase[1]);            //pin config for GP14------	
	//set GP1 base address--0x200
	w977_write_reg(0x60, (GPIO14_IO_BASE>>8) & 0xff, efbase[1]);     //address
	w977_write_reg(0x61, GPIO14_IO_BASE & 0xff, efbase[1]);     //address
	w977_write_reg(0xe4, 0x00, efbase[1]);     //config GP14---noninvert output 
	 /* Activate device */
 	w977_write_reg(0x30, 0x01, efbase[1]);  
	 
	//KBD port--------------------------------------------
	w977_select_device(W977_DEVICE_KBC, efbase[1]); 		//select logic device
	w977_write_reg(0x60, 0x0, efbase[1]);     	//address
	w977_write_reg(0x61, 0x60, efbase[1]);    	//address--0x060
	w977_write_reg(0x62, 0x0, efbase[1]);     	//address
	w977_write_reg(0x63, 0x64, efbase[1]);     	//address--0x064

	//set irq number
	w977_write_reg(0x70, 0x05, efbase[1]);    //irq for keyboard   irq5--active H
	w977_write_reg(0x72, 0x04, efbase[1]);    //irq for mouse       irq4--active H

	//12MHZ, disable port 92
	w977_write_reg(0xf0, 0x80, efbase[1]); 
 	/* Activate device */
 	w977_write_reg(0x30, 0x01, efbase[1]); 
	
	//parport port------------------------------------------
	w977_select_device(W977_DEVICE_PARPORT, efbase[1]);
	//set  base address--0x378
	w977_write_reg(0x60, (PARPORT_IO_BASE>>8) & 0xff, efbase[1]);     	//address
	w977_write_reg(0x61, PARPORT_IO_BASE & 0xff, efbase[1]);     		//address
 	/* Activate device */
 	w977_write_reg(0x30, 0x01, efbase[1]);

	//uart--a
	w977_select_device(W977_DEVICE_UARTA, efbase[1]);
	//set  base address--0x3f8
	w977_write_reg(0x60, (TTYS0_BASE>>8) & 0xff, efbase[1]);    	 //address
	w977_write_reg(0x61, TTYS0_BASE & 0xff, efbase[1]);     		//address
	//set irq number
	w977_write_reg(0x70, 0x03, efbase[1]);    	//irq for serial port A   irq3----s3c2410-EINT6
	w977_write_reg(0xf0, 0x00, efbase[1]);  	//1.8461MHZ
 	/* Activate device */                                         	//active H
 	w977_write_reg(0x30, 0x01, efbase[1]);
/*
	tmp1=w977_read_reg(0x60, efbase[1]);
	tmp2=w977_read_reg(0x61, efbase[1]);
	printf("serial port: 0x60=0x%x,0x61=%x\n", tmp1, tmp2);

	tmp1=w977_read_reg(0x30, efbase[1]);
	tmp2=w977_read_reg(0x70, efbase[1]);
	printf("serial port: active 0x30=0x%x,irq 0x70=0x%x\n",tmp1, tmp2);
*/

	//serial port B------------------------UART A clock source is 1.8462 Mhz
	w977_select_device(W977_DEVICE_UARTB, efbase[1]);
	//set  base address--0x2f8
	w977_write_reg(0x60, (TTYS1_BASE>>8) & 0xff, efbase[1]);     	//address
	w977_write_reg(0x61, TTYS1_BASE & 0xff, efbase[1]);     		//address
	//set irq number
	w977_write_reg(0x70, 0x01, efbase[1]);    	//irq for serial port B   irq1----s3c2410-EINT0
	w977_write_reg(0xf0, 0x00, efbase[1]);  	//1.8461MHZ
 	// Activate device                                        		//active H
 	w977_write_reg(0x30, 0x01, efbase[1]); 

	//exit set config registers---------------------------
 	w977_efm_exit(efbase[1]);

	tmp1=w83977_read_state(TTYS0_BASE+UART_MCR);				//uarta--enable inttrupt pin ----
	w83977_write_device(tmp1 | 0x08, TTYS0_BASE+UART_MCR);    	//
	tmp1=w83977_read_state(TTYS1_BASE+UART_MCR);				//uartb--enable inttrupt pin ----
	w83977_write_device(tmp1 | 0x08, TTYS1_BASE+UART_MCR);    	//
	
 	//uart8250_init(TTYS0_BASE, 3, 3);		//8bit ,38400
	//uart8250_init(TTYS1_BASE, 3, 3);		//8bit ,38400

	//--------------------------------------serial port self test!!!
	/*
	tmp1=w83977_read_state(TTYS0_BASE+UART_LCR);
	printf("LCR--read:0x%x\n", tmp1);
	tmp1=w83977_read_state(TTYS0_BASE+UART_IER);
	printf("ier--read:0x%x\n", tmp1);
	w83977_write_device(0x00, TTYS0_BASE+UART_IER);
	tmp1=w83977_read_state(TTYS0_BASE+UART_IER);
	w83977_write_device(0xff, TTYS0_BASE+UART_IER);
	tmp2=w83977_read_state(TTYS0_BASE+UART_IER);
	printf("ier----1th:0x%.2x, 2nd:0x%.2x\n", tmp1, tmp2);  	
	*/
}

//-------------------------the end-------------------------------------

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人免费福利片| 国模娜娜一区二区三区| 久久在线观看免费| 日韩精品一区二区三区蜜臀 | 男男gaygay亚洲| 性做久久久久久免费观看| 亚洲午夜免费视频| 亚洲va中文字幕| 天堂va蜜桃一区二区三区漫画版| 亚洲大片一区二区三区| 偷窥少妇高潮呻吟av久久免费| 亚洲影院免费观看| 蜜桃久久精品一区二区| 国产福利视频一区二区三区| 成人中文字幕合集| 欧美日韩在线亚洲一区蜜芽| 制服.丝袜.亚洲.另类.中文| 亚洲精品在线观看网站| 久久久国产精华| 亚洲精品欧美激情| 丝袜美腿亚洲一区二区图片| 蜜臀精品一区二区三区在线观看 | 亚洲成人一区在线| 久久99国产精品成人| 成人丝袜视频网| 欧美色老头old∨ideo| 日韩精品一区二区三区蜜臀 | 亚洲午夜电影在线| 男女男精品网站| jvid福利写真一区二区三区| 色婷婷精品久久二区二区蜜臀av| 欧美一区二区三区四区视频 | 婷婷中文字幕综合| 国产一区二区三区四| 在线免费观看成人短视频| 欧美成人高清电影在线| 日韩毛片精品高清免费| 九九精品视频在线看| 91视频在线观看| 精品日韩在线观看| 亚洲综合视频网| 国产福利一区二区| 日韩一区二区免费在线观看| 国产精品进线69影院| 视频一区视频二区中文字幕| 不卡一卡二卡三乱码免费网站| 日韩欧美精品在线视频| 亚洲天堂成人网| 国产高清不卡二三区| 日韩欧美综合一区| 午夜激情久久久| 欧美影院午夜播放| 亚洲欧洲精品一区二区三区不卡| 美女一区二区视频| 欧日韩精品视频| 国产精品久久久久久久久快鸭| 国产精选一区二区三区| 欧美精品777| 亚洲一级二级三级在线免费观看| 成人黄色小视频| 国产拍欧美日韩视频二区| 青青草成人在线观看| 欧美高清精品3d| 亚洲国产日韩在线一区模特| 99re热视频精品| 自拍偷拍国产亚洲| 成人禁用看黄a在线| 国产人久久人人人人爽| 国产成人在线观看免费网站| 精品国产一区二区在线观看| 久久99久久99精品免视看婷婷 | 国产免费观看久久| 久久精品国产精品亚洲红杏| 欧美疯狂做受xxxx富婆| 午夜激情久久久| 欧美日韩高清一区二区三区| 亚洲狼人国产精品| 欧美午夜影院一区| 午夜不卡在线视频| 欧美一区二区三区精品| 美女看a上一区| 日韩欧美亚洲国产精品字幕久久久| 日本美女一区二区三区视频| 精品日韩欧美在线| 国产露脸91国语对白| 国产精品午夜在线观看| 色欧美片视频在线观看在线视频| 一区二区三区影院| 欧美日韩大陆在线| 日韩av二区在线播放| 日韩一区二区三区免费看| 韩国一区二区在线观看| 国产精品每日更新| 欧美日韩一区 二区 三区 久久精品| 亚洲成人av中文| 精品区一区二区| 99免费精品在线观看| 天天操天天干天天综合网| 欧美成人免费网站| 91蜜桃网址入口| 精品成人佐山爱一区二区| 亚洲一区二区三区四区在线观看| 国产suv一区二区三区88区| 成人免费在线观看入口| 欧美日韩国产小视频在线观看| 日本视频一区二区三区| 国产女人18毛片水真多成人如厕 | www.亚洲色图.com| 亚洲五码中文字幕| 久久久久亚洲综合| 欧美在线free| 国产一区二区免费在线| 亚洲一区二区三区小说| 久久亚洲春色中文字幕久久久| 97se亚洲国产综合自在线观| 日韩精品免费专区| 综合久久综合久久| 欧美精品一区二区蜜臀亚洲| 欧美天堂亚洲电影院在线播放| 国产精品1024| 免费一区二区视频| 亚洲一区二区三区小说| 国产精品色婷婷久久58| 精品免费99久久| 这里只有精品99re| 色播五月激情综合网| 国产成人精品影院| 精品一区二区三区香蕉蜜桃| 亚洲妇女屁股眼交7| 亚洲欧美一区二区三区极速播放 | 久久精品国产亚洲aⅴ| 亚洲一区二区三区四区在线 | 国产一区二区在线观看视频| 亚洲狠狠丁香婷婷综合久久久| 国产欧美日韩亚州综合| 精品久久国产97色综合| 欧美日韩大陆一区二区| 91福利精品第一导航| av爱爱亚洲一区| 丁香六月综合激情| 韩国视频一区二区| 国内外成人在线视频| 久久国产乱子精品免费女| 日日夜夜一区二区| 日本一不卡视频| 免费高清在线视频一区·| 秋霞午夜av一区二区三区| 日韩成人av影视| 日韩av电影天堂| 日本午夜一本久久久综合| 偷偷要91色婷婷| 五月天视频一区| 中文字幕精品在线不卡| 国产精品乱码人人做人人爱 | 国产精品538一区二区在线| 精品一区二区三区在线观看国产| 久久 天天综合| 国产一区二区三区高清播放| 国产在线播精品第三| 成人美女视频在线观看| 99久久免费国产| 91成人看片片| 555www色欧美视频| 亚洲精品在线网站| 国产精品久久久久aaaa| 亚洲一卡二卡三卡四卡无卡久久| 丝袜美腿亚洲一区| 国产伦精品一区二区三区免费迷| 国产在线麻豆精品观看| 成人动漫一区二区三区| 欧美日韩一区视频| 日韩欧美亚洲国产另类| 中文字幕免费观看一区| 亚洲成a人片在线观看中文| 蜜臀av一区二区在线免费观看| 精品一区二区免费| 成人成人成人在线视频| 在线播放中文字幕一区| 久久婷婷久久一区二区三区| 国产精品久久久久一区| 无码av免费一区二区三区试看 | 精品一区二区在线视频| jlzzjlzz亚洲日本少妇| 欧美日韩免费电影| 久久精品水蜜桃av综合天堂| 亚洲免费观看高清完整版在线 | 亚洲精品国产一区二区精华液| 午夜激情久久久| 国产激情一区二区三区桃花岛亚洲| 91麻豆精品在线观看| 欧美成人免费网站| 一区二区在线观看av| 国内精品写真在线观看| 在线看日本不卡| 国产精品蜜臀在线观看| 蜜臀国产一区二区三区在线播放 | 精品国偷自产国产一区| 亚洲伦在线观看| 国产一区二区网址| 欧美日本韩国一区|