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

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

?? serial.c

?? MCS-51的一個(gè)Free小型操作系統(tǒng),在KeilC中下編譯工作
?? C
字號(hào):
/*
	FreeRTOS.org V4.1.3 - Copyright (C) 2003-2006 Richard Barry.

	This file is part of the FreeRTOS.org distribution.

	FreeRTOS.org is free software; you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation; either version 2 of the License, or
	(at your option) any later version.

	FreeRTOS.org is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with FreeRTOS.org; if not, write to the Free Software
	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

	A special exception to the GPL can be applied should you wish to distribute
	a combined work that includes FreeRTOS.org, without being obliged to provide
	the source code for any proprietary components.  See the licensing section 
	of http://www.FreeRTOS.org for full details of how and when the exception
	can be applied.

	***************************************************************************
	See http://www.FreeRTOS.org for documentation, latest information, license 
	and contact details.  Please ensure to read the configuration and relevant 
	port sections of the online documentation.
	***************************************************************************
*/

/* 
	BASIC INTERRUPT DRIVEN SERIAL PORT DRIVER FOR USART0. 

	This file contains all the serial port components that can be compiled to
	either ARM or THUMB mode.  Components that must be compiled to ARM mode are
	contained in serialISR.c.
*/

/* Standard includes. */
#include <stdlib.h>

/* Scheduler includes. */
#include "FreeRTOS.h"
#include "queue.h"
#include "task.h"

/* Demo application includes. */
#include "serial.h"
#include "AT91R40008.h"
#include "usart.h"
#include "pio.h"
#include "aic.h"

/*-----------------------------------------------------------*/

/* Constants to setup and access the UART. */
#define portUSART0_AIC_CHANNEL	( ( unsigned portLONG ) 2 )

#define serINVALID_QUEUE		( ( xQueueHandle ) 0 )
#define serHANDLE				( ( xComPortHandle ) 1 )
#define serNO_BLOCK				( ( portTickType ) 0 )

/*-----------------------------------------------------------*/

/* Queues used to hold received characters, and characters waiting to be
transmitted. */
static xQueueHandle xRxedChars; 
static xQueueHandle xCharsForTx; 

/*-----------------------------------------------------------*/

/* 
 * The queues are created in serialISR.c as they are used from the ISR.
 * Obtain references to the queues and THRE Empty flag. 
 */
extern void vSerialISRCreateQueues(  unsigned portBASE_TYPE uxQueueLength, xQueueHandle *pxRxedChars, xQueueHandle *pxCharsForTx );

/*-----------------------------------------------------------*/

xComPortHandle xSerialPortInitMinimal( unsigned portLONG ulWantedBaud, unsigned portBASE_TYPE uxQueueLength )
{
unsigned portLONG ulSpeed;
unsigned portLONG ulCD;
xComPortHandle xReturn = serHANDLE;
extern void ( vUART_ISR )( void );

	/* The queues are used in the serial ISR routine, so are created from
	serialISR.c (which is always compiled to ARM mode. */
	vSerialISRCreateQueues( uxQueueLength, &xRxedChars, &xCharsForTx );

	if( 
		( xRxedChars != serINVALID_QUEUE ) && 
		( xCharsForTx != serINVALID_QUEUE ) && 
		( ulWantedBaud != ( unsigned portLONG ) 0 ) 
	  )
	{
		portENTER_CRITICAL();
		{
			/* Enable clock to USART0... */
			AT91C_BASE_PS->PS_PCER = AT91C_PS_US0;

			/* Disable all USART0 interrupt sources to begin... */
			AT91C_BASE_US0->US_IDR = 0xFFFFFFFF;

			/* Reset various status bits (just in case)... */
			AT91C_BASE_US0->US_CR = US_RSTSTA;

			AT91C_BASE_PIO->PIO_PDR = TXD0 | RXD0;  /* Enable RXD and TXD pins */
			AT91C_BASE_US0->US_CR = US_RSTRX | US_RSTTX | US_RXDIS | US_TXDIS;

			/* Clear Transmit and Receive Counters */
			AT91C_BASE_US0->US_RCR = 0;
			AT91C_BASE_US0->US_TCR = 0;

			/* Input clock to baud rate generator is MCK */
			ulSpeed = configCPU_CLOCK_HZ * 10;  
			ulSpeed = ulSpeed / 16;
			ulSpeed = ulSpeed / ulWantedBaud;
			
			/* compute the error */
			ulCD  = ulSpeed / 10;
			if ((ulSpeed - (ulCD * 10)) >= 5)
			ulCD++;

			/* Define the baud rate divisor register */
			AT91C_BASE_US0->US_BRGR = ulCD;

			/* Define the USART mode */
			AT91C_BASE_US0->US_MR = US_CLKS_MCK | US_CHRL_8 | US_PAR_NO | US_NBSTOP_1 | US_CHMODE_NORMAL;

			/* Write the Timeguard Register */
			AT91C_BASE_US0->US_TTGR = 0;

			/* Setup the interrupt for USART0.

			Store interrupt handler function address in USART0 vector register... */
			AT91C_BASE_AIC->AIC_SVR[ portUSART0_AIC_CHANNEL ] = (unsigned long)vUART_ISR;
			
			/* USART0 interrupt level-sensitive, priority 1... */
			AT91C_BASE_AIC->AIC_SMR[ portUSART0_AIC_CHANNEL ] = AIC_SRCTYPE_INT_LEVEL_SENSITIVE | 1;
			
			/* Clear some pending USART0 interrupts (just in case)... */
			AT91C_BASE_US0->US_CR = US_RSTSTA;

			/* Enable USART0 interrupt sources (but not Tx for now)... */
			AT91C_BASE_US0->US_IER = US_RXRDY;

			/* Enable USART0 interrupts in the AIC... */
			AT91C_BASE_AIC->AIC_IECR = ( 1 << portUSART0_AIC_CHANNEL );

			/* Enable receiver and transmitter... */
			AT91C_BASE_US0->US_CR = US_RXEN | US_TXEN;
		}
		portEXIT_CRITICAL();
	}
	else
	{
		xReturn = ( xComPortHandle ) 0;
	}

	return xReturn;
}
/*-----------------------------------------------------------*/

signed portBASE_TYPE xSerialGetChar( xComPortHandle pxPort, signed portCHAR *pcRxedChar, portTickType xBlockTime )
{
	/* The port handle is not required as this driver only supports UART0. */
	( void ) pxPort;

	/* Get the next character from the buffer.  Return false if no characters
	are available, or arrive before xBlockTime expires. */
	if( xQueueReceive( xRxedChars, pcRxedChar, xBlockTime ) )
	{
		return pdTRUE;
	}
	else
	{
		return pdFALSE;
	}
}
/*-----------------------------------------------------------*/

void vSerialPutString( xComPortHandle pxPort, const signed portCHAR * const pcString, unsigned portSHORT usStringLength )
{
signed portCHAR *pxNext;

	/* NOTE: This implementation does not handle the queue being full as no
	block time is used! */

	/* The port handle is not required as this driver only supports UART0. */
	( void ) pxPort;

	/* Send each character in the string, one at a time. */
	pxNext = ( signed portCHAR * ) pcString;
	while( *pxNext )
	{
		xSerialPutChar( pxPort, *pxNext, serNO_BLOCK );
		pxNext++;
	}
}
/*-----------------------------------------------------------*/

signed portBASE_TYPE xSerialPutChar( xComPortHandle pxPort, signed portCHAR cOutChar, portTickType xBlockTime )
{
	/* Place the character in the queue of characters to be transmitted. */
	if( xQueueSend( xCharsForTx, &cOutChar, xBlockTime ) != pdPASS )
	{
		return pdFAIL;
	}

	/* Turn on the Tx interrupt so the ISR will remove the character from the
	queue and send it.   This does not need to be in a critical section as
	if the interrupt has already removed the character the next interrupt
	will simply turn off the Tx interrupt again. */
	AT91C_BASE_US0->US_IER = US_TXRDY;

	return pdPASS;
}
/*-----------------------------------------------------------*/

