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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? st16c554.c

?? S3C44B0擴(kuò)展16C554串口
?? C
字號(hào):
/*
; File: sample.c Package:UART init
; This is a sample code to show how to initialize the UART series of chips
; from Startech Semiconductors.
; This also includes some basic external loop back thru’ two different
; ports using the FIFO capability.
; This also includes external loop back thru a different computer
*/
//#include <stdio.h>
//#include <string.h>
//#include <fcntl.h>

//#include "..\inc\st16c554.h"

#include <string.h>
#include "..\inc\option.h"
#include "..\inc\44b.h"
#include "..\inc\44blib.h"
#include "..\inc\def.h"
#include "..\inc\cache.h"
#include "..\inc\uart.h"
#include "..\inc\power.h"
#include "..\inc\dma.h"
#include "..\inc\timer.h"
#include "..\inc\rtc.h"
#include "..\inc\etc.h"
#include "..\inc\iic.h"
#include "..\inc\stop.h"
#include "..\inc\extdma.h"
#include "..\inc\tp.h"
#include "..\inc\usb.h"
#include "..\inc\kb.h"
#include "..\inc\Pwm.h"
#include "..\inc\led.h"
#include "..\inc\lcd.h"
#include "..\inc\lcdlib.h"
#include "..\inc\44blcd.h"
#include "..\inc\slib.h"


#define UART_CLK 1843200.0

#define TRUE 1
#define FALSE 0
/* These are the various offsets for the registers inside the chip */
#define RHR 0x00 /* Receive Holding Register */
#define THR 0x00 /* Receive Holding Register */
#define IER 0x01 /* Interrupt Enable Register */
#define FCR 0x02 /* FIFO control Register */
#define ISR 0x02 /* Interrupt Status Register */
#define LCR 0x03 /* Line control register */
#define MCR 0x04 /* Modem Control Register */
#define LSR 0x05 /* Line Status Register */
#define MSR 0x06 /* Modem Status Register */
#define SCR 0x07 /* Scratch pad Register */
/* This two offsets are used for defining the baud rate */
#define DIVLSB 0x00 /* Divisor LSB latch address */
#define DIVMSB 0x01 /* Divisor MSB Latch address */
/*\
* Program table for baud rate
* This represents the LSB and MSB divisor latch data
\*/
char baud_table[8][2] = {
	{ 0x80, 0x01 }, /* 300 */
	{ 0x60, 0x00 }, /* 1200 */
	{ 0x30, 0x00 }, /* 2400 */
	{ 0x0c, 0x00 }, /* 9600 */
	{ 0x06, 0x00 }, /* 19K */
	{ 0x03, 0x00 }, /* 38k */
	{ 0x02, 0x00 }, /* 56k */
	{ 0x01, 0x00 } /* 115k */
};

/* Baud Rates */
#define _COM_300_ 0
#define _COM_1200_ 1
#define _COM_2400_ 2
#define _COM_9600_ 3
#define _COM_19K_ 4
#define _COM_38K_ 5
#define _COM_56K_ 6
#define _COM_115K_ 7
/* Parity */
#define _COM_NOPARITY_ 0
#define _COM_ODDPARITY_ 1
#define _COM_EVENPARITY_ 2
/* Stopbits */
#define _COM_STOP1_ 0
#define _COM_STOP2_ 1
#define _COM_STOP1_5_ 1
/* word length */
#define _COM_CHR5_ 0
#define _COM_CHR6_ 1
#define _COM_CHR7_ 2
#define _COM_CHR8_ 3
/* word length */
#define _COM_FIFO1_ 0
#define _COM_FIFO4_ 1
#define _COM_FIFO8_ 2
#define _COM_FIFO14_ 3

// 引入 inportb和outportb匯編語(yǔ)言子程序聲明
// 注意顛倒參數(shù)的前后順序
void outportb(U32, U8);
void outportw(U32, U16);
void outportl(U32, U32);
U8  inportb(U32);
U16 inportw(U32);
U32 inportl(U32);

#define printf Uart_Printf

void Delay(int);

