📄 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 + -