⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cstartup_sam7.c

📁 一个很好的Atmel 的ARM的启动代码。(已经调试过了)
💻 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 + -