void Init_16c554(void)
{
	// 中斷 INTA
	rPCONG &= ~ 0xc000;	// GPG7(INTA) input
	rPUPG |= 0x80;		// GPG7 pullup disable
	// 數(shù)據(jù) D0-7
	rPCOND &= ~ 0xffff;	// GPD7-0(D7-0) input
	rPUPD |= 0xff;		// GPD7-0 pullup disable
	// 中斷選擇 INTSEL
	rPDATF |= 0x80;		// GPF7(INTSEL) = 1
	rPCONF &= ~ 0xc000;	// GPF7 output
	rPCONF |= 0x4000;
	rPUPF |= 0x80;		// GPF7 pullup disable
	// 復(fù)位 RESET 地址 A0-3
	rPDATE |= 0x8;		// GPE3(RESET) = 1
	rPCONE &= ~ 0xf3c0;	// GPE3 4 6 7 (RESET A0 A1 A2)output
	rPCONE |= 0x5140;
	rPUPE |= 0xd8;		// GPE3 4 6 7 pullup disable
	// 片選 -CSA -CSB -CSC -CSD 寫(xiě)選通 -IOW 讀選通 -IOW
	rPDATC |= 0x3f0;	// GPC4-9(-CSA -CSB -CSC -CSD -IOW -IOR) = 1
	rPCONC &= ~ 0xfff00;	// GPC4-9 output
	rPCONC |= 0x55500;
	rPUPC |= 0x3f0;		// GPC4-9 pullup disable
	// 中斷信號(hào)INTA INTB INTC INTD
	rPCONG &= ~0xff00;	// GPG4-7(INTA-D) input
	rPUPG |= 0xf0;		// GPG4-7 pullup disable
	
	// 復(fù)位延時(shí)100ms
	Delay(1000);
	// RESET = 0
	rPDATE &= ~ 0x8;
	Delay(1000);
	
/*
	rPCONB |= 0x200;	// 選擇nGCS4
	rBANKCON4 = 0x3f00; // 0x2ff0; // 0x2b40;
	rBWSCON &= ~ 0x0f0000;
	
	rPDATG = 0x0c;	// GPG2(INTSEL)=1,GPG3(RESET)=1
	rPCONG = 0x50;	// GPG2 GPG3輸出
	rPUPG &= ~0x0c;	// GPG2 GPG3上拉使能
	
	rPDATF = 0x08;	// GPF3(電源使能)=1
	rPCONF = 0x40;	// GPG3輸出
//	rPUPF = 0xf7;	// GPG3上拉使能
	Delay(100);		// 延時(shí)10ms
	rPDATG &= ~0x08;// GPG3(RESET)=0
*/
/*
	rPDATG = 0x0c;	// GPG2(INTSEL)=1,GPG3(RESET)=1
	rPCONG = 0x50;	// GPG2 GPG3輸出
	rPUPG &= ~0x0c;	// GPG2 GPG3上拉使能
	
	rPDATF = 0x08;	// GPF3(電源使能)=1
	rPCONF = 0x40;	// GPG3輸出
//	rPUPF = 0xf7;	// GPG3上拉使能
	Delay(100);		// 延時(shí)10ms
	rPDATG &= ~0x08;// GPG3(RESET)=0

	
	rPDATC |= 0x30;
	rPDATC &= ~ 0xe0;
	rPCONC &= ~ 0x0ffc;
	rPCONC |= 0x554;
	rPUPC |= 0x3e;
	
	rPCOND &= ~ 0xffff;	// PGD0-7 Input
	rPUPD &= ~ 0xff;	// PGD0-7 Pullup
*/
}



// 向16C554 addr 寄存器寫(xiě)一個(gè)字節(jié)
uart_write(U8 port,U8 addr,U8 dat)
{
	U32 temp;
	// 地址換算到 GPE7 6 4
	temp = (addr & 0x6) << 5;
	temp |= (addr & 0x1) << 4;
	// 地址輸出
	rPDATE &= ~ 0xd0;	// A2-0 = 0
	rPDATE |= temp;
	// 片選換算到 GPC4-7 (port 0-3)
	temp = ( 1 << ( 4 + port % 4));
	// 片選輸出
	rPDATC &= ~ temp;
	// 數(shù)據(jù)輸出
	rPDATD = dat;
	// 數(shù)據(jù)線(xiàn)方向改為輸出
	rPCOND |= 0x5555;
	// nWE 輸出低
	rPDATC &= ~ 0x100;
	// 延時(shí)
	Delay(1);
	// nWE nOE 輸出高
	rPDATC |= 0x300;
	// 數(shù)據(jù)線(xiàn)方向改為輸入
	rPCOND &= ~ 0xffff;
	// 片選失效
	rPDATC |= 0xf0;
}


