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

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

?? init.c

?? 9200測試串口程序
?? C
字號:
//*----------------------------------------------------------------------------
//*         ATMEL Microcontroller Software Support  -  ROUSSET  -
//*----------------------------------------------------------------------------
//* The software is delivered "AS IS" without warranty or condition of any
//* kind, either express, implied or statutory. This includes without
//* limitation any warranty or condition with respect to merchantability or
//* fitness for any particular purpose, or against the infringements of
//* intellectual property rights of others.
//*----------------------------------------------------------------------------
//* File Name           : init.c
//* Object              : Low level initialisations written in C
//* Creation            : FB   23/10/2002
//*初始FLASH 、初始主時鐘60000000Hz、初始SDRAM、初始DEBUG端口
//*----------------------------------------------------------------------------

#include "AT91RM9200.h"
#include "lib_AT91RM9200.h"

#include <stdarg.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>

/////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////

#define	FALSE					0
#define	TRUE					1
#define	DELAY_PLL				100
#define DELAY_MAIN_FREQ			100

/////////////////////////////////////////////////////////////////////////////////////////////////////
// Configuration for a Quartz 18.432000 MHz
/////////////////////////////////////////////////////////////////////////////////////////////////////

#define	PLLAR 					0x20263E04	//* 179,712000 MHz for PCK 
#define	PLLBR 					0x10483E0E	//* 48,054857 MHz (divider by 2 for USB)
#define	MCKR  					0x00000202	//* PCK/3 = MCK Master Clock = 59,904000MHz with PLLA selected 
#define SLOWCLOCK				32768		//* In Hz

/////////////////////////////////////////////////////////////////////////////////////////////////////
// Frequencies Range
/////////////////////////////////////////////////////////////////////////////////////////////////////

#define INPUT_FREQ_MIN			900000
#define INPUT_FREQ_MAX			32000000

#define BASE_EBI_CS0_ADDRESS	0x10000000	//* base address to access memory on CS0
#define BASE_EBI_CS1_ADDRESS	0x20000000	//* base address to access memory on CS1

#define OUTPUT_FREQ_MIN			80000000
#define OUTPUT_FREQ_MAX			240000000


/////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////

