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

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

?? initboot.c

?? from wangkj@yahoo.com 電路原理圖和詳細說明: amd.9966.org或者 arm.9966.org 都是原創,包括boot, loader,u-boot,linu
?? 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					*//*										*//*----------------------------------------------------------------------------*/#include "AT91RM9200.h"/* //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// */#define	FALSE			0#define	TRUE			1#define	DELAY_PLL		100#define DELAY_MAIN_FREQ		100#define INPUT_FREQ_MIN		900000#define INPUT_FREQ_MAX		32000000#define MASTER_CLOCK 		59904000// #define MASTER_CLOCK 	45000000#define QUARTZ_18432		1#if QUARTZ_18432#define	PLLAR       0x20263E04	/* 180 MHz for PLLA */#define	PLLBR 	    0x10483E0E	/* 48,054857 MHz (divider by 2 for USB) */#else /* 4.608MHZ */#define	PLLAR 	    0x20263E01	/* 179,712000 MHz for PCK  for 4.608 */#define	PLLBR 	    0x10673E05	/* 48,054857 MHz (divider by 2 for USB) */#endif#define	MCKR 	0x0000202	/* PLLA=180 , == CPU = 180MHZ, MASTER_CLOCK = 60MHZ *///#define	MCKR  	0x0000302	/* PLLA=180 , == CPU = 180MHZ, MASTER_CLOCK = 45MHZ */#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#define C1_IDC		(1<<2)	/* icache and/or dcache off/on *//* //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////*//*----------------------------------------------------------------------------	*//* \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(unsigned int MainClock,unsigned int pllDivider , unsigned 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 */	/* Get Main Clock */	MainClock 	= (((AT91C_BASE_CKGR->CKGR_MCFR) & AT91C_CKGR_MAINF) * 32768) >> 4;	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;}void AT91F_InitSDRAM(){	volatile int *pRegister;	AT91PS_PIO pPio = AT91C_BASE_PIOC;		/* Configure PIOC as peripheral (D16/D31) */	pPio->PIO_ASR = 0xFFFF0000;	pPio->PIO_BSR = 0x0;	pPio->PIO_PDR = 0xFFFF0000;		/* Setup MEMC to support all connected memories (CS0 = FLASH; CS1=SDRAM) */	pRegister = (int *)0xFFFFFF60;	*pRegister = 0x02; 		/* Init SDRAM */	pRegister = (int *)0xFFFFFF98;	*pRegister = 0x2188c159; 	pRegister = (int *)0xFFFFFF90;	*pRegister = 0x12; 	pRegister = (int *)0x20000000;	*pRegister = 0; 	pRegister = (int *)0xFFFFFF90;	*pRegister = 0x14; 	pRegister = (int *)0x20000000;	*pRegister = 0; 	*pRegister = 0; 	*pRegister = 0; 	*pRegister = 0; 	*pRegister = 0; 	*pRegister = 0; 	*pRegister = 0; 	*pRegister = 0; 	pRegister = (int *)0xFFFFFF90;	*pRegister = 0x13; 	pRegister = (int *)0x20000080;	*pRegister = 0; 	pRegister = (int *)0xFFFFFF94;	*pRegister = 0x2e0; 	pRegister = (int *)0x20000000;	*pRegister = 0; 	pRegister = (int *)0xFFFFFF90;	*pRegister = 0x10; 	pRegister = (int *)0x20000000;	*pRegister = 0; }/*----------------------------------------------------------------------------*//* \fn    AT91F_Read_p15_c1							*//* \brief This function reads co-processor 15, register 1 (control register)	*//*----------------------------------------------------------------------------*/unsigned int AT91F_Read_p15_c1(void){    unsigned int value;    __asm__ __volatile__(	"mrc     p15, 0, %0, c1, c0, 0   @ read control reg\n"	: "=r" (value)	:	: "memory");     return value;}/*----------------------------------------------------------------------------*//* \fn    AT91F_Write_p15_c1							*//* \brief This function writes to co-processor 15, register 1 (control register) *//*----------------------------------------------------------------------------*/void AT91F_Write_p15_c1(unsigned int value){    __asm__ __volatile__(        "mcr     p15, 0, %0, c1, c0, 0   @ write it back\n"	: "=r" (value)	:	: "memory");    AT91F_Read_p15_c1();}/*----------------------------------------------------------------------------*//* \fn    AT91F_Enable_ICache							*//* \brief This function enables Instruction Cache				*//*----------------------------------------------------------------------------*/void AT91F_Enable_ICache(void){    unsigned int i, reg;        reg = AT91F_Read_p15_c1();    for (i=0; i<100; i++);    AT91F_Write_p15_c1(reg | C1_IDC);}/*----------------------------------------------------------------------------*//* \fn    AT91F_InitFlash							*//* \brief This function performs very low level HW initialization		*//*----------------------------------------------------------------------------*/void AT91F_InitFlash(){#if 0	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 |= AT91C_EBI_CS0A_SMC;	AT91C_BASE_EBI->EBI_CFGR = (AT91C_EBI_DBPUC & 0x00) | (AT91C_EBI_EBSEN & 0x00);#endif		/* Setup Flash */	AT91C_BASE_SMC2->SMC2_CSR[0] = (AT91C_SMC2_NWS & 0x4) | AT91C_SMC2_WSEN									| (AT91C_SMC2_TDF & 0x200) | AT91C_SMC2_BAT | AT91C_SMC2_DBW_16;}/*----------------------------------------------------------------------------	*//* \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 (!(((AT91PS_USART)AT91C_BASE_DBGU)->US_CSR & AT91C_US_TXRDY));		((AT91PS_USART)AT91C_BASE_DBGU)->US_THR = (*buffer++ & 0x1FF);	}}/*----------------------------------------------------------------------------	*//* \fn    AT91F_LowLevelInit							*//* \brief This function performs very low level HW initialization		*//*----------------------------------------------------------------------------*/void AT91F_LowLevelInit(){	AT91PS_USART 	pUSART = (AT91PS_USART)AT91C_BASE_DBGU;	AT91PS_PDC	pPdc;	unsigned char 	status;/*----------------------------------------------------------------------------	*//* Step 2.									*//* Checking the Main Oscillator Frequency (Optional)				*//*----------------------------------------------------------------------------	*/	status = AT91F_WaitForMainClockFrequency();/*----------------------------------------------------------------------------	*//* Step 3. to 5.								*//*----------------------------------------------------------------------------	*/	AT91F_InitFlash();	status = AT91F_InitClocks(PLLAR,PLLBR, MCKR);/*----------------------------------------------------------------------------	*//* SDRAM & Flash AT49BV1614 Initialisations					*//*----------------------------------------------------------------------------	*/	AT91F_InitSDRAM();		/*----------------------------------------------------------------------------	*//* Test PMC Initialization.							*//*----------------------------------------------------------------------------	*/	/* Open PIO for DBGU */	AT91C_BASE_PIOA->PIO_ASR = AT91C_PA31_DTXD | AT91C_PA30_DRXD;	AT91C_BASE_PIOA->PIO_BSR = 0x0;	AT91C_BASE_PIOA->PIO_PDR = AT91C_PA31_DTXD | AT91C_PA30_DRXD;	/******************/	/* Configure DBGU */	/******************/		/* Disable interrupts */	pUSART->US_IDR = (unsigned int) -1;		/* Reset receiver and transmitter */	pUSART->US_CR = AT91C_US_RSTRX | AT91C_US_RSTTX | AT91C_US_RXDIS | AT91C_US_TXDIS;		/* Define the baudrate divisor register */	pUSART->US_BRGR = MASTER_CLOCK/(115200*16); /* 33 For 60 MHz and 24 for 45 MHz */		/* Write the timeguard register */	pUSART->US_TTGR = 0;		/* Clear Transmit and Receive counters */	pPdc = (AT91PS_PDC) &pUSART->US_RPR;		pPdc->PDC_PTCR = AT91C_PDC_RXTDIS | AT91C_PDC_TXTDIS;	pPdc->PDC_TNPR = 0;	pPdc->PDC_TNCR = 0;	pPdc->PDC_RNPR = 0;	pPdc->PDC_RNCR = 0;	pPdc->PDC_TPR = 0;	pPdc->PDC_TCR = 0;	pPdc->PDC_TPR = 0;	pPdc->PDC_TCR = 0;	pPdc->PDC_PTCR = AT91C_PDC_RXTEN | AT91C_PDC_TXTEN;	/* Enable Rx and Tx */		/* Define the USART mode */ 	pUSART->US_MR = AT91C_US_CHMODE_NORMAL | AT91C_US_PAR_NONE;		/* Enable Transmitter */	pUSART->US_CR = AT91C_US_TXEN;	/* Enable I-Cache */	//AT91F_Enable_ICache();#ifdef DEBUG	AT91F_DBGU_Printk("\n\rLow Level Init performed\n\r");#endif}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
岛国一区二区在线观看| 亚洲福利视频导航| 日韩手机在线导航| 欧美亚洲国产怡红院影院| 91影视在线播放| 成人免费高清视频| 成人一级片在线观看| 国产精品一区二区黑丝| 激情综合色综合久久| 加勒比av一区二区| 国产精品一区二区免费不卡 | 91久久精品一区二区三| 成人福利在线看| 99久久精品久久久久久清纯| 成人avav影音| 91在线云播放| 欧美日本一区二区| 欧美一级在线免费| 久久影视一区二区| 国产精品你懂的| 亚洲人成影院在线观看| 一区二区三区欧美日韩| 日韩影视精彩在线| 六月丁香婷婷色狠狠久久| 国产精品亚洲第一区在线暖暖韩国 | 日韩午夜在线观看| 欧美精品一区二区三区四区| 久久久精品黄色| 一区二区三区鲁丝不卡| 日韩精品午夜视频| 大美女一区二区三区| 在线视频国内自拍亚洲视频| 欧美日韩国产另类一区| 日韩欧美高清dvd碟片| 国产精品久久久久四虎| 亚洲福利一二三区| 国产成人一级电影| 欧美揉bbbbb揉bbbbb| 久久综合久色欧美综合狠狠| 亚洲人成7777| 激情综合五月婷婷| 91国偷自产一区二区三区成为亚洲经典 | 久久精品999| 99re在线视频这里只有精品| 欧美一区二区精品| 亚洲视频精选在线| 国产一区啦啦啦在线观看| 在线视频国内自拍亚洲视频| 亚洲精品一区二区三区蜜桃下载 | 五月婷婷激情综合网| 国产一区二区视频在线| 在线一区二区三区做爰视频网站| 日韩欧美不卡在线观看视频| 亚洲欧美aⅴ...| 成人深夜福利app| 欧美一级高清片| 一区二区高清在线| 成人av资源在线| 久久影院午夜论| 另类调教123区| 欧美日韩国产高清一区二区三区 | 色综合欧美在线视频区| 日韩欧美国产三级| 亚洲综合精品久久| 一本久久精品一区二区| 久久精品视频免费观看| 免费人成精品欧美精品 | 香蕉成人伊视频在线观看| 成人av免费网站| 国产人久久人人人人爽| 九一久久久久久| 欧美久久免费观看| 亚洲午夜视频在线观看| 色香蕉久久蜜桃| 亚洲欧美精品午睡沙发| 99re成人精品视频| 中文字幕欧美一区| 91亚洲国产成人精品一区二区三 | 成人精品免费网站| 国产亚洲欧美日韩在线一区| 蜜臂av日日欢夜夜爽一区| 欧美一区二区三区白人| 爽好久久久欧美精品| 欧美一区二区三区免费视频| 麻豆久久久久久| 亚洲精品一线二线三线| 国产高清视频一区| 欧美国产日产图区| 波多野结衣在线aⅴ中文字幕不卡| 国产精品三级av| 91香蕉视频mp4| 亚洲福利视频一区| 日韩欧美激情四射| 高清不卡一区二区| 亚洲精品中文字幕乱码三区| 在线观看视频一区二区| 石原莉奈在线亚洲二区| 日韩精品一区二区三区视频播放 | fc2成人免费人成在线观看播放| 中文字幕精品一区二区精品绿巨人| 国产美女精品一区二区三区| 中文在线资源观看网站视频免费不卡 | 日韩精品乱码免费| 亚洲精品在线观看网站| av在线一区二区| 婷婷一区二区三区| 欧美激情一区在线观看| 日本韩国一区二区三区| 免费成人av资源网| 国产午夜精品久久久久久免费视| 91一区二区在线| 久久国产福利国产秒拍| 国产精品第四页| 日韩一区二区三| 99久久精品费精品国产一区二区| 亚洲成年人影院| 亚洲国产岛国毛片在线| 欧美二区乱c少妇| 99国产欧美另类久久久精品 | 26uuu久久天堂性欧美| 91论坛在线播放| 国内外成人在线视频| 亚洲一区二区四区蜜桃| 国产色产综合产在线视频| 欧美丰满高潮xxxx喷水动漫| 成人的网站免费观看| 久99久精品视频免费观看| 亚洲一区二区三区视频在线| 欧美极品aⅴ影院| 欧美成人a视频| 777亚洲妇女| 97久久超碰国产精品| 黑人巨大精品欧美黑白配亚洲| 亚洲精品va在线观看| 国产亚洲综合在线| 欧美一区二区在线播放| 欧美午夜在线一二页| 波多野结衣91| 国产馆精品极品| 国产麻豆日韩欧美久久| 美女免费视频一区| 日韩国产精品91| 亚洲国产日韩精品| 亚洲伦理在线免费看| 自拍偷拍亚洲激情| 中文字幕中文字幕一区二区| 欧美韩国日本不卡| 久久久久久久久久电影| 久久亚洲捆绑美女| 精品1区2区在线观看| 日韩精品一区二区三区在线播放| 欧美一区二区三区爱爱| 欧美一区二区三级| 欧美大片免费久久精品三p| 日韩一区二区视频| 日韩一区二区三| 久久先锋影音av鲁色资源| 日韩免费观看2025年上映的电影| 91精品国产免费| 欧美一级免费观看| 日韩欧美中文一区二区| 精品国产成人系列| 久久综合狠狠综合| 亚洲国产成人在线| 亚洲精选一二三| 香蕉乱码成人久久天堂爱免费| 亚洲国产一区二区视频| 日韩av在线播放中文字幕| 免费精品视频在线| 国产高清在线精品| 色综合一区二区三区| 欧美日韩午夜在线| 日韩视频在线一区二区| 久久久青草青青国产亚洲免观| 国产亚洲综合色| 亚洲精品国久久99热| 天天综合网天天综合色| 国模套图日韩精品一区二区| 国产成人久久精品77777最新版本| 成人ar影院免费观看视频| 欧美在线播放高清精品| 日韩美女在线视频| 中文字幕亚洲一区二区va在线| 一区二区三区四区不卡在线| 蜜桃精品视频在线| 99精品久久只有精品| 91精品国产色综合久久不卡电影| 欧美大片一区二区三区| 中文字幕一区av| 精品一区二区影视| 色偷偷久久人人79超碰人人澡| 日韩欧美一级片| 亚洲免费观看高清完整版在线观看熊 | 91精品国产美女浴室洗澡无遮挡| 久久精品夜色噜噜亚洲aⅴ| 亚洲一线二线三线久久久| 国模娜娜一区二区三区| 欧美日韩一级二级三级| 中文字幕精品—区二区四季| 天堂在线一区二区|