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

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

?? serial.c

?? RT-Thread是發(fā)展中的下一代微內(nèi)核嵌入式實(shí)時(shí)操作系統(tǒng)
?? C
字號(hào):
/* * File      : serial.c * This file is part of RT-Thread RTOS * COPYRIGHT (C) 2006, RT-Thread Development Team * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at * http://openlab.rt-thread.com/license/LICENSE * * Change Logs: * Date           Author       Notes * 2006-03-13     Triseel      first version migrated on 9200 */#include <rtthread.h>#include <rthw.h>#include "AT9200.h"#include "serial.h"UARTPort_T UARTPorts[UART_MAXNum];/** * @addtogroup AT91RM9200 *//*@{*//** * This function is used to display a string on console, normally, it's * invoked by rt_kprintf * * @param str the displayed string *//*commented by Triseel,**i dont think waiting is a GI, when i magnited on Nucleus, i use FIFO method to fullfil the drv, i think it will be better, :-)*/void rt_console_puts(const char* str){	while (*str)	{		rt_serial_dbg_putc(*str++);	}}/*************************************************** Implemented : Triseel, Date : 06-03-03** Func Name   : UART_SetBaudRate** Comments    : set specified UART port BaudRate** Notes       : the baud rate is relative to CPU master clk, if ur CPU master clk changed, plz change CPU_MASTER_CLK val** Input  Args :**               pargUARTPort : the specified UART port ptr**               argBaudRate  : the wanna BaudRate to set** Output Args :**               none** Rtn    Val  :**               none*************************************************/voidUART_SetBaudRate(UARTPort_T *pargUARTPort, rt_uint32_t argBaudRate){	rt_uint16_t BaudDiv;	BaudDiv=CPU_MASTER_CLK/(argBaudRate*16);	REG_OUT32(pargUARTPort->BaseAddr, AT9200_UART_BRGR_OFF, BaudDiv);}/*************************************************** Implemented : Triseel, Date : 06-03-03** Func Name   : rt_serial_init** Comments    : do specified UART port init** Notes       :** Input  Args :**               pargUARTPort : UARTPort_T ptr, in fact, u should just evaluate the "Port" element as correct val** Output Args :**               none** Rtn    Val  :**               none*************************************************/voidrt_serial_init(UARTPort_T *pargUARTPort){	rt_uint8_t    PortNum;	rt_uint32_t   TempVal;	PortNum=pargUARTPort->Port;	if (PortNum>=UART_MAXNum)		return ;	else	{		if (pargUARTPort->bInited==0)  /*not inited*/		{			UARTPorts[PortNum].Port=PortNum;			if (pargUARTPort->DataBits==DataBits_Reserved)				UARTPorts[PortNum].DataBits=DataBits_8;			else				UARTPorts[PortNum].DataBits=pargUARTPort->DataBits;			if (pargUARTPort->Parity==Parity_Reserved)				UARTPorts[PortNum].Parity=Parity_None;			else				UARTPorts[PortNum].Parity=pargUARTPort->Parity;			if (pargUARTPort->StopBits==StopBits_Reserved)				UARTPorts[PortNum].StopBits=StopBits_1;			else				UARTPorts[PortNum].StopBits=pargUARTPort->StopBits;			UARTPorts[PortNum].BaudRate=pargUARTPort->BaudRate;			switch(PortNum)			{				case UART_DBG :					UARTPorts[PortNum].BaseAddr=AT9200_BASE_DBGU;					UARTPorts[PortNum].Vector=SYS_VEC;					/* config sys & peripheral */					/* read & clear UART int */					TempVal=REG_IN32(UARTPorts[PortNum].BaseAddr, AT9200_UART_CSR_OFF);					/* config PIO */					REG_OUT32(AT9200_PIOA_PDR  , 0x00, (1<<UARTDBG_TXD) | (1<UARTDBG_RXD));  /*as peripheral use*/					REG_OUT32(AT9200_PIOA_ASR  , 0x00, (1<<UARTDBG_TXD) | (1<UARTDBG_RXD));  /*as peripheral A*/					REG_OUT32(AT9200_PIOA_IFER , 0x00, (1<<UARTDBG_TXD) | (1<UARTDBG_RXD));  /*Filter enable*/					REG_OUT32(AT9200_PIOA_IDR  , 0x00, (1<<UARTDBG_TXD) | (1<UARTDBG_RXD));  /*interrupt disable*/					REG_OUT32(AT9200_PIOA_PPUER, 0x00, (1<<UARTDBG_TXD) | (1<UARTDBG_RXD));  /*pull-up resistor enabled*/					/* config PMC */					REG_OUT32(AT9200_PMC_PCER, 0x00, 1<<SYS_VEC);  /*enable UART_DBG PMC*/					break;				case UART_1 :					rt_memcpy(UARTPorts[PortNum].Name, "UART_1", sizeof("UART_1"));					/* semphore not created */					UARTPorts[PortNum].BaseAddr=AT9200_BASE_US0;					UARTPorts[PortNum].Vector=UART0_VEC;					/* config sys & peripheral */					/* read & clear UART int */					TempVal=REG_IN32(UARTPorts[PortNum].BaseAddr, AT9200_UART_CSR_OFF);					/* config PIO */					REG_OUT32(AT9200_PIOA_PDR  , 0x00, (1<<UART0_TXD) | (1<UART0_RXD));  /*as peripheral use*/					REG_OUT32(AT9200_PIOA_ASR  , 0x00, (1<<UART0_TXD) | (1<UART0_RXD));  /*as peripheral A*/					REG_OUT32(AT9200_PIOA_IFER , 0x00, (1<<UART0_TXD) | (1<UART0_RXD));  /*Filter enable*/					REG_OUT32(AT9200_PIOA_IDR  , 0x00, (1<<UART0_TXD) | (1<UART0_RXD));  /*int disable*/					REG_OUT32(AT9200_PIOA_PPUER, 0x00, (1<<UART0_TXD) | (1<UART0_RXD));  /*pull-up resistor enabled*/					/* config AIC */					REG_OUT32(AT9200_AIC_SMR , UART0_VEC*4, 0x20);   /*set int mode & priority*/					REG_OUT32(AT9200_AIC_IECR, 0x00, 1<<UART0_VEC);  /*enable UART0 int*/					/* config PMC */					REG_OUT32(AT9200_PMC_PCER, 0x00, 1<<UART0_VEC);  /*enable UART0 PMC*/					break;				case UART_2 :					rt_memcpy(UARTPorts[PortNum].Name, "UART_2", sizeof("UART_2"));					UARTPorts[PortNum].BaseAddr=AT9200_BASE_US1;					UARTPorts[PortNum].Vector=UART1_VEC;					break;				case UART_3 :					rt_memcpy(UARTPorts[PortNum].Name, "UART_3", sizeof("UART_3"));					UARTPorts[PortNum].BaseAddr=AT9200_BASE_US2;					UARTPorts[PortNum].Vector=UART2_VEC;					break;				case UART_4 :					rt_memcpy(UARTPorts[PortNum].Name, "UART_4", sizeof("UART_4"));					UARTPorts[PortNum].BaseAddr=AT9200_BASE_US3;					UARTPorts[PortNum].Vector=UART3_VEC;					break;			}			/*init UART cmn reg*/			REG_OUT32(UARTPorts[PortNum].BaseAddr, AT9200_UART_CR_OFF , 0xA0);  /*disable Tx & Rx*/			REG_OUT32(UARTPorts[PortNum].BaseAddr, AT9200_UART_CR_OFF , 0xAC);  /*disable Tx & Rx & rst Tx & Rx*/			REG_OUT32(UARTPorts[PortNum].BaseAddr, AT9200_UART_CR_OFF , 0x100); /*rst Status Bits*/			REG_OUT32(UARTPorts[PortNum].BaseAddr, AT9200_UART_IDR_OFF, 0xFFFFFFFF);  /*disable specified UART port all ints*/			UART_SetBaudRate(&UARTPorts[PortNum], UARTPorts[PortNum].BaudRate);  /*Setup baud rate*/			/*config mode & parity, data len, stop bits len*///			TempVal=UARTPorts[PortNum].DataBits | UARTPorts[PortNum].StopBits | UARTPorts[PortNum].Parity;			REG_OUT32(UARTPorts[PortNum].BaseAddr, AT9200_UART_MR_OFF , 0x800);			REG_OUT32(UARTPorts[PortNum].BaseAddr, AT9200_UART_CR_OFF , 0x0C);  /*rst Tx & Rx*/			REG_OUT32(UARTPorts[PortNum].BaseAddr, AT9200_UART_CR_OFF , 0x50);  /*enable Tx & RX*/			if (UARTPorts[PortNum].Port!=UART_DBG)  /*dbg UART will operate at no-int mode*/				REG_OUT32(UARTPorts[PortNum].BaseAddr, AT9200_UART_IER_OFF, AT9200_US_RXRDY_BIT);  /*enable Rx int*/			/*create sem to fullfil protect machenism*/			// UARTPorts[PortNum].Sem=rt_sem_create("UART_Sem", 1, RT_IPC_FLAG_FIFO);			UARTPorts[PortNum].bInited=1;		}	}}/*************************************************** Implemented : Triseel, Date : 06-03-03** Func Name   : rt_serial_getc** Comments    : get a char from UART port** Notes       :** Input  Args :**               none** Output Args :**               none** Rtn    Val  :**               read char*************************************************/charrt_serial_getc(void){	char RxVal='\0';	if (UARTPorts[UART_DBG].bInited)		RxVal=REG_IN32(UARTPorts[UART_DBG].BaseAddr, AT9200_UART_RHR_OFF);	return RxVal;}/*************************************************** Implemented : Triseel, Date : 06-03-03** Func Name   : rt_serial_dbg_getc** Comments    : get a char from UART dbg port** Notes       :** Input  Args :**               none** Output Args :**               none** Rtn    Val  :**               read char*************************************************/rt_uint8_trt_serial_dbg_getc(void){	char RxVal='\0';	if (UARTPorts[UART_DBG].bInited)		RxVal=REG_IN32(UARTPorts[UART_DBG].BaseAddr, AT9200_UART_RHR_OFF);	return RxVal;}/*************************************************** Implemented : Triseel, Date : 06-03-03** Func Name   : rt_serial_dbg_putc** Comments    : tx a char from UART dbg port** Notes       :** Input  Args :**               argTxVal : tx char** Output Args :**               none** Rtn    Val  :**               none*************************************************/voidrt_serial_dbg_putc(const char argTxVal){	if (argTxVal=='\n')		rt_serial_dbg_putc('\r');	while (  !(REG_IN32(UARTPorts[UART_DBG].BaseAddr, AT9200_UART_CSR_OFF)&AT9200_US_TXEMPTY_VAL)  );	REG_OUT32(UARTPorts[UART_DBG].BaseAddr, AT9200_UART_THR_OFF, argTxVal);}/*@}*/

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久草在线在线精品观看| 成人免费av网站| 中文字幕不卡在线播放| 欧美日韩国产综合一区二区三区 | 免费看欧美美女黄的网站| 国产亚洲一区二区三区| 91精品欧美一区二区三区综合在| 激情六月婷婷久久| 亚洲v中文字幕| 中文字幕日韩一区二区| xnxx国产精品| 欧美一区二区女人| 欧美影视一区二区三区| 成人免费视频网站在线观看| 激情图片小说一区| 香蕉影视欧美成人| 依依成人综合视频| 中文字幕一区二区三| 久久久精品人体av艺术| 日韩视频一区在线观看| 欧美日韩激情在线| 欧美体内she精视频| 色综合久久久久综合体桃花网| 国产精品自拍网站| 韩国v欧美v日本v亚洲v| 奇米影视一区二区三区小说| 亚洲成人动漫av| 亚洲在线观看免费| 一区二区不卡在线播放| 亚洲日本乱码在线观看| 国产精品色婷婷| 中文字幕免费观看一区| 久久精品一区二区三区av| 精品国产一区久久| 精品美女一区二区三区| 欧美一级夜夜爽| 日韩欧美一区在线观看| 日韩视频在线一区二区| 日韩写真欧美这视频| 欧美成人vps| 欧美videossexotv100| 欧美电影免费观看高清完整版在线观看 | 久久美女艺术照精彩视频福利播放| 666欧美在线视频| 538在线一区二区精品国产| 欧美日韩国产精品成人| 7777精品久久久大香线蕉| 9191久久久久久久久久久| 91精品国产综合久久精品图片| 91精品婷婷国产综合久久| 制服丝袜日韩国产| 精品国产乱码久久久久久图片| 久久免费视频一区| 国产精品免费久久久久| 国产精品国产三级国产aⅴ无密码| 中文字幕在线视频一区| 亚洲精品成人悠悠色影视| 亚洲一区二区黄色| 水野朝阳av一区二区三区| 免费成人美女在线观看| 国产经典欧美精品| aaa国产一区| 欧美日韩国产天堂| 精品精品国产高清a毛片牛牛 | 欧美色图12p| 91精品欧美一区二区三区综合在 | 美日韩黄色大片| 国产精品99久久不卡二区| 丰满白嫩尤物一区二区| 色呦呦国产精品| 欧美一级日韩免费不卡| 国产欧美一区二区精品性色| 一区二区视频免费在线观看| 日韩电影免费在线看| 国产99精品国产| 欧美最新大片在线看| 制服.丝袜.亚洲.中文.综合| 久久久久久久综合色一本| 亚洲欧美日韩综合aⅴ视频| 五月激情综合婷婷| 福利一区在线观看| 欧美日本在线播放| 国产亚洲精品7777| 午夜精品福利一区二区三区av| 国产最新精品精品你懂的| 波多野结衣的一区二区三区| 欧美日产在线观看| 国产欧美一区二区精品秋霞影院 | 国产麻豆成人精品| 色天使色偷偷av一区二区| 日韩女同互慰一区二区| 亚洲色图视频免费播放| 毛片一区二区三区| 色视频成人在线观看免| 久久久精品欧美丰满| 视频一区二区国产| 99久久国产综合精品女不卡| 日韩欧美国产一区在线观看| 亚洲图片另类小说| 国产在线精品一区二区不卡了| 色94色欧美sute亚洲线路二| 久久久综合九色合综国产精品| 亚洲国产精品自拍| 懂色av中文字幕一区二区三区| 91精品国产美女浴室洗澡无遮挡| 亚洲欧美综合色| 国产乱码精品一区二区三区五月婷| 日本韩国一区二区三区| 欧美激情自拍偷拍| 久久99精品网久久| 欧美日韩国产一区| 亚洲精品高清视频在线观看| 国产精品一区二区果冻传媒| 91精品国产福利| 亚洲午夜免费视频| 色综合网色综合| 国产精品天天看| 国产综合久久久久久鬼色 | 成人动漫在线一区| 久久伊人蜜桃av一区二区| 日韩影视精彩在线| 欧美日韩亚洲综合在线| 亚洲色图制服丝袜| 成人成人成人在线视频| 久久欧美一区二区| 国产一区二区三区av电影| 日韩一二在线观看| 老司机精品视频导航| 日韩一级片在线播放| 日韩和欧美的一区| 91精品在线一区二区| 日本午夜精品视频在线观看 | 中国色在线观看另类| 国产精品一区一区三区| 久久色视频免费观看| 久久99精品视频| 精品国产乱码久久久久久蜜臀| 蜜桃视频在线观看一区| 欧美一区二区在线观看| 免费观看久久久4p| 欧美大片一区二区| 精品一区二区三区在线播放视频| 欧美成人一区二区三区片免费| 极品少妇xxxx精品少妇| 久久亚洲一区二区三区四区| 国产乱码一区二区三区| 国产精品女主播在线观看| 成人精品gif动图一区| 亚洲色图.com| 欧美综合在线视频| 日本成人在线网站| 精品国产区一区| 成人午夜在线免费| 亚洲精品成a人| 亚洲天堂福利av| 色婷婷一区二区三区四区| 一区二区三区国产精华| 欧美精品欧美精品系列| 蜜乳av一区二区三区| 中文字幕欧美激情| 91精品福利在线| 免费成人美女在线观看.| 久久久久亚洲蜜桃| 99久久精品免费看国产| 亚洲第一av色| 久久亚洲春色中文字幕久久久| 成人午夜在线播放| 亚洲高清免费在线| 久久影音资源网| 91免费版pro下载短视频| 视频一区国产视频| 国产偷国产偷亚洲高清人白洁| 93久久精品日日躁夜夜躁欧美| 亚洲成a人v欧美综合天堂下载 | 亚洲裸体xxx| 日韩一级二级三级精品视频| 风间由美一区二区av101| 亚洲香肠在线观看| 精品国产第一区二区三区观看体验| a在线欧美一区| 免费精品视频在线| 椎名由奈av一区二区三区| 7878成人国产在线观看| www.亚洲精品| 麻豆精品一区二区| 亚洲美女在线国产| 久久女同互慰一区二区三区| 欧美综合亚洲图片综合区| 国产一区二区在线电影| 亚洲国产精品人人做人人爽| 久久久久久久久蜜桃| 欧美日韩另类一区| 99免费精品在线观看| 麻豆91精品91久久久的内涵| 亚洲免费观看视频| 久久久美女毛片| 欧美一区二区精品久久911| 91免费看片在线观看| 国产老女人精品毛片久久| 日本美女一区二区|