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

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

?? uart.c

?? C語言源代碼及相關資料
?? C
?? 第 1 頁 / 共 3 頁
字號:
/***********************************************Copyright (c)*********************************************
**                                Guangzou ZLG-MCU Development Co.,LTD.
**                                     
**                                       http://www.zlgmcu.com
**
**--------------File Info---------------------------------------------------------------------------------
** File name:			    uart.c
** Last modified Date:      2007-10-15
** Last Version:		    1.0
** Descriptions:		    串口的C文件
**
**--------------------------------------------------------------------------------------------------------
** Created by:			    wengshujie
** Created date:		    2007-10-15
** Version:				    1.0
** Descriptions:		    無
**
**--------------------------------------------------------------------------------------------------------
** Modified by:			    
** Modified Date:		    
** Version:				    
** Descriptions:		    
**
*********************************************************************************************************/
#include "Config.h"
#include "uart.h"

/*********************************************************************************************************
   定義操作UART器件的結構體,有多個器件就需要聲明多個結構體
*********************************************************************************************************/
static __UART_INFO    __UART0Info;                                      /*  定義UART0的一個結構體       */
static __UART_INFO    __UART1Info;
static __UART_INFO    __UART2Info;
static __UART_INFO    __UART3Info;

/*********************************************************************************************************
   下面使用指針數組來保存結構體指針,方便對該驅動的擴展
*********************************************************************************************************/
 __PUART_INFO    __GpuiUartInfoTab[__UART_MAX_NUM] = {&__UART0Info, &__UART1Info,
                                                      &__UART2Info, &__UART3Info};

/*********************************************************************************************************
   下面定義了UART基地址值,如果想增加UART器件可以在該位置添加相應的基地址即可
*********************************************************************************************************/
const uint32    __GuiUartBaseAddrTab[__UART_MAX_NUM] = {UART0_BASE_ADDR, UART1_BASE_ADDR,
                                                        UART2_BASE_ADDR, UART3_BASE_ADDR};
                                                         
/*********************************************************************************************************
   下面定義了UART硬件FIFO值,如果想增加UART器件可以在該位置添加相應的值即可
*********************************************************************************************************/
const uint32    __GuiUartFifoTab[__UART_MAX_NUM] = {UART0FIFOLENFUN, UART1FIFOLENFUN,
                                                    UART2FIFOLENFUN, UART3FIFOLENFUN};
                                                     
/*********************************************************************************************************
   下面定義了UART軟件接收FIFO大小值,如果有想增加UART器件可以在該位置添加相應的值即可
*********************************************************************************************************/
const uint32    __GuiQueueReviceFifoTab[__UART_MAX_NUM] = {QUEUE0REVICEFIFOLENFUN, 
                                                           QUEUE1REVICEFIFOLENFUN,
                                                           QUEUE2REVICEFIFOLENFUN,
                                                           QUEUE3REVICEFIFOLENFUN};  

/*********************************************************************************************************
   下面定義了UART軟件發送FIFO值,如果有想增加UART器件可以在該位置添加相應的值即可
*********************************************************************************************************/
const uint32    __GuiQueueSendFifoTab[__UART_MAX_NUM] = {QUEUE0SENDFIFOLENFUN, QUEUE1SENDFIFOLENFUN,
                                                         QUEUE2SENDFIFOLENFUN, QUEUE3SENDFIFOLENFUN};  
                                                              
 /*********************************************************************************************************
   下面定義了UART0的軟件FIFO數組
*********************************************************************************************************/ 
uint32 uiUatr0RxBuf[QUEUE0REVICEFIFOLENFUN];
uint32 uiUatr0TxBuf[QUEUE0SENDFIFOLENFUN];    

/*********************************************************************************************************
   下面定義了UART1的軟件FIFO數組
*********************************************************************************************************/ 
uint32 uiUatr1RxBuf[QUEUE1REVICEFIFOLENFUN];
uint32 uiUatr1TxBuf[QUEUE1SENDFIFOLENFUN]; 

/*********************************************************************************************************
   下面定義了UART2的軟件FIFO數組
*********************************************************************************************************/ 
uint32 uiUatr2RxBuf[QUEUE2REVICEFIFOLENFUN];
uint32 uiUatr2TxBuf[QUEUE2SENDFIFOLENFUN]; 

/*********************************************************************************************************
   下面定義了UART3的軟件FIFO數組
*********************************************************************************************************/ 
uint32 uiUatr3RxBuf[QUEUE3REVICEFIFOLENFUN];
uint32 uiUatr3TxBuf[QUEUE3SENDFIFOLENFUN];

