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

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

?? 2410lib.c

?? 優龍電子ARM2410實驗箱RS485-------RS485通訊實驗.
?? C
?? 第 1 頁 / 共 2 頁
字號:
	ClkPara.pclk = 4;
	ClkPara.sclk = 1;
	set_pll();
}

/***************************************************************************
Function name: GetCpuClock
Parameter    : void
Description  : 獲得系統的主頻
Return	     : 返回系統的主頻
Argument     : 
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;
}
/***************************************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久免费看| 精品噜噜噜噜久久久久久久久试看| 国产精品无遮挡| 成人一区二区在线观看| 国产精品初高中害羞小美女文| 99精品国产热久久91蜜凸| 亚洲精品国产无套在线观| 欧美亚洲综合色| 亚洲成av人片在线观看无码| 欧美精品v日韩精品v韩国精品v| 日韩在线a电影| 欧美不卡一区二区三区四区| 国产精品夜夜嗨| 中文无字幕一区二区三区| 91玉足脚交白嫩脚丫在线播放| 亚洲午夜成aⅴ人片| 欧美一区二区精品久久911| 久草这里只有精品视频| 国产精品妹子av| 欧美亚洲动漫精品| 精品系列免费在线观看| 国产精品午夜久久| 这里只有精品视频在线观看| 久久66热偷产精品| 亚洲欧美日韩国产中文在线| 欧美撒尿777hd撒尿| 精品亚洲免费视频| 亚洲色图欧美在线| 日韩区在线观看| 成人美女视频在线看| 亚洲成人激情社区| 欧美经典三级视频一区二区三区| 色88888久久久久久影院野外| 蜜桃视频一区二区三区在线观看| 久久久五月婷婷| 欧美丝袜第三区| 国产精品香蕉一区二区三区| 亚洲午夜羞羞片| 国产欧美日韩在线观看| 欧美日韩国产免费| 99久久综合99久久综合网站| 美腿丝袜在线亚洲一区| 亚洲天堂福利av| 久久你懂得1024| 91麻豆精品91久久久久久清纯| 国产suv精品一区二区三区| 日韩激情在线观看| 一区二区三区四区视频精品免费 | 麻豆国产精品官网| 亚洲人成网站色在线观看| 日韩精品一区在线| 在线观看视频一区二区| 国产精品91一区二区| 日韩电影在线观看一区| 亚洲欧洲日韩在线| 欧美精品一区二区在线播放| 欧美日韩国产另类一区| 91免费看视频| 成人午夜在线播放| 精品一区二区免费看| 日本少妇一区二区| 亚洲自拍偷拍综合| 亚洲视频香蕉人妖| 国产精品素人视频| 久久一夜天堂av一区二区三区| 91精品国产综合久久久久久久久久 | 99免费精品视频| 国产成人超碰人人澡人人澡| 欧美aa在线视频| 图片区日韩欧美亚洲| 亚洲国产精品久久久久秋霞影院| 国产精品色哟哟| 国产精品免费免费| 国产精品全国免费观看高清| 久久久久久一级片| www久久精品| 久久精品人人做| 久久久久久夜精品精品免费| 精品乱人伦一区二区三区| 欧美mv日韩mv国产网站app| 日韩一区二区免费高清| 91精品国产福利| 日韩视频在线你懂得| 欧美成人激情免费网| 精品久久久久久久久久久院品网| 精品久久一区二区三区| 精品999在线播放| 国产视频一区二区三区在线观看| 久久午夜色播影院免费高清| 久久久蜜臀国产一区二区| 国产清纯白嫩初高生在线观看91 | 国产精品久久久久影院色老大 | 日韩欧美高清一区| 欧美sm极限捆绑bd| 国产亚洲欧美日韩在线一区| 国产欧美精品一区二区色综合 | 一区二区三区欧美久久| 亚洲综合久久av| 亚洲不卡一区二区三区| 天堂久久久久va久久久久| 三级在线观看一区二区| 男女性色大片免费观看一区二区| 美腿丝袜亚洲三区| 成人毛片视频在线观看| 欧美性受xxxx| 久久色视频免费观看| 成人欧美一区二区三区小说 | 亚洲手机成人高清视频| 亚洲综合一区在线| 精品亚洲aⅴ乱码一区二区三区| 国产.精品.日韩.另类.中文.在线.播放| 成人午夜视频免费看| 91成人国产精品| 日韩欧美国产电影| 综合激情成人伊人| 免费观看在线综合| 成人免费视频app| 欧美精品三级日韩久久| 久久久综合网站| 一个色综合av| 国产九九视频一区二区三区| 欧美亚洲综合久久| 国产网站一区二区| 一二三区精品视频| 国产精品69毛片高清亚洲| 欧美日韩一级片在线观看| 欧美激情综合五月色丁香| 日韩精品成人一区二区三区| 成人高清av在线| 欧美一二三在线| 亚洲丝袜另类动漫二区| 国产一区二区在线看| 欧美性三三影院| 国产精品天美传媒沈樵| 精品一区二区免费视频| 欧美精品三级在线观看| 国产精品第五页| 精品一区二区av| 欧美日韩国产一二三| 亚洲欧美视频在线观看视频| 国产一本一道久久香蕉| 欧美放荡的少妇| 一区二区三区在线不卡| 成人性生交大片免费看在线播放| 日韩免费在线观看| 午夜精品久久久久久久99水蜜桃| 波多野结衣亚洲| 久久精品人人做人人爽97| 蜜桃传媒麻豆第一区在线观看| 91亚洲男人天堂| 中文字幕亚洲区| 国产很黄免费观看久久| 精品人伦一区二区色婷婷| 亚洲va韩国va欧美va| 一本色道久久综合亚洲aⅴ蜜桃| 久久精品一区四区| 久久国内精品自在自线400部| 欧美精品久久一区二区三区| 亚洲欧美乱综合| 99久久夜色精品国产网站| 国产欧美日本一区二区三区| 国产美女视频一区| 精品国内二区三区| 麻豆传媒一区二区三区| 欧美电影免费观看高清完整版在线观看 | 九九精品视频在线看| 日韩一区二区三区免费看 | 欧美日韩高清不卡| 亚洲一二三四区| 欧美午夜电影网| 亚洲制服丝袜av| 欧美久久一区二区| 日韩高清欧美激情| 欧美一区二区三区视频| 久久精品国产第一区二区三区| 91精品国产综合久久久久| 天堂午夜影视日韩欧美一区二区| 欧美日韩www| 日韩电影在线一区二区三区| 欧美一级片在线看| 精品亚洲成a人| 欧美激情自拍偷拍| 一本大道久久a久久精品综合| 亚洲精选视频在线| 欧美日韩免费观看一区三区| 婷婷中文字幕综合| 精品少妇一区二区三区视频免付费| 狠狠狠色丁香婷婷综合激情| 中文字幕欧美区| 欧美主播一区二区三区| 天天色天天操综合| 久久综合久色欧美综合狠狠| 国产.欧美.日韩| 亚洲精品高清在线| 欧美一级片免费看| 粉嫩高潮美女一区二区三区| 亚洲免费在线电影| 91精品一区二区三区久久久久久| 国产综合久久久久久鬼色| 国产精品久久久久婷婷二区次 |