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

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

?? port.c

?? FreeRTOSV4.1.0 安裝文件 FreeRTOS 是一個源碼公開的免費的嵌入式實時操作系統
?? C
字號:
/*
	FreeRTOS.org V4.1.0 - 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.
	***************************************************************************
*/


/*-----------------------------------------------------------
 * Implementation of functions defined in portable.h for the Atmel AT91R40008
 * port.
 *
 * Components that can be compiled to either ARM or THUMB mode are
 * contained in this file.  The ISR routines, which can only be compiled
 * to ARM mode are contained in portISR.c.
 *----------------------------------------------------------*/

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

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

/* Hardware specific definitions. */
#include "AT91R40008.h"
#include "pio.h"
#include "aic.h"
#include "tc.h"

/* Constants required to setup the task context. */
#define portINITIAL_SPSR				( ( portSTACK_TYPE ) 0x1f ) /* System mode, ARM mode, interrupts enabled. */
#define portTHUMB_MODE_BIT				( ( portSTACK_TYPE ) 0x20 )
#define portINSTRUCTION_SIZE			( ( portSTACK_TYPE ) 4 )
#define portNO_CRITICAL_SECTION_NESTING	( ( portSTACK_TYPE ) 0 )
#define portTICK_PRIORITY_6				( 6 )
/*-----------------------------------------------------------*/

/* Setup the timer to generate the tick interrupts. */
static void prvSetupTimerInterrupt( void );

/* 
 * The scheduler can only be started from ARM mode, so 
 * vPortISRStartFirstSTask() is defined in portISR.c. 
 */
extern void vPortISRStartFirstTask( void );

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

/* 
 * Initialise the stack of a task to look exactly as if a call to 
 * portSAVE_CONTEXT had been called.
 *
 * See header file for description. 
 */
portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE pxCode, void *pvParameters )
{
portSTACK_TYPE *pxOriginalTOS;

	pxOriginalTOS = pxTopOfStack;

	/* Setup the initial stack of the task.  The stack is set exactly as 
	expected by the portRESTORE_CONTEXT() macro. */

	/* First on the stack is the return address - which in this case is the
	start of the task.  The offset is added to make the return address appear
	as it would within an IRQ ISR. */
	*pxTopOfStack = ( portSTACK_TYPE ) pxCode + portINSTRUCTION_SIZE;		
	pxTopOfStack--;

	*pxTopOfStack = ( portSTACK_TYPE ) 0xaaaaaaaa;	/* R14 */
	pxTopOfStack--;	
	*pxTopOfStack = ( portSTACK_TYPE ) pxOriginalTOS; /* Stack used when task starts goes in R13. */
	pxTopOfStack--;
	*pxTopOfStack = ( portSTACK_TYPE ) 0x12121212;	/* R12 */
	pxTopOfStack--;	
	*pxTopOfStack = ( portSTACK_TYPE ) 0x11111111;	/* R11 */
	pxTopOfStack--;	
	*pxTopOfStack = ( portSTACK_TYPE ) 0x10101010;	/* R10 */
	pxTopOfStack--;	
	*pxTopOfStack = ( portSTACK_TYPE ) 0x09090909;	/* R9 */
	pxTopOfStack--;	
	*pxTopOfStack = ( portSTACK_TYPE ) 0x08080808;	/* R8 */
	pxTopOfStack--;	
	*pxTopOfStack = ( portSTACK_TYPE ) 0x07070707;	/* R7 */
	pxTopOfStack--;	
	*pxTopOfStack = ( portSTACK_TYPE ) 0x06060606;	/* R6 */
	pxTopOfStack--;	
	*pxTopOfStack = ( portSTACK_TYPE ) 0x05050505;	/* R5 */
	pxTopOfStack--;	
	*pxTopOfStack = ( portSTACK_TYPE ) 0x04040404;	/* R4 */
	pxTopOfStack--;	
	*pxTopOfStack = ( portSTACK_TYPE ) 0x03030303;	/* R3 */
	pxTopOfStack--;	
	*pxTopOfStack = ( portSTACK_TYPE ) 0x02020202;	/* R2 */
	pxTopOfStack--;	
	*pxTopOfStack = ( portSTACK_TYPE ) 0x01010101;	/* R1 */
	pxTopOfStack--;	

	/* When the task starts is will expect to find the function parameter in
	R0. */
	*pxTopOfStack = ( portSTACK_TYPE ) pvParameters; /* R0 */
	pxTopOfStack--;

	/* The last thing onto the stack is the status register, which is set for
	system mode, with interrupts enabled. */
	*pxTopOfStack = ( portSTACK_TYPE ) portINITIAL_SPSR;

	#ifdef THUMB_INTERWORK
	{
		/* We want the task to start in thumb mode. */
		*pxTopOfStack |= portTHUMB_MODE_BIT;
	}
	#endif

	pxTopOfStack--;

	/* Some optimisation levels use the stack differently to others.  This 
	means the interrupt flags cannot always be stored on the stack and will
	instead be stored in a variable, which is then saved as part of the
	tasks context. */
	*pxTopOfStack = portNO_CRITICAL_SECTION_NESTING;

	return pxTopOfStack;
}
/*-----------------------------------------------------------*/