// 從C554 addr 寄存器讀一個(gè)字節(jié)
U8 uart_read(U8 port,U8 addr)
{
	U32 temp;
	// 地址換算到 GPE7 6 4
	temp = (addr & 0x6) << 5;
	temp |= (addr & 0x1) << 4;
	// 地址輸出
	rPDATE &= ~ 0xd0;	// A2-0 = 0
	rPDATE |= temp;
	// 片選換算到 GPC4-7 (port 0-3)
	temp = ( 1 << ( 4 + port % 4));
	// 片選輸出
	rPDATC &= ~ temp;
	// nOE 輸出低
	rPDATC &= ~ 0x200;
	// 延時(shí)
	Delay(1);
	// 得到數(shù)據(jù)
	temp = rPDATD;
	// nWE nOE 輸出高
	rPDATC |= 0x300;
	// 片選失效
	rPDATC |= 0xf0;
	return temp;
}

// 串口設(shè)置
// port 0-4 對(duì)應(yīng) A-D 4個(gè)串口
void uart_init(U8 port,U32 baud)
{
	// LCR7 = 1
	uart_write(port,LCR,0x80);
	// 波特率換算設(shè)置
	baud = UART_CLK / 16 / baud;
	uart_write(port,DIVLSB,baud);
	uart_write(port,DIVMSB,baud >> 8);
	// 8個(gè)數(shù)據(jù)位 1個(gè)停止位 無(wú)校驗(yàn)位
	uart_write(port,LCR,0x03);
	// 使能FIFO 和 中斷
	uart_write(port,FCR,0x07);
	// 使能發(fā)送和接受中斷
	uart_write(port,IER,0x01);
	// 使能串口中斷
//	uart_write(port,MCR,0x08);
}


int uart_check(void)
{
	U8 i;
	Uart_Printf("Writing aah to scr(0x07)\n");
	uart_write(0,SCR,0xaa);
	i = uart_read(0,SCR);
	Uart_Printf("Reading back %2xh from scr(0x07)\n\n",i);
	if(i == 0xaa)
		return TRUE;
	else
		return FALSE;
}

void uart_loop(void)
{
	U8 tmp;
    while(1)
    {
    	if(uart_read(0,LSR) & 0x01)
    	{
    		tmp = uart_read(0,RHR);
    		Delay(1);
    		uart_write(0,THR,tmp);
    	}
    }
}

void uart_putch(U8 port,U8 ch)
{
	uart_write(port,THR , ch);
}




