?? cstartup_sam7.c
字號:
/*=================================文件信息================================*/
/*文 件 名:Cstartup_SAM7.c */
/*創 建 人:葛康 */
/*最后修改日期:2006年3月14日 */
/*文 件 描 述: 無 */
/*=========================================================================*/
#include "AT91SAM7S64.h"
#include "lib_AT91SAM7S64.h"
/*-------------------------------------------------------------------------*/
/*在Cstartup.s中定義缺省中斷向量 */
/*-------------------------------------------------------------------------*/
extern void AT91F_Spurious_handler(void);
extern void AT91F_Default_IRQ_handler(void);
extern void AT91F_Default_FIQ_handler(void);
/***************************************************************************/
/*函數名稱:AT91F_LowLevelInit */
/*功能描述:初始化(APMC, AIC, EBI, ....) */
/*輸入參數:無 */
/*輸出參數:無 */
/***************************************************************************/
void AT91F_LowLevelInit( void)
{
int i;
AT91PS_PMC pPMC = AT91C_BASE_PMC;
/*-------------------------------------------------------------------------*/
/*設置RSTC */
/*-------------------------------------------------------------------------*/
AT91C_BASE_RSTC->RSTC_RMR=0xA5000401;
/*-------------------------------------------------------------------------*/
/*設置Falsh: */
/* a)Set Flash Waite sate */
/* b)Single Cycle Access at Up to 30 MHz, or 40 */
/*-------------------------------------------------------------------------*/
AT91C_BASE_MC->MC_FMR = AT91C_MC_FWS_1FWS ;
/*-------------------------------------------------------------------------*/
/*設置WDT: 關閉看門狗(Watchdog Disable) */
/*-------------------------------------------------------------------------*/
AT91C_BASE_WDTC->WDTC_WDMR= AT91C_WDTC_WDDIS;
/*-------------------------------------------------------------------------*/
/*設置主時鐘MCK: */
/* a)Set MCK at 48 054 850 */
/* b)Enabling the Main Oscillator */
/* c)SCK = 1/32768 = 30.51 uSecond */
/* d)Start up time = 8 * 6 / SCK = 56 * 30.51 = 1,46484375 ms */
/*-------------------------------------------------------------------------*/
pPMC->PMC_MOR = ((AT91C_CKGR_OSCOUNT&(0x06<<8)|AT91C_CKGR_MOSCEN));
/*-------------------------------------------------------------------------*/
/*等待其穩定(Wait the startup time) */
/*-------------------------------------------------------------------------*/
while(!(pPMC->PMC_SR & AT91C_PMC_MOSCS));
/*-------------------------------------------------------------------------*/
/*設置PLL : */
/* a)Checking the Main Oscillator Frequency (Optional) */
/* b)Setting PLL and divider */
/* c)div by 14 Fin = 1.3165 =(18,432 / 14) */
/* d)Mul 72+1: Fout = 96.1097 =(3,6864 *73) */
/* e)for 96 MHz the erroe is 0.11% */
/* f)Field out NOT USED = 0 */
/* g)PLLCOUNT pll startup time estimate at : 0.844 ms */
/* h)PLLCOUNT 28 = 0.000844 /(1/32768) */
/*-------------------------------------------------------------------------*/
pPMC->PMC_PLLR = ((AT91C_CKGR_DIV & 14 ) |
(AT91C_CKGR_PLLCOUNT & (28<<8)) |
(AT91C_CKGR_MUL & (72<<16)));
/*-------------------------------------------------------------------------*/
/*等待其穩定(Wait the startup time) */
/*-------------------------------------------------------------------------*/
while(!(pPMC->PMC_SR & AT91C_PMC_LOCK));
while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY));
/*-------------------------------------------------------------------------*/
/*選擇主時鐘和處理器時鐘: */
/* a)select the PLL clock divided by 2 */
/*-------------------------------------------------------------------------*/
pPMC->PMC_MCKR = AT91C_PMC_PRES_CLK_2 ;
while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY));
pPMC->PMC_MCKR |= AT91C_PMC_CSS_PLL_CLK ;
while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY));
;/*-------------------------------------------------------------------------*/;
;/*設置缺省中斷向量 */;
;/*-------------------------------------------------------------------------*/;
AT91C_BASE_AIC->AIC_SVR[0] = (int) AT91F_Default_FIQ_handler ;
for (i=1;i < 31; i++)
{
AT91C_BASE_AIC->AIC_SVR[i] = (int) AT91F_Default_IRQ_handler ;
}
AT91C_BASE_AIC->AIC_SPU = (int) AT91F_Spurious_handler ;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -