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

📄 cstartup_sam7.c

📁 ATMEL ARM7 虚拟优盘
💻 C
字号:
//  ----------------------------------------------------------------------------
//          ATMEL Microcontroller Software Support  -  ROUSSET  -
//  ----------------------------------------------------------------------------
//  DISCLAIMER:  THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
//  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
//  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
//  DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
//  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
//  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
//  OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
//  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
//  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
//  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//  ----------------------------------------------------------------------------
//* File Name           : Cstartup_SAM7.c
//* Object              : Low level initializations written in C for IAR Tools
//* Creation            : 12/Jun/04
//* 1.2   28/Feb/05 JPP : LIB change AT91C_WDTC_WDDIS & PLL
//* 1.3   21/Mar/05 JPP : Change PLL Wait time
//*----------------------------------------------------------------------------

// Include the board file description
#include "Board.h"

// The following functions must be write in ARM mode this function called directly
// by exception vector
extern void AT91F_Spurious_handler(void);
extern void AT91F_Default_IRQ_handler(void);
extern void AT91F_Default_FIQ_handler(void);

//*----------------------------------------------------------------------------
//* \fn    AT91F_LowLevelInit
//* \brief This function performs very low level HW initialization
//*        this function can be use a Stack, depending the compilation
//*        optimization mode
//*----------------------------------------------------------------------------
void AT91F_LowLevelInit( void) @ "ICODE"
{
    int            i;
    AT91PS_PMC     pPMC = AT91C_BASE_PMC;
//jcb    register char* pt;

    //* Watchdog Disable
    AT91C_BASE_WDTC->WDTC_WDMR= AT91C_WDTC_WDDIS;

    //* Set AT91C_MASTER_CLOCK at 47 923 200
    // 1 Enabling the Main Oscillator:
    // SCK = 1/32768 = 30.51 uSecond
    // 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));
    // 2 Checking the Main Oscillator Frequency (Optional)
    // 3 Setting PLL and divider:
    // - div by 5 Fin = 3,6864 =(18,432 / 5)
    // - Mul 25+1: Fout = 95,8464 =(3,6864 *26)
    // for 96 MHz the erroe is 0.16%
    // Field out NOT USED = 0
    // PLLCOUNT pll startup time estimate at : 0.844 ms
    // PLLCOUNT 28 = 0.000844 /(1/32768)
/*    pPMC->PMC_PLLR = ((AT91C_CKGR_DIV & 0x05) |
                     (AT91C_CKGR_PLLCOUNT & (28<<8)) |
                     (AT91C_CKGR_MUL & (25<<16)));
*/
      pPMC->PMC_PLLR = ((AT91C_CKGR_DIV & 0x0E) |
                     (AT91C_CKGR_PLLCOUNT & (28<<8)) |
                     (AT91C_CKGR_MUL & (0x48<<16)) |
                     AT91C_CKGR_USBDIV_1 );

    // Wait the startup time
    while(!(pPMC->PMC_SR & AT91C_PMC_LOCK));
    while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY));
    // 4. Selection of Master Clock and Processor Clock
    // 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));

    // Set up the default interrupts handler vectors
    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 ;

//jcb for 64
//jcb for( pt=(char*)0x2013C0; pt<(char*)(AT91C_ISRAM+AT91C_ISRAM_SIZE-(3*8*4)-20); pt++ )
//jcb {
//jcb   *pt = 0x45;
//jcb }
//jcb for 256
//jcb// HEAP
//jcbfor( pt=(char*)0x200AB0; pt<(char*)0x20134F; pt++ )
//jcb{
//jcb  *pt = 0xAA;
//jcb}
//jcb// STACK
//jcbfor( pt=(char*)0x201350; pt<(char*)(AT91C_ISRAM+AT91C_ISRAM_SIZE-(3*8*4)-20); pt++ )
//jcb{
//jcb  *pt = 0x45;
//jcb}



}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -