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

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

?? serial.c

?? 最新版FreeRTOS, 包擴多種開發(fā)平臺的移植
?? C
字號:
/*
	FreeRTOS.org V4.1.1 - 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 DEMO PURPOSES */
#include <stdlib.h>
#include "FreeRTOS.h"
#include "queue.h"
#include "task.h"
#include "serial.h"

/* Constants required to setup the serial control register. */
#define ser8_BIT_MODE			( ( unsigned portCHAR ) 0x40 )
#define serRX_ENABLE			( ( unsigned portCHAR ) 0x10 )

/* Constants to setup the timer used to generate the baud rate. */
#define serCLOCK_DIV_48			( ( unsigned portCHAR ) 0x03 )
#define serUSE_PRESCALED_CLOCK	( ( unsigned portCHAR ) 0x10 )
#define ser8BIT_WITH_RELOAD		( ( unsigned portCHAR ) 0x20 )
#define serSMOD					( ( unsigned portCHAR ) 0x10 )

static xQueueHandle xRxedChars; 
static xQueueHandle xCharsForTx; 

data static unsigned portBASE_TYPE uxTxEmpty;

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

xComPortHandle xSerialPortInitMinimal( unsigned portLONG ulWantedBaud, unsigned portBASE_TYPE uxQueueLength )
{
unsigned portLONG ulReloadValue;
const portFLOAT fBaudConst = ( portFLOAT ) configCPU_CLOCK_HZ * ( portFLOAT ) 2.0;
unsigned portCHAR ucOriginalSFRPage;

	portENTER_CRITICAL();
	{
		ucOriginalSFRPage = SFRPAGE;
		SFRPAGE = 0;

		uxTxEmpty = pdTRUE;

		/* Create the queues used by the com test task. */
		xRxedChars = xQueueCreate( uxQueueLength, ( unsigned portBASE_TYPE ) sizeof( portCHAR ) );
		xCharsForTx = xQueueCreate( uxQueueLength, ( unsigned portBASE_TYPE ) sizeof( portCHAR ) );
	
		/* Calculate the baud rate to use timer 1. */
		ulReloadValue = ( unsigned portLONG ) ( ( ( portFLOAT ) 256 - ( fBaudConst / ( portFLOAT ) ( 32 * ulWantedBaud ) ) ) + ( portFLOAT ) 0.5 );

		/* Set timer one for desired mode of operation. */
		TMOD &= 0x08;
		TMOD |= ser8BIT_WITH_RELOAD;
		SSTA0 |= serSMOD;

		/* Set the reload and start values for the time. */
		TL1 = ( unsigned portCHAR ) ulReloadValue;
		TH1 = ( unsigned portCHAR ) ulReloadValue;

		/* Setup the control register for standard n, 8, 1 - variable baud rate. */
		SCON = ser8_BIT_MODE | serRX_ENABLE;

		/* Enable the serial port interrupts */
		ES = 1;

		/* Start the timer. */
		TR1 = 1;

		SFRPAGE = ucOriginalSFRPage;
	}
	portEXIT_CRITICAL();
	
	/* Unlike some ports, this serial code does not allow for more than one
	com port.  We therefore don't return a pointer to a port structure and can
	instead just return NULL. */
	return NULL;
}
/*-----------------------------------------------------------*/

void vSerialISR( void ) interrupt 4
{
portCHAR cChar;
portBASE_TYPE xTaskWokenByRx = pdFALSE, xTaskWokenByTx = pdFALSE;

	/* 8051 port interrupt routines MUST be placed within a critical section
	if taskYIELD() is used within the ISR! */

	portENTER_CRITICAL();
	{
		if( RI ) 
		{
			/* Get the character and post it on the queue of Rxed characters.
			If the post causes a task to wake force a context switch as the woken task
			may have a higher priority than the task we have interrupted. */
			cChar = SBUF;
			RI = 0;

			if( xQueueSendFromISR( xRxedChars, &cChar, pdFALSE ) )
			{
				xTaskWokenByRx = ( portBASE_TYPE ) pdTRUE;
			}
		}

		if( TI ) 
		{
			if( xQueueReceiveFromISR( xCharsForTx, &cChar, &xTaskWokenByTx ) == ( portBASE_TYPE ) pdTRUE )
			{
				/* Send the next character queued for Tx. */
				SBUF = cChar;
			}
			else
			{
				/* Queue empty, nothing to send. */
				uxTxEmpty = pdTRUE;
			}

			TI = 0;
		}
	
		if( xTaskWokenByRx || xTaskWokenByTx )
		{
			portYIELD();
		}
	}
	portEXIT_CRITICAL();
}
/*-----------------------------------------------------------*/