//*----------------------------------------------------------------------------
//* \fn    AT91F_WaitForMainClockFrequency
//* \brief This function performs very low level HW initialization
//*----------------------------------------------------------------------------
unsigned char AT91F_WaitForMainClockFrequency()
{
	volatile char	tmp	= 0;

/////////////////////////////////////////////////////////////////////////////////////////////////////
// Step 2.
// Checking the Main Oscillator Frequency (Optional)
/////////////////////////////////////////////////////////////////////////////////////////////////////

	//* Determine the main clock frequency
	while(!(AT91C_BASE_CKGR->CKGR_MCFR & AT91C_CKGR_MAINRDY) && (tmp++ < DELAY_MAIN_FREQ));

	if (tmp >= DELAY_MAIN_FREQ)
		return FALSE;

	return TRUE;
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_CheckPLL_FrequencyRange
//* \brief This function performs very low level HW initialiszation
//*----------------------------------------------------------------------------
unsigned char AT91F_CheckPLL_FrequencyRange(int MainClock,int pllDivider ,int pllMultiplier)
{
	if(pllDivider == 0)
		return FALSE;

	//* Check Input Frequency
	if( ((MainClock/pllDivider) < INPUT_FREQ_MIN)
	 || ((MainClock/pllDivider) > INPUT_FREQ_MAX) )
		return FALSE;

	//* Check Output Frequency
	if( ((MainClock/pllDivider*pllMultiplier) < OUTPUT_FREQ_MIN)
	 || ((MainClock/pllDivider*pllMultiplier) > OUTPUT_FREQ_MAX) )
		return FALSE;

	return TRUE;
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_InitClocks
//* \brief This function performs very low level HW initialization
//*----------------------------------------------------------------------------
unsigned char AT91F_InitClocks(int PLLAR_Register,int PLLBR_Register ,int MCKR_Register)
{
	volatile char 	tmp = 0;
	unsigned int	MainClock;
	unsigned int 	pllDivider,pllMultiplier;

/////////////////////////////////////////////////////////////////////////////////////////////////////
// Optionnal
/////////////////////////////////////////////////////////////////////////////////////////////////////

	//* Check if Input & Output Frequencies are in the correct range

	MainClock 		= AT91F_CKGR_GetMainClock(AT91C_BASE_CKGR,SLOWCLOCK);

	pllDivider    	= (PLLAR_Register  & AT91C_CKGR_DIVA);
	pllMultiplier 	= ((PLLAR_Register  & AT91C_CKGR_MULA) >> 16) + 1;
	if(AT91F_CheckPLL_FrequencyRange(MainClock, pllDivider , pllMultiplier) == FALSE)
		return FALSE;

	pllDivider    	= (PLLBR_Register  & AT91C_CKGR_DIVB);
	pllMultiplier 	= ((PLLBR_Register  & AT91C_CKGR_MULB) >> 16) + 1;
	if(AT91F_CheckPLL_FrequencyRange(MainClock, pllDivider , pllMultiplier) == FALSE)
		return FALSE;

/////////////////////////////////////////////////////////////////////////////////////////////////////
// Step 3.
// Setting PLLA and Divider A
/////////////////////////////////////////////////////////////////////////////////////////////////////

	AT91C_BASE_CKGR->CKGR_PLLAR = PLLAR_Register;
	//* Wait for PLLA stabilization LOCKA bit in PMC_SR
	tmp = 0;
	while( !(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_LOCKA) && (tmp++ < DELAY_PLL) ) ;

/////////////////////////////////////////////////////////////////////////////////////////////////////
// Step 4.
// Setting PLLB and Divider B
/////////////////////////////////////////////////////////////////////////////////////////////////////

	AT91C_BASE_CKGR->CKGR_PLLBR = PLLBR_Register;
	//* Wait for PLLB stabilization LOCKB bit in PMC_SR
	tmp = 0;
	while( !(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_LOCKB) && (tmp++ < DELAY_PLL) ) ;

/////////////////////////////////////////////////////////////////////////////////////////////////////
// Step 5.
// Selection of Master Clock MCK (and Processor Clock PCK)
/////////////////////////////////////////////////////////////////////////////////////////////////////

	//* Constraints of the Master Clock selection sequence
	//* Write in the MCKR dirty value concerning the clock selection CSS then overwrite it in a second sequence
	AT91C_BASE_PMC->PMC_MCKR = AT91C_PMC_CSS_SLOW_CLK;
	//* Wait until the master clock is established
	tmp = 0;
	while( !(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY) && (tmp++ < DELAY_MAIN_FREQ) );

	//* Second sequence
	AT91C_BASE_PMC->PMC_MCKR = MCKR_Register;
	//* Wait until the master clock is established
	tmp = 0;
	while( !(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY) && (tmp++ < DELAY_MAIN_FREQ) );

	return TRUE;
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_InitSDRAM
//* \brief This function performs very low level HW initialisation
//*----------------------------------------------------------------------------
void AT91F_InitSDRAM()
{
	int 	i;
	int 	*pSDRAM = (int *)BASE_EBI_CS1_ADDRESS;

	//* Configure PIOC as peripheral (D16/D31)
	AT91F_SDRC_CfgPIO();
	
	//* Setup MEMC to support CS1=SDRAM
	AT91C_BASE_EBI->EBI_CSA |= AT91C_EBI_CS1A;
	AT91C_BASE_EBI->EBI_CFGR = (AT91C_EBI_DBPUC & 0x00) | (AT91C_EBI_EBSEN & 0x00);

	//* Init SDRAM

	//* 1. A minimum pause of 200us is provided to precede any signal toggle
	AT91C_BASE_SDRC->SDRC_CR = AT91C_SDRC_NC_9 | AT91C_SDRC_NR_12 | AT91C_SDRC_NB_4_BANKS | AT91C_SDRC_CAS_2
								| 0x100 | 0x4000 | 0x8000
								| 0x880000
								| 0x21000000;


	//* 2. A Precharge All command is issued to the SDRAM
	AT91C_BASE_SDRC->SDRC_MR = AT91C_SDRC_MODE_PRCGALL_CMD;
	*pSDRAM = 0;

	//* 3. Eight Auto-refresh are provided
	AT91C_BASE_SDRC->SDRC_MR = AT91C_SDRC_MODE_RFSH_CMD;
	for(i=0;i<8;i++)
		*pSDRAM = 0;

	//* 4. A mode register cycle is issued to program the SDRAM parameters
	AT91C_BASE_SDRC->SDRC_MR = AT91C_SDRC_MODE_LMR_CMD;
	*(pSDRAM+0x80) = 0;

	//* 5. Write refresh rate into SDRAMC refresh timer COUNT register
	AT91C_BASE_SDRC->SDRC_TR = (AT91C_SDRC_COUNT & 0x2E0);
	*pSDRAM = 0;

	//* 6. A Normal Mode Command is provided, 3 clocks after tMRD is set
	AT91C_BASE_SDRC->SDRC_MR = AT91C_SDRC_MODE_NORMAL_CMD;
	*pSDRAM = 0;
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_InitFlash
//* \brief This function performs very low level HW initialization
//*----------------------------------------------------------------------------
void AT91F_InitFlash()
{
	AT91C_BASE_MC->MC_PUIA[0] = AT91C_MC_PROT_PNAUNA;
	AT91C_BASE_MC->MC_PUP = 0;
	AT91C_BASE_MC->MC_PUER = 0;	//* Memory controller protection unit disable
	AT91C_BASE_MC->MC_ASR = 0;  //* read only!
	AT91C_BASE_MC->MC_AASR = 0; //* read only!

	//* Setup MEMC to support CS0=Flash
	AT91C_BASE_EBI->EBI_CSA |= 0;
	AT91C_BASE_EBI->EBI_CFGR = 0;

	//* Setup Flash
	AT91C_BASE_SMC2->SMC2_CSR[0] = 0x6 | (1<<7) | (2<<8) | (1<<12) | (1<<13);

}

//*----------------------------------------------------------------------------
//* \fn    AT91F_DBGU_Printk
//* \brief This function is used to send a string through the DBGU channel (Very low level debugging)
//*----------------------------------------------------------------------------
void AT91F_DBGU_Printk(
	char *buffer) // \arg pointer to a string ending by \0
{
	while(*buffer != '\0') {
		while (!AT91F_US_TxReady((AT91PS_USART)AT91C_BASE_DBGU));
		AT91F_US_PutChar((AT91PS_USART)AT91C_BASE_DBGU, *buffer++);
	}
}

//=====================================================================
//If you don't use vsprintf(), the code size is reduced very much.
void AT91F_DBGU_Printf(char *fmt,...)
{
    va_list ap;
    char string[256];

    va_start(ap,fmt);
    vsprintf(string,fmt,ap);
    AT91F_DBGU_Printk(string);
    va_end(ap);
}

//-------------------------------------------------------------------------
//Input Char
char AT91F_DBGU_GetChar(void)
{

	while (!AT91F_US_RxReady((AT91PS_USART)AT91C_BASE_DBGU));
	return (char)((AT91F_US_GetChar((AT91PS_USART)AT91C_BASE_DBGU))&0xff);
	
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_LowLevelInit
//* \brief This function performs very low level HW initialization
//*----------------------------------------------------------------------------
void AT91F_LowLevelInit()
{
	unsigned char 	status;

/////////////////////////////////////////////////////////////////////////////////////////////////////
// Step 2.
// Checking the Main Oscillator Frequency (Optional)
/////////////////////////////////////////////////////////////////////////////////////////////////////

	status = AT91F_WaitForMainClockFrequency();

/////////////////////////////////////////////////////////////////////////////////////////////////////
// Flash AT49BV1614 Initialisation : must be done before change the clocks -> Set correct Wait States
/////////////////////////////////////////////////////////////////////////////////////////////////////

	AT91F_InitFlash();
 
/////////////////////////////////////////////////////////////////////////////////////////////////////
// Step 3. to 5.
/////////////////////////////////////////////////////////////////////////////////////////////////////

	status = AT91F_InitClocks(PLLAR,PLLBR,MCKR);

/////////////////////////////////////////////////////////////////////////////////////////////////////
// SDRAM Initialisation
/////////////////////////////////////////////////////////////////////////////////////////////////////

	AT91F_InitSDRAM();
	
/////////////////////////////////////////////////////////////////////////////////////////////////////
// Test PMC Initialization.
/////////////////////////////////////////////////////////////////////////////////////////////////////

	// Open PIO for DBGU
	AT91F_DBGU_CfgPIO();

	// Configure DBGU
	AT91F_US_Configure (
		(AT91PS_USART) AT91C_BASE_DBGU,          			// DBGU base address
		60000000,                  								// 60 MHz
		AT91C_US_CHMODE_NORMAL | AT91C_US_PAR_NONE ,        // mode Register to be programmed
		115200 ,                   							// baudrate to be programmed
		0);                        							// timeguard to be programmed

	// Enable Transmitter
	AT91F_US_EnableTx((AT91PS_USART) AT91C_BASE_DBGU);
	AT91F_US_EnableRx((AT91PS_USART) AT91C_BASE_DBGU);

	AT91F_DBGU_Printk("\n\rAT91F_LowLevelInit() Complete!\n\r");

}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91蜜桃在线免费视频| 日韩国产高清影视| 国模一区二区三区白浆| 欧美成人国产一区二区| 精品亚洲aⅴ乱码一区二区三区| 91精品久久久久久久久99蜜臂| 日韩成人精品在线观看| 2020国产精品自拍| av欧美精品.com| 亚洲成人福利片| 精品国产乱码久久久久久图片| 国产在线麻豆精品观看| 亚洲图片你懂的| 在线播放日韩导航| 国产中文字幕精品| 亚洲啪啪综合av一区二区三区| 9191精品国产综合久久久久久| 国产美女久久久久| 一区二区三区视频在线看| 日韩无一区二区| 91原创在线视频| 蜜桃av噜噜一区二区三区小说| 国产精品视频你懂的| 欧美裸体一区二区三区| 成人免费精品视频| 日韩精品成人一区二区在线| 精品国产99国产精品| 色综合久久中文综合久久牛| 久久成人免费网站| 一区二区三区欧美视频| 久久女同性恋中文字幕| 欧美这里有精品| 成人av一区二区三区| 美女一区二区在线观看| 一区二区免费在线播放| 国产欧美视频一区二区三区| 欧美精品久久一区| 色综合久久88色综合天天| 国产一区二区按摩在线观看| 日韩国产欧美一区二区三区| 一区二区在线免费观看| 国产精品久久久久影视| 久久综合一区二区| 717成人午夜免费福利电影| 色视频欧美一区二区三区| 成人综合在线视频| 国产精华液一区二区三区| 美女网站视频久久| 美女网站色91| 蜜臀av性久久久久蜜臀aⅴ四虎 | 亚洲自拍偷拍欧美| 中文字幕免费观看一区| 久久久www成人免费毛片麻豆| 欧美福利视频一区| 欧美日韩日日骚| 欧美色综合久久| 欧美日韩一区二区三区四区| 在线亚洲+欧美+日本专区| 欧美美女直播网站| 成人av免费网站| 国产suv一区二区三区88区| 国产一区二区伦理| 成人久久视频在线观看| 欧美日韩美女一区二区| 国产自产视频一区二区三区| 热久久免费视频| 免费观看久久久4p| 美女任你摸久久| 精品一区二区在线观看| 久久99精品久久久久| 国内精品国产三级国产a久久 | 91麻豆精品在线观看| 色老头久久综合| 欧美日韩在线不卡| 欧美一区二区三区在线观看 | 91在线一区二区| 日本精品视频一区二区三区| 欧美老肥妇做.爰bbww| 国产日本欧洲亚洲| 久久久久久久久蜜桃| 蜜桃av一区二区| 日日噜噜夜夜狠狠视频欧美人| 亚洲国产乱码最新视频| 天天综合色天天| 国产精品资源网站| 色综合久久九月婷婷色综合| 欧美日韩国产大片| 国产亚洲欧美日韩俺去了| 国产精品电影一区二区三区| 一区二区三区精品视频在线| 日本最新不卡在线| 国产精品99久久久久久久女警 | 日日夜夜免费精品视频| 韩国成人精品a∨在线观看| 99综合电影在线视频| 国产精品久久久久桃色tv| 久久尤物电影视频在线观看| 国产精品麻豆视频| 天堂影院一区二区| 国产电影精品久久禁18| 欧美伊人久久久久久午夜久久久久| 日韩三级视频中文字幕| 国产精品久久久久久福利一牛影视| 亚洲大片免费看| 成人黄色777网| 欧美一区二区女人| 亚洲色图视频免费播放| 激情都市一区二区| 欧美日本在线看| 亚洲视频一区二区在线观看| 激情成人综合网| 欧美精品欧美精品系列| 亚洲另类在线视频| 国产成a人亚洲精品| 欧美一区二区福利在线| 亚洲国产欧美在线| 欧美日韩一区不卡| 最新久久zyz资源站| 极品少妇xxxx偷拍精品少妇| 欧美日韩成人综合| 亚洲精品中文在线观看| 成人妖精视频yjsp地址| 精品国产区一区| 老司机精品视频导航| 91.xcao| 亚洲国产cao| 欧美视频一区二区| 亚洲精品国产a久久久久久| 成人av资源在线观看| 欧美激情一区二区三区全黄| 国产精品影音先锋| 久久亚洲一区二区三区明星换脸 | 欧美日韩美少妇| 午夜视频在线观看一区二区| 91成人免费网站| 亚洲午夜日本在线观看| 欧美在线观看视频一区二区| 一区二区三区在线不卡| 色狠狠一区二区| 亚洲综合激情小说| 欧美偷拍一区二区| 亚洲不卡av一区二区三区| 欧美网站一区二区| 丝袜美腿亚洲综合| 欧美v国产在线一区二区三区| 久久精品国产亚洲aⅴ| 久久综合九色综合97_久久久| 精品一区二区三区av| 国产欧美一区二区精品性色超碰| 国产精品一区二区在线看| 欧美经典一区二区| 91网站黄www| 视频一区二区不卡| www久久精品| 波多野结衣欧美| 亚洲妇女屁股眼交7| 欧美一级高清片在线观看| 国产一区二区三区免费播放| 国产欧美日韩综合精品一区二区| 91在线云播放| 五月激情综合网| 久久这里只有精品6| 91免费观看在线| 蜜桃视频在线一区| 中文字幕欧美激情| 欧美日韩在线亚洲一区蜜芽| 精品无人码麻豆乱码1区2区| 国产精品传媒入口麻豆| 欧美另类高清zo欧美| 久久99精品久久久久久久久久久久| 国产欧美日韩三区| 欧美日韩精品高清| 成人免费va视频| 全国精品久久少妇| 日韩久久一区二区| 久久综合色鬼综合色| 色乱码一区二区三区88| 久久精品国内一区二区三区| 亚洲欧美另类在线| 久久久久久夜精品精品免费| 91国在线观看| 国产高清亚洲一区| 图片区日韩欧美亚洲| 亚洲国产高清不卡| 欧美电视剧在线观看完整版| 色av一区二区| 菠萝蜜视频在线观看一区| 奇米一区二区三区| 亚洲一区二区成人在线观看| 中文久久乱码一区二区| 欧美一区二区在线播放| 在线观看亚洲一区| 99久久综合色| 国产精品77777| 久草在线在线精品观看| 亚洲v日本v欧美v久久精品| 亚洲久本草在线中文字幕| 国产视频视频一区| 久久久亚洲高清| 欧美精品一区二区久久婷婷|