/*********************************************************************************************************
   下面使用指針數組來保存UART軟件FIFO數組的首地址
*********************************************************************************************************/ 
 const	uint32 *GpuiUartReviceTab[__UART_MAX_NUM] = {uiUatr0RxBuf, uiUatr1RxBuf,  uiUatr2RxBuf, uiUatr3RxBuf};
 const	uint32 *GpuiUartSendTab[__UART_MAX_NUM] = {uiUatr0TxBuf, uiUatr1TxBuf,  uiUatr2TxBuf,uiUatr3TxBuf}; 




/*********************************************************************************************************
** Function name:			__uartBandRate
** Descriptions:			初始化UART波特率參數
** input parameters:		PUartInfo:          指向uart信息結構體的指針
**                          uibps:              波特率值
** Output parameters:       NONE
** Returned value:			OPERATE_SUCCESS:    操作成功
**                          OPERATE_FAIL:       操作失敗
*********************************************************************************************************/
static int32 __uartBandRate (__PUART_INFO PUartInfo, uint32 uibps)
{    
    volatile uint32  uiOffBase;
	volatile uint32 *puiAddrBase;
        
	puiAddrBase = PUartInfo->puiAddrBase;	                            /*  獲取結構體參數              */
	uiOffBase   = PUartInfo->uiOffBase;
	
	if ((uibps <= 115200) && (uibps >= 4800)) {							/*  參數過濾                    */
	    puiAddrBase[__B_UART_LCR << uiOffBase] |= 0x80;        		    /*  允許訪問分頻因子寄存器      */
	    			                                                    /*  設置波特率                  */
	    puiAddrBase[__B_UART_DLM << uiOffBase] = ((Fpclk / uibps) / 16) / 256;   
		puiAddrBase[__B_UART_DLL << uiOffBase] = ((Fpclk / uibps) / 16) % 256;		
 		puiAddrBase[__B_UART_LCR << uiOffBase] &= 0x7f;             	/*  禁止訪問分頻因子寄存器      */
	    return UART_OK;
	}
    return UART_NOK;
}