portBASE_TYPE xSerialGetChar( xComPortHandle pxPort, signed portCHAR *pcRxedChar, portTickType xBlockTime )
{
	/* There is only one port supported. */
	( 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 ( portBASE_TYPE ) pdTRUE;
	}
	else
	{
		return ( portBASE_TYPE ) pdFALSE;
	}
}
/*-----------------------------------------------------------*/

portBASE_TYPE xSerialPutChar( xComPortHandle pxPort, signed portCHAR cOutChar, portTickType xBlockTime )
{
portBASE_TYPE xReturn;

	/* There is only one port supported. */
	( void ) pxPort;

	portENTER_CRITICAL();
	{
		if( uxTxEmpty == pdTRUE )
		{
			SBUF = cOutChar;
			uxTxEmpty = pdFALSE;
			xReturn = ( portBASE_TYPE ) pdTRUE;
		}
		else
		{
			xReturn = xQueueSend( xCharsForTx, &cOutChar, xBlockTime );

			if( xReturn == ( portBASE_TYPE ) pdFALSE )
			{
				xReturn = ( portBASE_TYPE ) pdTRUE;
			}
		}
	}
	portEXIT_CRITICAL();

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

void vSerialClose( xComPortHandle xPort )
{
	/* Not implemented in this port. */
	( void ) xPort;
}
/*-----------------------------------------------------------*/





?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩午夜在线视频| 精品亚洲免费视频| 精品捆绑美女sm三区| 亚洲欧美国产77777| 色视频成人在线观看免| 久久久久久97三级| 欧美在线视频日韩| 成人免费高清在线| 久久国产麻豆精品| 偷拍与自拍一区| 亚洲婷婷国产精品电影人久久| 日韩三级视频中文字幕| 欧美日韩国产经典色站一区二区三区| 国产在线国偷精品免费看| 五月激情综合网| 中文字幕亚洲电影| 国产亚洲精品bt天堂精选| 日韩一区二区三区av| 色婷婷精品久久二区二区蜜臀av| 国产一区二区三区黄视频 | 国产成人自拍在线| 蜜臀国产一区二区三区在线播放| 亚洲另类在线视频| 亚洲国产精品精华液2区45| 欧美一区二区三区在线观看视频| 97se亚洲国产综合在线| 成人高清视频在线| 国产传媒日韩欧美成人| 国产中文字幕精品| 韩国一区二区在线观看| 久久99蜜桃精品| 欧美少妇xxx| 色婷婷精品久久二区二区蜜臂av | 精品国产乱码久久久久久浪潮| 欧美日韩情趣电影| 欧美影院一区二区| 欧日韩精品视频| 色综合 综合色| 91蜜桃传媒精品久久久一区二区| 国产福利精品导航| 丰满少妇久久久久久久| 国产成都精品91一区二区三| 国产精品亚洲午夜一区二区三区 | 亚洲国产精品久久人人爱蜜臀| 一区二区三区小说| 亚洲h在线观看| 视频一区二区国产| 免费成人在线播放| 国产精品白丝jk白祙喷水网站| 国产高清久久久| av成人动漫在线观看| 在线观看一区二区视频| 欧美一区二区三区日韩| 欧美成人女星排名| 欧美激情综合五月色丁香小说| 亚洲福利一区二区| 欧美私人免费视频| 欧美日韩成人在线一区| 91精品国产综合久久精品| 国内精品伊人久久久久av影院 | 亚洲欧美电影院| 欧美日韩精品免费观看视频 | 亚洲精品免费电影| 欧美一级欧美三级在线观看| 国产一区二区三区| 亚洲欧美另类在线| 91精品综合久久久久久| 国产精品一级黄| 午夜精品aaa| 欧美国产一区二区| 欧美一区二区三区视频在线观看| 国产一区久久久| 亚洲国产成人av| 久久久久免费观看| 欧美在线小视频| 国产成人激情av| 性做久久久久久| 综合电影一区二区三区| 日韩一卡二卡三卡| 日本精品视频一区二区| 国产自产2019最新不卡| 天天影视色香欲综合网老头| 国产精品免费丝袜| xvideos.蜜桃一区二区| 在线一区二区三区四区五区| 国产馆精品极品| 一本色道**综合亚洲精品蜜桃冫 | 亚洲福利一二三区| 中文字幕一区二区三区四区| 日韩女同互慰一区二区| 欧美亚洲国产一区二区三区va| 高清视频一区二区| 狠狠色丁香久久婷婷综合_中 | 欧美va亚洲va在线观看蝴蝶网| 91网站最新网址| eeuss鲁片一区二区三区在线看| 免费日本视频一区| 亚洲不卡av一区二区三区| 亚洲人成伊人成综合网小说| 欧美激情在线观看视频免费| 精品国产污网站| 欧美大片在线观看一区二区| 欧美日本在线看| 色哟哟国产精品| 91丨porny丨户外露出| av中文字幕不卡| 成人97人人超碰人人99| 国产电影一区二区三区| 国产一区二区三区久久久 | 麻豆91精品91久久久的内涵| 偷偷要91色婷婷| 青青草国产精品97视觉盛宴| 首页亚洲欧美制服丝腿| 午夜精品久久久久久不卡8050| 亚洲国产一区二区在线播放| 一区二区日韩av| 亚洲第一二三四区| 亚洲成人黄色影院| 人禽交欧美网站| 精品在线播放午夜| 国产精品69毛片高清亚洲| 国产麻豆成人精品| 高清日韩电视剧大全免费| 国产精品1区2区3区在线观看| 国产福利电影一区二区三区| 波多野结衣在线一区| 99久久综合狠狠综合久久| 一本色道亚洲精品aⅴ| 精品视频在线免费观看| 日韩精品一区二| 国产亚洲欧美日韩日本| 国产精品久久久久久久久动漫| 中文字幕欧美国产| 亚洲精品视频免费看| 日韩在线一区二区| 国产成人av福利| 91久久精品一区二区| 欧美肥妇free| 亚洲国产精品99久久久久久久久| 亚洲欧洲色图综合| 午夜精品aaa| 国产成人在线视频网站| 欧美视频日韩视频在线观看| 久久影院午夜片一区| 国产精品久久二区二区| 亚洲一级二级三级在线免费观看| 男女视频一区二区| 99在线精品免费| 91麻豆精品国产91| 国产精品免费久久久久| 日韩和欧美一区二区三区| 国产综合色精品一区二区三区| 欧美大片在线观看| 亚洲美女视频一区| 狠狠色2019综合网| 欧美性一级生活| 国产欧美精品一区| 天堂久久久久va久久久久| 成人丝袜视频网| 日韩欧美国产一区在线观看| 中文字幕日韩精品一区| 久久精品国产在热久久| 在线观看日韩一区| 国产日韩精品久久久| 日韩精品三区四区| 色综合天天天天做夜夜夜夜做| 欧美精品一区二区久久婷婷| 亚洲综合免费观看高清完整版| 国产一区二区伦理片| 91精品国产综合久久久久久久久久| 国产精品久久久久久久久免费桃花 | 亚洲福利视频一区二区| 丁香啪啪综合成人亚洲小说 | 91久久久免费一区二区| 欧美高清在线精品一区| 精品一区二区三区在线观看国产| 日本高清免费不卡视频| 国产精品国产精品国产专区不蜜 | 欧美国产一区在线| 国产一区二区按摩在线观看| 在线91免费看| 亚洲一区二区不卡免费| 色婷婷av久久久久久久| 亚洲欧美另类小说视频| av成人老司机| 综合久久久久久久| 91在线观看下载| 国产精品欧美一区二区三区| 国产成人在线视频网站| 久久久久久久久久久久久女国产乱| 美女看a上一区| 欧美第一区第二区| 激情深爱一区二区| 欧美va亚洲va香蕉在线| 蜜臀99久久精品久久久久久软件| 欧美高清视频在线高清观看mv色露露十八| 自拍偷自拍亚洲精品播放| 一本大道久久a久久精二百| 国产在线不卡视频| 久久久综合精品|