/*\
* This function checks the existence of a port.
* It is very simple. Take the port address then write to the scratch pad
* an the read it back. If the data read back the same as one that was
* written then return TRUE else return FALSE.
\*/
int
check_port(com_port)
int com_port;
{
	int i;
	U32 k = 0x8000000 + 0x10000 * com_port + SCR;
	printf("Checking for port %4xH\n",com_port);
	/* Write 1010 1010 (0xaa) to scratch pad*/
	printf("Writing AAH in %4xH\n",com_port);
	outportb(/*0x8000000 + 0x10000 * com_port + SCR*/ k , 0xaa);
	/* read it back. If it the same then return TRUE */

	outportb(0,0);

	i = inportb(/*com_port + SCR*/ k);
	printf("Read back %2xH from %4xH\n",i,com_port);
	if( i == 0xaa)
		return TRUE;
	else
		return FALSE;
}
/*\
* This is the work horse function which actually setups the UART.
* It needs to know every thing.
\*/
int
init_uart(port,baud,parity,data,stop,fifo,trigger)
int port,baud,parity,data,stop,fifo,trigger;
{
	char lcr_byte;
	/* Set divisor latch */
	outportb(0x8000000 + 0x10000 * port+LCR, 0x80) ;
	printf("Divisor Latch is %2xH %2xH (High Low)\n",
	baud_table[baud][1],baud_table[baud][0]);
	outportb(0x8000000 + 0x10000 * port+DIVLSB, baud_table[baud][0]) ;
	outportb(0x8000000 + 0x10000 * port+DIVMSB, baud_table[baud][1]) ;
	/* Reset to normal Programming */
	/* Program the lcr_byte for the above parameters */
	lcr_byte = 0x00;
	lcr_byte = data; /* Set the bit0 & bit1 for word length */
	lcr_byte |= stop << 3; /* Set the bit2 for stop bit */
	if(parity != _COM_NOPARITY_) {
		lcr_byte |= 1 << 4; /* Set the bit3 for parity */
		if(parity == _COM_EVENPARITY_)
		lcr_byte |= 1 << 5; /* Set the bit4 for EVEN parity */
	}
	printf("LCR byte is %2xH\n",lcr_byte);
	/* Program LCR */
	outportb(0x8000000 + 0x10000 * port+LCR, lcr_byte) ;
	if(fifo) {
		char fifo_byte;
		printf("Programming FIFOs without DMA mode\n");
		/* Have to first set the fifo enable */
		fifo_byte = 0x01;
		outportb(0x8000000 + 0x10000 * port+FCR,fifo_byte);
		/* Now program the FIFO */
		fifo_byte = 0x07; /* set bit0 - FIFO enable, Reset RCVR and XMIT FIFO */
		fifo_byte |= trigger << 7; /* set bit6 and bit7 with the trigger level */
		/* Program FCR */
		outportb(0x8000000 + 0x10000 * port+FCR,fifo_byte);
		if(~(inportb(0x8000000 + 0x10000 * port + ISR) & 0xc0)) {
			printf("This port %4xH does not have FIFOs\n");
			printf("Hence did not program Enable FIFOs\n");
		}
	}
	/* Program IER */
	printf("Programming IER for interrupt on bit0 RCV holding Register\n");
	outportb(0x8000000 + 0x10000 * port+IER, 0x01);
	return TRUE;
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日日夜夜精品视频免费| 一区二区视频免费在线观看| 欧洲国内综合视频| 国内精品伊人久久久久影院对白| 亚洲免费观看高清完整版在线 | 日韩视频中午一区| 一道本成人在线| 国产69精品久久久久毛片| 香蕉成人啪国产精品视频综合网| 欧美激情在线一区二区三区| 4438x亚洲最大成人网| 91热门视频在线观看| 国产又黄又大久久| 日韩电影在线一区| 亚洲国产精品久久久久婷婷884| 中文字幕国产一区| 久久久久青草大香线综合精品| 欧美高清精品3d| 欧美视频一区二| 91高清在线观看| 岛国精品在线播放| 一区二区在线免费观看| 亚洲桃色在线一区| 国产欧美日韩精品一区| 2021中文字幕一区亚洲| 欧美一区二区精品| 日韩一级高清毛片| 欧美一级xxx| 91精品国产综合久久香蕉的特点| 欧美性受xxxx| 欧美网站大全在线观看| 一本色道久久综合亚洲91| 粉嫩av亚洲一区二区图片| 国产在线不卡视频| 国产河南妇女毛片精品久久久 | 亚洲国产精品高清| 久久精品男人天堂av| 久久一区二区三区四区| 精品成a人在线观看| 2014亚洲片线观看视频免费| 欧美va亚洲va香蕉在线| 日韩精品中文字幕一区二区三区| 欧美一卡二卡在线| 日韩精品自拍偷拍| www日韩大片| 欧美激情一区二区三区全黄| 欧美韩国日本一区| 国产精品国产a| 一区二区三区欧美日| 亚洲国产成人av| 三级成人在线视频| 国模大尺度一区二区三区| 国模无码大尺度一区二区三区| 国产激情偷乱视频一区二区三区 | 国产不卡视频在线观看| 成人av在线播放网址| 一本大道久久精品懂色aⅴ| 欧美性生活一区| 日韩亚洲欧美中文三级| 2021国产精品久久精品| 国产精品免费看片| 亚洲无人区一区| 麻豆久久久久久| 福利视频网站一区二区三区| 91在线小视频| 在线电影院国产精品| 精品欧美一区二区在线观看| 国产婷婷色一区二区三区四区| 中文字幕综合网| 偷偷要91色婷婷| 国产精品一区一区三区| 91久久精品国产91性色tv| 欧美肥妇毛茸茸| 中文字幕欧美激情| 亚洲五月六月丁香激情| 狠狠狠色丁香婷婷综合激情| 91麻豆文化传媒在线观看| 欧美日韩国产另类一区| 久久久久久久久久久久电影| 亚洲女人****多毛耸耸8| 免播放器亚洲一区| 成人成人成人在线视频| 欧美高清视频不卡网| 国产精品视频yy9299一区| 亚洲午夜久久久久久久久电影院| 国模少妇一区二区三区| 欧美亚一区二区| 欧美激情综合在线| 美女高潮久久久| 色综合久久久久| 国产婷婷一区二区| 视频一区二区国产| 99国产欧美另类久久久精品| 91精品国产一区二区三区蜜臀| 国产精品国产馆在线真实露脸| 免费成人在线观看| 欧美网站大全在线观看| 国产精品久久久久久户外露出| 日韩黄色免费网站| 色婷婷综合中文久久一本| 久久久久亚洲综合| 奇米777欧美一区二区| 色婷婷综合久色| 国产日韩欧美亚洲| 久久福利资源站| 欧美夫妻性生活| 亚洲综合激情另类小说区| 波多野结衣中文字幕一区| 欧美成人精品高清在线播放| 一区二区三区免费在线观看| 成人激情动漫在线观看| 精品国产乱码久久久久久闺蜜| 亚洲国产aⅴ成人精品无吗| 91视频免费观看| 国产精品久久久久久久浪潮网站| 激情综合色丁香一区二区| 6080午夜不卡| 亚洲成人av福利| 91国产丝袜在线播放| 综合自拍亚洲综合图不卡区| 国产91丝袜在线18| 精品欧美黑人一区二区三区| 免费欧美日韩国产三级电影| 欧美精品一卡二卡| 午夜久久久久久电影| 91九色最新地址| 亚洲一区二区三区精品在线| 色综合天天综合网国产成人综合天| 中文字幕 久热精品 视频在线| 国产一区二区影院| 久久久久久久久一| 国产aⅴ综合色| 中文子幕无线码一区tr| 成人av网站大全| 亚洲视频免费看| 91蝌蚪porny九色| 亚洲精品成人在线| 欧美日韩一卡二卡三卡| 婷婷久久综合九色国产成人 | 韩国精品免费视频| 久久精品这里都是精品| 国产毛片精品国产一区二区三区| 久久久五月婷婷| 成人97人人超碰人人99| 日韩理论片一区二区| 欧美三区免费完整视频在线观看| 亚洲aaa精品| 日韩精品一区二区三区视频播放| 久久精品久久精品| 久久久国产综合精品女国产盗摄| 成人午夜激情视频| 亚洲视频在线一区| 欧美三级电影网| 久久国产生活片100| 国产午夜精品理论片a级大结局| eeuss鲁一区二区三区| 亚洲另类春色国产| 91.com在线观看| 国产精品12区| 悠悠色在线精品| 欧美一区二区福利视频| 国产不卡高清在线观看视频| 亚洲欧美日韩综合aⅴ视频| 在线成人午夜影院| 韩国女主播成人在线| 国产精品福利在线播放| 欧美理论电影在线| 国产一区二区在线观看免费| 亚洲欧美日韩国产综合在线| 在线不卡的av| 国产不卡视频在线观看| 亚洲成人免费观看| 久久精品人人做人人综合 | 国产精品毛片久久久久久久| 色婷婷综合视频在线观看| 另类中文字幕网| 中文字幕一区三区| 日韩一区二区在线看| 大陆成人av片| 蜜桃免费网站一区二区三区| 亚洲婷婷综合色高清在线| 日韩视频在线永久播放| 色综合久久久久久久久| 国产一区二区美女诱惑| 亚洲高清一区二区三区| 国产精品嫩草影院av蜜臀| 欧美区在线观看| 99re这里只有精品首页| 精品一区二区精品| 亚洲一区在线观看网站| 国产精品美女久久久久高潮| 欧美日韩不卡一区| 99久久精品国产观看| 国产最新精品免费| 亚洲二区在线视频| 中文字幕一区二区三区不卡在线| 精品国产不卡一区二区三区| 在线精品视频免费播放| 成人性生交大合| 激情六月婷婷久久|