/*********************************************************************************************************
** Function name:			__uartMode
** Descriptions:			初始化UART的模式參數
** input parameters:		PUartInfo:          指向uart信息結構體的指針
**                          uiParaData:         參數指針
** Output parameters:       NONE
** Returned value:			OPERATE_SUCCESS:    操作成功
**                          OPERATE_FAIL:       操作失敗
*********************************************************************************************************/
static int32 __uartMode (__PUART_INFO PUartInfo, uint32 *uiParaData)
{
    volatile uint32 uiOffBase;
	volatile uint32 *puiAddrBase;
	
             uint32 uiBak;
             
	puiAddrBase = PUartInfo->puiAddrBase;	                            /*  獲取結構體參數              */
	uiOffBase   = PUartInfo->uiOffBase;

                                                                        /*  參數過濾                    */ 
	if ((uiParaData[DataBits] <5) || (uiParaData[DataBits] > 8)) {	
	    return UART_NOK;
	}
	if ((uiParaData[StopBits] == 0) || (uiParaData[StopBits] > 2)) { 	 
	    return UART_NOK;
	}
	if (uiParaData[Parity] > 4) {
	    return UART_NOK;
	}
	
	uiBak = uiParaData[DataBits] - 5;
	if (uiParaData[StopBits] == 2) {                                    /*  判斷是否為2位停止位         */
		uiBak |= 0x04;			
	}
	if (uiParaData[Parity] != 0) {
		uiParaData[Parity] = uiParaData[Parity] - 1;
		uiBak |= 0x08;                    					            /*  使能奇偶校驗	            */   
	}
	uiBak |= uiParaData[Parity] << 4;							        /*  設置奇偶校驗                */						 
    puiAddrBase[__B_UART_LCR << uiOffBase] = uiBak;           		    /*  禁止訪問分頻因子寄存器      */
    
	return UART_OK;
}                                                 
/*********************************************************************************************************
** Function name:			__uartInit
** Descriptions:			初始化UART,此函數供UartInit調用,不提供給用戶
** input parameters:		PUartInfo:          指向uart信息結構體的指針
**                          uiParaData:         參數指針
**                          uiReBufSize:        uart的接收緩沖區大小
**                          uiSeBufSize:        uart的發送緩沖區大小
** Output parameters:       NONE
** Returned value:			OPERATE_SUCCESS:    操作成功
**                          OPERATE_FAIL:       操作失敗
*********************************************************************************************************/
static uint32 __uartInit (__PUART_INFO PUartInfo,
                          uint32      *uiParaData, 
                          uint32      uiReBufSize, 
                          uint32      uiSeBufSize)
{
  volatile uint32 *puiAddrBase;
	volatile uint32 uiOffBase;
	         uint32 uiId;

#if defined(UART_SEMCONTROL)
	INT8U UartErr;
#endif // end #if defined(UART_SEMCONTROL)

	puiAddrBase = PUartInfo->puiAddrBase;
	uiOffBase   = PUartInfo->uiOffBase;
	uiId = PUartInfo->uiUartId;

#if defined(UART_SEMCONTROL)
	PUartInfo->pUartSem = OSSemCreate(1);
	if ( PUartInfo->pUartSem!=0 ) {
		OSSemPend(PUartInfo->pUartSem, 0, &UartErr);
#else
		OS_ENTER_CRITICAL();
#endif // end #if defined(UART_SEMCONTROL)
                                               /*  關中斷                     */     	
		if (QueueCreate((void *)PUartInfo->PdqReviceBuf, uiReBufSize, NULL, NULL) == NOT_OK) {	
	                                                                    /*  創建接收緩沖區             */
#if defined(UART_SEMCONTROL)
			OSSemPost(PUartInfo->pUartSem);
#else
			OS_EXIT_CRITICAL();
#endif // end #if defined(UART_SEMCONTROL)
			return UART_NOK;  
		}
		if (QueueCreate((void *)PUartInfo->PdqSendBuf, uiSeBufSize, NULL, NULL) == NOT_OK) { 	
	                                                                    /*  創建發送緩沖區             */
#if defined(UART_SEMCONTROL)
			OSSemPost(PUartInfo->pUartSem);
#else
			OS_EXIT_CRITICAL();
#endif // end #if defined(UART_SEMCONTROL)
			return UART_NOK;
		}
		PUartInfo->uiUartFlag = 0x80;									    /*  7位置位表示不用發送隊列緩沖
	                                                                      也就是禁止發送中斷         */
									
	                                                                  /*  參數過濾                   */
		if (uiParaData[BaudRate] < 9600  ) {	
			uiParaData[BaudRate] = 4800;
		}
		if (uiParaData[BaudRate] > 9600  ) {	
			uiParaData[BaudRate] = 115200;
		}
		if ((uiParaData[DataBits] < 5) || (uiParaData[DataBits] > 8)) {	
			uiParaData[DataBits] = 8;
		}
		if ((uiParaData[StopBits] == 0) || (uiParaData[StopBits] > 2)) { 	
			uiParaData[StopBits] = 1;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产欧美一区二区| 欧美日韩在线观看一区二区| 日本人妖一区二区| 五月婷婷久久丁香| 蜜臀va亚洲va欧美va天堂| 久久精品国产亚洲高清剧情介绍| 日韩av高清在线观看| 日韩精品成人一区二区三区| 日本怡春院一区二区| 麻豆精品久久久| 国产成人在线视频播放| 国产99精品视频| 91天堂素人约啪| 欧美日韩在线播放| 91麻豆精品国产综合久久久久久 | 亚洲男同性恋视频| 亚洲精品高清在线| 成人免费毛片app| 一本久道中文字幕精品亚洲嫩| 在线观看网站黄不卡| 欧美一区二区三区成人| 久久久久国产精品麻豆ai换脸 | 一区二区三区在线视频观看| 亚洲国产综合视频在线观看| 日韩激情一二三区| 久久99国产精品免费网站| 丁香婷婷综合色啪| 欧美精品一卡二卡| 国产精品女上位| 五月婷婷色综合| 成人午夜伦理影院| 欧美精三区欧美精三区 | 成人毛片在线观看| 欧美日韩情趣电影| 国产欧美日韩激情| 性感美女久久精品| 高清不卡在线观看| 日韩一区二区三区免费看| 国产精品萝li| 久久成人18免费观看| 色婷婷亚洲婷婷| 欧美国产激情一区二区三区蜜月| 亚洲国产成人91porn| 成人黄色大片在线观看| 欧美一区二区三级| 亚洲综合免费观看高清在线观看| 紧缚捆绑精品一区二区| 欧美无乱码久久久免费午夜一区| 国产日韩欧美一区二区三区综合| 亚洲福利一二三区| 91福利资源站| 国产精品欧美极品| 韩国成人在线视频| 91精品国产综合久久精品app| 综合久久久久久久| 国产suv精品一区二区883| 日韩亚洲欧美一区二区三区| 亚洲一二三级电影| 91视频免费看| 亚洲三级电影网站| 成人黄色av电影| 国产女同互慰高潮91漫画| 久久精品国产亚洲a| 日韩视频一区在线观看| 日韩**一区毛片| 日韩一区二区三| 三级精品在线观看| 91精品国产综合久久福利| 天堂一区二区在线| 欧美精品久久99久久在免费线| 亚洲综合色噜噜狠狠| 欧美亚一区二区| 亚洲福利一区二区三区| 欧美探花视频资源| 亚洲欧美电影院| 欧美三区免费完整视频在线观看| 亚洲综合在线五月| 欧美另类z0zxhd电影| 性做久久久久久| 日韩欧美国产综合在线一区二区三区 | 欧美另类久久久品| 国产精品白丝jk黑袜喷水| 日韩免费高清av| 国产精品一区二区无线| 国产日韩欧美精品综合| 成人av综合在线| 一区二区三区欧美视频| 欧美色精品在线视频| 日韩av在线播放中文字幕| 日韩精品中文字幕一区二区三区| 麻豆91在线观看| 久久欧美中文字幕| eeuss鲁一区二区三区| 亚洲自拍欧美精品| 欧美一级久久久久久久大片| 国精品**一区二区三区在线蜜桃| 国产欧美一区二区精品秋霞影院| 成人午夜大片免费观看| 亚洲欧美视频在线观看| 欧美欧美欧美欧美| 国产一区二区在线视频| 亚洲欧美另类小说| 91精品国产乱码久久蜜臀| 国产成人自拍在线| 亚洲一区二区三区中文字幕在线 | 大美女一区二区三区| 亚洲精品五月天| 精品国产一区a| 97国产精品videossex| 成人激情开心网| 美国一区二区三区在线播放| 国产日韩欧美精品电影三级在线| 欧美三级电影网| 国产黄色91视频| 亚洲午夜成aⅴ人片| 久久久九九九九| 日韩亚洲电影在线| 色999日韩国产欧美一区二区| 久久99久久99| 亚洲一区二区三区四区五区黄 | 亚洲女人小视频在线观看| 91精品午夜视频| 日本精品视频一区二区| 国产麻豆视频一区| 日韩不卡在线观看日韩不卡视频| 亚洲少妇屁股交4| 久久久高清一区二区三区| 在线观看91av| 91久久免费观看| 成人18视频日本| 国产一区二区影院| 久久不见久久见免费视频1| 亚洲综合免费观看高清完整版| 欧美激情艳妇裸体舞| 精品99一区二区| 欧美一区二区三区色| 日本道精品一区二区三区| 国产精品12区| 国产夫妻精品视频| 青青草原综合久久大伊人精品| 亚洲一区视频在线| 亚洲激情图片一区| 亚洲男人的天堂在线aⅴ视频| 欧美精品一区男女天堂| 欧美一区二区三区男人的天堂| 欧美色电影在线| 久久综合色之久久综合| 88在线观看91蜜桃国自产| 欧美色爱综合网| 91精品国产福利| 日韩欧美国产一二三区| 欧美一区二区三区在线观看| 欧美一区日韩一区| 欧美一级夜夜爽| 欧美v日韩v国产v| 精品久久久久久久久久久久久久久 | 国产精品美女久久久久av爽李琼| 国产日韩欧美精品在线| 中文字幕不卡在线播放| 国产精品色一区二区三区| 国产精品乱码人人做人人爱| 国产精品第13页| 亚洲精品五月天| 日韩成人一区二区| 久久精品国产精品青草| 国产精品1024久久| 91麻豆文化传媒在线观看| 日本精品免费观看高清观看| 欧美在线免费视屏| 51精品秘密在线观看| 欧美mv和日韩mv国产网站| 精品国产一区二区三区四区四 | 精品亚洲成a人在线观看| 国产剧情一区在线| 91麻豆6部合集magnet| 欧美三级视频在线播放| 精品欧美一区二区在线观看 | 99视频有精品| 欧美日韩一二区| 欧美大胆人体bbbb| 国产欧美视频在线观看| 亚洲综合色视频| 国产曰批免费观看久久久| 一本色道综合亚洲| 日韩欧美国产精品| 中文字幕一区三区| 天堂久久久久va久久久久| 国产毛片精品一区| 精品视频在线免费看| 久久久久久夜精品精品免费| 一区二区三区加勒比av| 国产一区三区三区| 欧美色手机在线观看| 久久久综合激的五月天| 亚洲国产乱码最新视频| 国产xxx精品视频大全| 91精品国产美女浴室洗澡无遮挡| 国产精品国模大尺度视频| 日本不卡的三区四区五区| 91天堂素人约啪|