portBASE_TYPE xPortStartScheduler( void )
{
	/* Start the timer that generates the tick ISR.  Interrupts are disabled
	here already. */
	prvSetupTimerInterrupt();

	/* Start the first task. */
	vPortISRStartFirstTask();	

	/* Should not get here! */
	return 0;
}
/*-----------------------------------------------------------*/

void vPortEndScheduler( void )
{
	/* It is unlikely that the ARM port will require this function as there
	is nothing to return to.  */
}
/*-----------------------------------------------------------*/

/*
 * Setup the tick timer to generate the tick interrupts at the required frequency.
 */
static void prvSetupTimerInterrupt( void )
{
volatile unsigned portLONG ulDummy;

	/* Enable clock to the tick timer... */
	AT91C_BASE_PS->PS_PCER = portTIMER_CLK_ENABLE_BIT;

	/* Stop the tick timer... */
	portTIMER_REG_BASE_PTR->TC_CCR = TC_CLKDIS;

	/* Start with tick timer interrupts disabled... */
	portTIMER_REG_BASE_PTR->TC_IDR = 0xFFFFFFFF;

	/* Clear any pending tick timer interrupts... */
	ulDummy = portTIMER_REG_BASE_PTR->TC_SR;

	/* Store interrupt handler function address in tick timer vector register...
	The ISR installed depends on whether the preemptive or cooperative
	scheduler is being used. */
	#if configUSE_PREEMPTION == 1
	{
		extern void ( vPreemptiveTick )( void );
		AT91C_BASE_AIC->AIC_SVR[portTIMER_AIC_CHANNEL] = ( unsigned portLONG ) vPreemptiveTick;
	}
	#else  // else use cooperative scheduler
	{
		extern void ( vNonPreemptiveTick )( void );
		AT91C_BASE_AIC->AIC_SVR[portTIMER_AIC_CHANNEL] = ( unsigned portLONG ) vNonPreemptiveTick;
	}
	#endif

	/* Tick timer interrupt level-sensitive, priority 6... */
	AT91C_BASE_AIC->AIC_SMR[ portTIMER_AIC_CHANNEL ] = AIC_SRCTYPE_INT_LEVEL_SENSITIVE | portTICK_PRIORITY_6;

	/* Enable the tick timer interrupt...

	First at timer level */
	portTIMER_REG_BASE_PTR->TC_IER = TC_CPCS;

	/* Then at the AIC level. */
	AT91C_BASE_AIC->AIC_IECR = (1 << portTIMER_AIC_CHANNEL);

	/* Calculate timer compare value to achieve the desired tick rate... */
	if( (configCPU_CLOCK_HZ / (configTICK_RATE_HZ * 2) ) <= 0xFFFF )
	{
		/* The tick rate is fast enough for us to use the faster timer input
		clock (main clock / 2). */
		portTIMER_REG_BASE_PTR->TC_CMR = TC_WAVE | TC_CLKS_MCK2 | TC_BURST_NONE | TC_CPCTRG;
		portTIMER_REG_BASE_PTR->TC_RC  = configCPU_CLOCK_HZ / (configTICK_RATE_HZ * 2);
	}
	else
	{
		/* We must use a slower timer input clock (main clock / 8) because the
		tick rate is too slow for the faster input clock. */
		portTIMER_REG_BASE_PTR->TC_CMR = TC_WAVE | TC_CLKS_MCK8 | TC_BURST_NONE | TC_CPCTRG;
		portTIMER_REG_BASE_PTR->TC_RC  = configCPU_CLOCK_HZ / (configTICK_RATE_HZ * 8);
	}

	/* Start tick timer... */
	portTIMER_REG_BASE_PTR->TC_CCR = TC_SWTRG | TC_CLKEN;
}
/*-----------------------------------------------------------*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色播五月激情综合网| 国产精品久久精品日日| 欧美日韩mp4| 精品视频在线看| 欧美日韩一区二区三区在线| 欧洲一区在线电影| 在线免费不卡电影| 欧美精品第1页| 555夜色666亚洲国产免| 欧美一区二区三区的| 欧美高清激情brazzers| 这里只有精品99re| 日韩精品专区在线影院重磅| 日韩一级片网址| 精品国产乱码91久久久久久网站| 97久久精品人人澡人人爽| 开心九九激情九九欧美日韩精美视频电影| 成人欧美一区二区三区在线播放| 欧美另类一区二区三区| 成人精品gif动图一区| 99久久久国产精品免费蜜臀| 国产亚洲精品精华液| 激情综合色丁香一区二区| 在线视频综合导航| 在线不卡一区二区| 欧美影院精品一区| 日本韩国欧美在线| 中文字幕av不卡| 国产亚洲精久久久久久| 欧美日韩美少妇| 色老汉一区二区三区| 成人高清视频在线观看| 亚洲一区av在线| 久久久99精品免费观看不卡| 成人毛片在线观看| 国产福利一区二区三区| 日本最新不卡在线| 国产一区二区三区视频在线播放| 韩国女主播一区| 成人教育av在线| 国产成人精品三级| 岛国av在线一区| 91香蕉视频污在线| 国产激情偷乱视频一区二区三区| 久久99久久久欧美国产| 99久久99久久久精品齐齐| 这里是久久伊人| 日韩午夜激情av| 国产欧美中文在线| 中文在线一区二区| 中文字幕成人在线观看| 久久久久久久久蜜桃| 国产精品沙发午睡系列990531| 专区另类欧美日韩| 日韩一级成人av| 日本一区二区不卡视频| 国产精品综合二区| 日本久久精品电影| 日韩欧美中文一区二区| 在线播放亚洲一区| 午夜成人免费电影| 欧美高清性hdvideosex| 免费成人av资源网| 一本到一区二区三区| 在线91免费看| 日韩影视精彩在线| 久久综合五月天婷婷伊人| 色婷婷国产精品| 欧美aaaaaa午夜精品| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 亚洲制服丝袜在线| 成人小视频免费观看| 26uuu亚洲| 韩国成人福利片在线播放| 精品欧美乱码久久久久久1区2区| 日韩经典中文字幕一区| 欧美日韩欧美一区二区| 亚洲成人自拍偷拍| 7777精品伊人久久久大香线蕉最新版| 亚洲二区在线视频| 欧美日韩免费一区二区三区视频| 亚洲午夜一二三区视频| 在线成人免费视频| 免费看日韩a级影片| 精品久久久久一区二区国产| 久久国产精品色婷婷| 日韩一级精品视频在线观看| 久久国产麻豆精品| 久久午夜电影网| 国产69精品久久久久777| 中文字幕欧美区| 色婷婷久久久亚洲一区二区三区| 亚洲免费在线播放| 欧美人动与zoxxxx乱| 免费精品视频最新在线| 精品免费国产一区二区三区四区| 国产乱淫av一区二区三区| 欧美经典一区二区三区| 成人的网站免费观看| 一区二区在线观看不卡| 欧美群妇大交群中文字幕| 精品一区二区三区免费视频| 国产亚洲欧美日韩日本| 99久久精品国产麻豆演员表| 中文字幕人成不卡一区| 亚洲bt欧美bt精品| 蜜臀久久99精品久久久久久9| 日韩精品电影一区亚洲| 亚欧色一区w666天堂| 亚洲国产综合91精品麻豆| 久久久久久亚洲综合| 欧美精品一区二| 精品福利在线导航| 日本二三区不卡| 在线精品国精品国产尤物884a| 欧美伊人精品成人久久综合97| 亚洲男人的天堂av| 国产成人日日夜夜| 亚洲一卡二卡三卡四卡| 91麻豆精品国产91久久久 | 亚洲福利电影网| 久久婷婷色综合| 9人人澡人人爽人人精品| 亚洲综合成人网| 一本大道久久精品懂色aⅴ| 久久不见久久见免费视频7| 国产乱色国产精品免费视频| 精品在线免费观看| 久久国产综合精品| 老色鬼精品视频在线观看播放| 一区二区三区免费观看| 日韩电影网1区2区| 午夜精品福利视频网站| 亚洲免费观看高清在线观看| 中文字幕欧美三区| 综合欧美亚洲日本| 久久久精品国产免费观看同学| 国产精品一线二线三线精华| 中文字幕亚洲一区二区av在线| 丁香激情综合国产| 蜜臀av一区二区在线观看 | 夜夜嗨av一区二区三区中文字幕 | 欧美在线视频不卡| 国产福利一区二区三区视频在线 | 欧美日韩综合色| 国产成人免费视| 性感美女久久精品| 亚洲视频免费在线观看| 日韩精品一区在线观看| 色悠久久久久综合欧美99| 精品一区二区三区免费毛片爱 | 亚欧色一区w666天堂| 国产精品国产三级国产a| 欧美一区二区女人| 色综合天天综合网天天狠天天| 久久精品久久精品| 亚洲愉拍自拍另类高清精品| 亚洲国产成人自拍| 欧美成人精品3d动漫h| 91国偷自产一区二区三区观看| 国产伦精品一区二区三区在线观看| 亚洲成人免费av| 国产精品视频麻豆| 精品国产乱码久久久久久久久 | 欧美巨大另类极品videosbest | 久久综合资源网| 在线一区二区三区四区五区| www.亚洲色图| 国内外精品视频| 日韩中文字幕麻豆| 一区二区三国产精华液| 中文字幕免费在线观看视频一区| 欧美成人一区二区三区| 8v天堂国产在线一区二区| 一本色道久久综合狠狠躁的推荐| 国产精品影视网| 青青草精品视频| 日本伊人精品一区二区三区观看方式| 亚洲乱码精品一二三四区日韩在线| 国产片一区二区| 久久综合九色综合欧美亚洲| 欧美日韩国产系列| 69堂精品视频| 制服视频三区第一页精品| 欧美日韩在线精品一区二区三区激情| 色成年激情久久综合| 99视频超级精品| 国产成人自拍网| 国产成人在线色| 国产福利一区二区三区视频在线| 久久99精品久久只有精品| 日韩va欧美va亚洲va久久| 香蕉成人伊视频在线观看| 亚洲韩国一区二区三区| 亚洲天堂久久久久久久| 一区二区三区不卡视频| 亚洲一区二区在线免费看| 一区二区三区不卡视频在线观看 | 国产在线观看一区二区| 久久电影网站中文字幕|