void vSerialClose( xComPortHandle xPort )
{
	/* Not supported as not required by the demo application. */
}
/*-----------------------------------------------------------*/

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91国产福利在线| 美女一区二区视频| 不卡影院免费观看| 久久久久久久久久久99999| 亚洲福利视频一区| 91网上在线视频| 欧美一区二区三区四区久久| 亚洲综合一区在线| 成人一区二区三区视频在线观看| 日韩一区二区三区精品视频| 一区二区三区四区在线| 丰满放荡岳乱妇91ww| 日韩欧美一区二区视频| 男人的j进女人的j一区| 4438x成人网最大色成网站| 香蕉乱码成人久久天堂爱免费| 色伊人久久综合中文字幕| 国产精品久久久99| 99国产精品久久久久久久久久久| 国产农村妇女精品| 99免费精品视频| 一区二区三区在线观看动漫| 欧美日韩一区久久| 日韩av中文字幕一区二区| 91精品国产欧美一区二区| 男女男精品网站| 欧美成va人片在线观看| 国内精品视频666| 久久综合久久鬼色中文字| 国产一区二区三区| 亚洲国产精品高清| 在线一区二区三区四区五区| 亚洲综合久久av| 日韩欧美色电影| 国产乱码精品一品二品| 亚洲国产精品99久久久久久久久| 国产.欧美.日韩| 亚洲愉拍自拍另类高清精品| 日韩一区二区三区在线视频| 成人精品一区二区三区中文字幕| 一区二区三区色| 欧美国产日韩一二三区| 欧美福利视频一区| jizz一区二区| 国产乱国产乱300精品| 天天综合天天做天天综合| 久久久亚洲欧洲日产国码αv| 国产成+人+日韩+欧美+亚洲| 亚洲综合色丁香婷婷六月图片| 日韩欧美视频一区| 91欧美一区二区| 狠狠久久亚洲欧美| 婷婷综合在线观看| 亚洲精品乱码久久久久久| 久久亚洲私人国产精品va媚药| 成人在线综合网| 老鸭窝一区二区久久精品| 亚洲主播在线播放| 中文字幕制服丝袜成人av| 精品国产乱码久久久久久1区2区| 欧美天堂一区二区三区| 一本一道久久a久久精品 | 欧美精品高清视频| 国产成人亚洲综合a∨婷婷| 视频一区二区三区入口| 精品第一国产综合精品aⅴ| 91 com成人网| 欧美在线免费视屏| 一本久久a久久免费精品不卡| 国产一区二区调教| 韩国三级在线一区| 狂野欧美性猛交blacked| 五月激情六月综合| 婷婷一区二区三区| 日日摸夜夜添夜夜添亚洲女人| 亚洲成av人综合在线观看| 亚欧色一区w666天堂| 天天综合网 天天综合色| 日本欧美一区二区三区| 欧美aa在线视频| 国产精品1区2区3区在线观看| 国精产品一区一区三区mba桃花| 国产99精品国产| 99久久er热在这里只有精品15| 成人av在线电影| 9久草视频在线视频精品| 91麻豆6部合集magnet| 91福利在线看| 在线电影一区二区三区| 欧美日本在线一区| 日韩精品一区二区三区蜜臀| 精品国产污污免费网站入口 | 一区二区三区中文字幕在线观看| 亚洲最新在线观看| 免费观看一级特黄欧美大片| 国产不卡视频一区二区三区| 欧洲精品在线观看| 久久理论电影网| 日韩电影在线观看电影| 成人激情午夜影院| 日韩美女主播在线视频一区二区三区| 国产人久久人人人人爽| 亚洲国产色一区| 国产不卡在线一区| 日韩欧美一二区| 亚洲午夜成aⅴ人片| 夫妻av一区二区| 日韩免费看的电影| 性久久久久久久| av欧美精品.com| 久久亚洲私人国产精品va媚药| 亚洲黄网站在线观看| 国产91精品免费| 欧美刺激脚交jootjob| 国产精品美女久久久久久久久久久 | 中文字幕高清一区| 亚洲自拍欧美精品| 成人av电影在线网| 欧美日韩国产精品成人| 玉足女爽爽91| 91污片在线观看| 国产精品理论片| jlzzjlzz欧美大全| 亚洲精品伦理在线| 在线看国产一区二区| 一区二区三区精品在线观看| 91在线一区二区三区| 亚洲欧美日韩一区二区三区在线观看 | 欧美亚洲日本国产| 亚洲自拍都市欧美小说| 欧美吻胸吃奶大尺度电影| 亚洲一区二区精品3399| 欧美男同性恋视频网站| 青娱乐精品在线视频| 精品日韩一区二区| 国产在线视视频有精品| 久久久不卡网国产精品二区| 韩国女主播成人在线| 欧美国产一区在线| 不卡的av网站| 亚洲午夜在线视频| 欧美一级日韩一级| 国产精品亚洲综合一区在线观看| 国产亚洲一本大道中文在线| 97精品国产露脸对白| 亚洲高清免费在线| 久久精品视频免费观看| 91高清视频在线| 亚洲国产视频网站| 日韩精品一区二区三区三区免费| 成人精品电影在线观看| 午夜精品福利视频网站| 精品日韩欧美在线| 在线观看一区二区视频| 亚欧色一区w666天堂| 国产日产欧产精品推荐色| 91在线免费视频观看| 精品一区二区三区免费毛片爱 | 亚洲乱码精品一二三四区日韩在线| 日本韩国一区二区| 蜜臀久久99精品久久久久久9| 亚洲天堂成人网| 欧美一激情一区二区三区| 欧美自拍偷拍一区| 国产成人亚洲综合色影视| 日韩精品五月天| 亚洲另类春色国产| 久久亚洲一区二区三区四区| 69精品人人人人| 色狠狠av一区二区三区| 国产成人免费视频精品含羞草妖精| 亚洲一区二区视频在线观看| 中文字幕色av一区二区三区| 欧美一级国产精品| 欧美亚洲一区二区三区四区| aaa亚洲精品| 粉嫩嫩av羞羞动漫久久久| 国产精一品亚洲二区在线视频| 青青草伊人久久| 午夜激情久久久| 亚洲国产精品一区二区久久 | 亚洲精品高清在线| 一区二区三区在线免费观看| 国产亚洲综合色| 国产日韩成人精品| 91精品一区二区三区久久久久久| 国产+成+人+亚洲欧洲自线| 成人综合婷婷国产精品久久免费| 波多野结衣中文字幕一区| 成人午夜电影小说| 国产精品2024| 99久久精品情趣| 欧美亚洲愉拍一区二区| 在线观看中文字幕不卡| 欧美理论在线播放| 在线不卡免费欧美| 久久亚洲精精品中文字幕早川悠里 | 成人app网站| 欧美三级视频在线| 日韩精品最新网址|