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

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

?? 2410lib.c

?? s3c2410的cs8900網絡驅動
?? C
?? 第 1 頁 / 共 2 頁
字號:
Autor & date :
****************************************************************************/
U32 GetCpuClock(void)
{
	return ClkPara.freq;
}

/***************************************************************************
Function name: GetMasterClock
Parameter    : void
Description  : 獲得系統的PCLK頻率
Return	     : 返回系統的PCLK頻率
Argument     : 
Autor & date :
****************************************************************************/
U32 GetMasterClock(void)
{
	U32 clk;
	
	clk = GetCpuClock();
	
	if(rCLKDIVN&2)
		clk >>= 1;
		
	if(rCLKDIVN&1)
		clk >>= 1;
		
	return clk;
}

/***************************************************************************
Function name: Delay
Parameter    : ms : 延遲時間大小的參數	
Description  : 延遲函數
Return	     : void
Argument     : 以ms為延時單位
Autor & date :
****************************************************************************/
void Delay(U32 ms)
{
	U16 i;
	
	i = rTCNTB4>>1;		//1000us/2	
	rTCON &= ~(1<<20);
	rTCON |= (1<<20);	//停止再啟動,重裝初值,減計數
	
	while(ms--) {
		while(rTCNTO4>=i);
		while(rTCNTO4<i);
	}
}
/***************************************************************************************************/
/************************下面是串口通訊相關函數*****************************************************/
/***************************************************************************************************/

/***************************************************************************
Function name: SerialSwitch
Parameter    : port : 串口選擇參數,0:串口1 1:串口2	
Description  : 進行串口切換
Return	     : 返回串口切換的參數,是串口1還是串口2
Argument     : 
Autor & date :
****************************************************************************/
static U16 SerialPortSel;

U16 SerialSwitch(U16 port)
{
#ifdef	SERIAL_PORTS_SWITCH
//	U16 old_sel = SerialPortSel;
	
	SerialPortSel = port?1:0;
#else
	SerialPortSel = 0;
#endif
	return SerialPortSel;
}

/***************************************************************************
Function name: SerialChgBaud
Parameter    : baud	: 串口波特率參數
Description  : 設置串口的波特率
Return	     : void
Argument     : 常用串口波特率范圍:2400,4800,9600,19200,38400,115200等		
Autor & date :
****************************************************************************/
void SerialChgBaud(U32 baud)
{
	U32 mclk =  GetMasterClock();
	
	rUFCON0 = 0x0;		//FIFO disable
	rUFCON1 = 0x0;
	rUMCON0 = 0x0;
	rUMCON1 = 0x0;

//UART0
//	rULCON0  = 0x7;		//Normal,No parity,2 stop,8 bit
	rULCON0  = 0x3;		//Normal,No parity,1 stop,8 bit
	rUCON0   = 0x245;	//rx=edge,tx=level,disable timeout int.,enable rx error int.,normal,interrupt or polling
	rUBRDIV0 = ((int)(mclk/16./baud + 0.5) -1);

//UART1
//	rULCON1  = 0x7;		//Normal,No parity,2 stop,8 bit
	rULCON1  = 0x3;
	rUCON1   = 0x245;
	rUBRDIV1 = ((int)(mclk/16./baud + 0.5) -1);
}

/***************************************************************************
Function name: SerialTxChar
Parameter    : data	:要發送的數據
Description  : 主要進行串口發送
Return	     : void
Argument     : 通過SerialPortSel變量來選擇是哪個串口發送數據	
Autor & date :
****************************************************************************/
void SerialTxChar(char data)
{
	if(SerialPortSel) {
		if(data=='\n') {
			while(!(rUTRSTAT1 & 0x4));
	    	//Delay(1);	//because the slow response of hyper_terminal 
			WrUTXH1('\r');
		}
		while(!(rUTRSTAT1 & 0x4)); //Wait until THR is empty.
//		Delay(1);
		WrUTXH1(data);
    } else {
		if(data=='\n') {
			while(!(rUTRSTAT0 & 0x4));
			//Delay(1);	//because the slow response of hyper_terminal 
			WrUTXH0('\r');
		}
		while(!(rUTRSTAT0 & 0x4));  //Wait until THR is empty.
		WrUTXH0(data);
    }
  }

/***************************************************************************
Function name: SerialRxReady
Parameter    : void
Description  : 檢測串口接收緩沖區是否有數據
Return	     : 返回UTRSTATn[0]的狀態
Argument     : 不管什么時候,只要接收緩沖寄存器包含有效數據,UTRSTATn[0]就
				自動被設置為1,否則為0
Autor & date :
****************************************************************************/
int SerialRxReady(void)
{
	if(SerialPortSel)
		return (rUTRSTAT1 & 0x1);	//Receive data ready
	else 
		return (rUTRSTAT0 & 0x1);	//Receive data ready
}

/***************************************************************************
Function name: SerialRxKey
Parameter    : void
Description  : 檢測串口接收緩沖區是否有數據,有的話,返回緩沖區的數據
Return	     : 返回接收緩沖區的數據或則0
Argument     : 不管什么時候,只要接收緩沖寄存器包含有效數據,UTRSTATn[0]就
				自動被設置為1,否則為0
Autor & date :
****************************************************************************/
char SerialRxKey(void)
{
	if(SerialPortSel) {
		if((rUTRSTAT1 & 0x1)) //Receive data ready
			return RdURXH1();
	} else {
		if((rUTRSTAT0 & 0x1)) //Receive data ready
			return RdURXH0();
	}
	return 0;
}

/***************************************************************************
Function name: SerialTxString
Parameter    : *s : 要發送的字符串變量
Description  : 向串口發送字符串
Return	     : void
Argument     : 
Autor & date :
****************************************************************************/
void SerialTxString(char *s)
{
	 while(*s)
		SerialTxChar(*s++);
}

/***************************************************************************
Function name: putch
Parameter    : ch : 要發送的數據
Description  : 向串口發送一個數據
Return	     : void
Argument     : 
Autor & date :
****************************************************************************/
void putch(char ch)
{
	
	SerialTxChar(ch);

}

/***************************************************************************
Function name: puts
Parameter    : *str : 要發送的字符串指針變量
Description  : 向串口發送字符串
Return	     : void
Argument     : 
Autor & date :
****************************************************************************/
void puts(char *str)
{
	SerialTxString(str);
	
}

/***************************************************************************
Function name: kbhit
Parameter    : void
Description  : 檢測串口接收緩沖區是否有數據
Return	     : 有,返回1,否返回0
Argument     : 
Autor & date :
****************************************************************************/
int kbhit(void)
{
	if(SerialRxReady())
		return 1;
	return 0;
}

/***************************************************************************
Function name: printf
Parameter    : *fmt : 數據顯示的格式
Description  : 根據提供的格式顯示變量的數值
Return	     : void
Argument     : 調用了ADS的庫函數
Autor & date :
****************************************************************************/
//If you don't use vsprintf(), the code size is reduced very much.
typedef int *__va_list[1];
int vsprintf(char * /*s*/, const char * /*format*/, __va_list /*arg*/);

void printf(char *fmt, ...)
{
	va_list ap;
	char string[1024];
	
	va_start(ap,fmt);
	vsprintf(string,fmt,ap);
	puts(string);
	va_end(ap);
}

/***************************************************************************
Function name: getkey
Parameter    : void
Description  : 
Return	     : 如果串口接收緩沖區有數據,就返回數據,否則返回0
Argument     : 
Autor & date :
****************************************************************************/
int getkey(void)
{
	int c;
	
	c = SerialRxKey();
	if(c)
		return c;
	return 0;
//	return GetScanKey();
}

/***************************************************************************
Function name: getch
Parameter    : void
Description  : 等待從串口接收一個數據,否則一直循環
Return	     : 返回接收到的數據
Argument     : 
Autor & date :
****************************************************************************/
char getch(void)
{
	int c;
	
	while(1) {
		c = getkey();
		if(c) {
			//printf("get key!\n");
			return c;
		}
	}
	//return SerialRxChar();
}

/***************************************************************************
Function name: memcpy
Parameter    : *s1:目的地址 *s2:源地址 n:要拷貝的數據的長度
Description  : 將長度為n的數據拷貝從源地址拷貝到目的地址
Return	     : void
Argument     : 
Autor & date :
****************************************************************************/
void memcpy(void *s1, const void *s2, int n)
{
	int i;

	for (i = 0; i < n; i++)
		((char *)(s1))[i] = ((const char *)(s2))[i];
}
/**************************************************************************/

/***************************************************************************
Function name: strlen
Parameter    : *s:字符串指針
Description  : 計算字符串的長度
Return	     : void
Argument     : 
Autor & date :
****************************************************************************/
int strlen(const char *s)
{
	int i = 0;

	for(; *s; s++)
		i++;
	
	return i;
}
/***************************************************************************/
unsigned short ntohs(unsigned short s)
{
	return (s >> 8) | (s << 8);
}

unsigned long ntohl(unsigned long l)
{
	return  ((l >> 24) & 0x000000ff) |
		((l >>  8) & 0x0000ff00) |
		((l <<  8) & 0x00ff0000) |
		((l << 24) & 0xff000000);
}

unsigned short htons(unsigned short s)
{
	return (s >> 8) | (s << 8);
}

unsigned long htonl(unsigned long l)
{
	return ntohl(l);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美亚洲动漫精品| 国产在线精品一区二区不卡了| 成人免费毛片片v| 久久综合久久综合九色| 久久av中文字幕片| 日韩西西人体444www| 亚洲v日本v欧美v久久精品| 欧美男女性生活在线直播观看| 亚洲欧美另类小说| 在线观看视频一区二区欧美日韩| 亚洲精品五月天| 色老汉av一区二区三区| 久久久综合精品| 成人免费的视频| 国产精品伦一区| 欧美亚洲国产一区在线观看网站| 亚洲免费av在线| 欧美日韩国产在线观看| 蜜桃视频免费观看一区| 日韩欧美你懂的| 黄网站免费久久| 亚洲欧美日韩一区二区 | 成人欧美一区二区三区| 波多野结衣一区二区三区 | 91在线视频观看| 亚洲综合色婷婷| 欧美一区二区二区| 国产aⅴ综合色| 亚洲视频免费观看| 99久久精品情趣| 婷婷六月综合网| 日韩精品中文字幕在线不卡尤物| 国产一区二区电影| 亚洲欧洲美洲综合色网| 欧美亚洲一区三区| 国产精品一级二级三级| 国产精品久久久久久久久果冻传媒 | 极品瑜伽女神91| 最新日韩在线视频| 欧美一区二区三区性视频| 国产美女精品在线| 香蕉加勒比综合久久| 久久蜜桃av一区二区天堂 | 国产一区二区三区四区五区入口| 国产精品丝袜黑色高跟| 欧美videossexotv100| 成人精品高清在线| 亚洲aⅴ怡春院| 亚洲人妖av一区二区| 8v天堂国产在线一区二区| 国产美女一区二区| 亚洲第一成年网| 国产午夜精品一区二区三区视频| 在线一区二区视频| 精品影视av免费| 亚洲成人综合网站| 国产色91在线| 欧美精品一级二级| 高清不卡在线观看av| 亚洲成人动漫一区| 国产校园另类小说区| 欧美电影一区二区| 欧美中文字幕久久| 国产成人在线免费观看| 美女www一区二区| 亚洲精选免费视频| 久久久久久综合| 精品国产乱码久久久久久1区2区| 欧美人xxxx| 在线免费不卡电影| 91蝌蚪porny成人天涯| 成人开心网精品视频| 国产乱淫av一区二区三区| 免费欧美高清视频| 日本一不卡视频| 首页综合国产亚洲丝袜| 亚洲欧洲日韩在线| 国产精品美女久久久久高潮| 日韩一区二区在线看片| 欧美日韩不卡一区| 色八戒一区二区三区| 99精品黄色片免费大全| 国产一区二区三区免费看| 性久久久久久久久| 日日骚欧美日韩| 亚洲成人激情av| 亚洲高清免费视频| 一区二区在线看| 亚洲三级在线免费观看| 亚洲男人天堂av| 国产精品传媒视频| 亚洲日韩欧美一区二区在线| 国产精品免费aⅴ片在线观看| 中文字幕第一区第二区| 中文字幕一区二区三区不卡| 日韩一区欧美一区| 亚洲精品视频自拍| 亚洲视频中文字幕| 中文字幕av在线一区二区三区| 中文字幕巨乱亚洲| 国产精品免费免费| 亚洲午夜电影在线| 午夜精品久久久久久不卡8050| 蜜臀精品一区二区三区在线观看| 日本aⅴ免费视频一区二区三区| 日韩av中文字幕一区二区| 久久99久久精品| 国产在线观看免费一区| 不卡视频在线看| 色天天综合色天天久久| 欧美亚洲综合另类| 欧美日韩1区2区| 欧美猛男超大videosgay| 9191成人精品久久| 欧美精品一区二区三区蜜桃 | 蜜桃精品在线观看| 极品少妇一区二区| 国产剧情一区二区| 91在线观看地址| 国产精品一级二级三级| 成人免费高清在线观看| 日本韩国欧美三级| 69成人精品免费视频| 久久久久高清精品| 国产精品私人自拍| 婷婷国产在线综合| 韩国一区二区视频| 99久久国产综合精品色伊 | 亚洲精品一二三区| 丝袜诱惑亚洲看片 | 日韩综合小视频| 精品中文字幕一区二区| 亚洲成人av电影在线| 九九视频精品免费| 91香蕉视频在线| 欧美浪妇xxxx高跟鞋交| 久久精品视频在线看| 亚洲欧美激情小说另类| 久久av中文字幕片| 色综合婷婷久久| 91精品国产欧美一区二区18 | 日韩欧美的一区| 中文字幕一区二区三区乱码在线| 日韩精品欧美精品| av激情综合网| 欧美高清视频不卡网| 久久久99精品久久| 亚洲国产精品人人做人人爽| 国模少妇一区二区三区| 欧美亚洲另类激情小说| 中文字幕 久热精品 视频在线| 亚洲成人免费在线观看| 国产成人一区在线| 欧美一区二区播放| 精品一区二区三区av| 日本高清免费不卡视频| 国产亚洲污的网站| 一区二区三区日韩在线观看| 九九精品视频在线看| 欧美日本在线播放| 亚洲黄色免费电影| 国产激情偷乱视频一区二区三区| 欧美日韩久久不卡| 亚洲三级理论片| 成人在线视频首页| 欧美一区二区日韩| 亚洲国产一区在线观看| 色综合视频在线观看| 国产精品欧美一区二区三区| 亚洲成人av中文| 色综合久久久久| 国产精品青草久久| www.亚洲色图| 国产日韩欧美精品在线| 激情小说亚洲一区| 欧美不卡在线视频| 亚洲视频 欧洲视频| 成人综合在线观看| 日韩欧美国产一区在线观看| 日韩中文字幕区一区有砖一区| 色综合天天性综合| 一区二区成人在线| 一本大道av一区二区在线播放| 成人欧美一区二区三区黑人麻豆| 成人亚洲精品久久久久软件| 玉米视频成人免费看| 国产一区二区成人久久免费影院 | 9191成人精品久久| 日韩—二三区免费观看av| 在线播放一区二区三区| 亚洲免费观看高清在线观看| 91网站黄www| 一区二区在线免费| 欧美日韩中文字幕一区二区| 亚洲午夜影视影院在线观看| 欧洲精品视频在线观看| 亚洲自拍都市欧美小说| 91福利视频久久久久| 亚洲成a人v欧美综合天堂下载 | 精品中文字幕一区二区小辣椒|