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

📄 sam7_ram.mac

📁 基于at91sam7s256的usb驱动程序源码
💻 MAC
字号:
//-----------------------------------------------------------------------------
//          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           : SAM7_RAM.mac
//  Object              : Generic Macro File for IAR
//                        Hardware Reset
//                        Init PLL at 48 MHz
//                        Init EFC with 2 Wait State
//                        Remap RAM to address 0
//                        Enable User Reset 
//                        Stop watch dog
//  1.0 28/jun/06 JPP   : Creation
//-----------------------------------------------------------------------------
__var __mac_i;
__var __mac_mem;
__var __mac_next;

/*********************************************************************
*
*       _CheckRemap()
*
* Function description
*   Check the Remap.
*/
_CheckRemap()
{
//* Read the value at 0x0
    __mac_mem =__readMemory32(0x00000000,"Memory");
    __mac_i =__mac_mem+1;
    __writeMemory32(__mac_i,0x00,"Memory");
    __mac_next =__readMemory32(0x00000000,"Memory");
    if (__mac_i == __mac_next) {
        __writeMemory32( __mac_mem,0x00000000,"Memory");
        __message "RAM at0x0000 0000";  
    } else {  
        __message "Flash or Rom at 0x0000 0000";  
    }
}

/*********************************************************************
*
*       _MapRAMAt0()
*
* Function description
*   Maps RAM at 0.
*/
_MapRAMAt0(){
    __message "Changing mapping: RAM mapped to 0";
    __writeMemory32(0x00000001,0xFFFFFF00,"Memory");
    _CheckRemap();
}

/*********************************************************************
*
*       _InitRSTC()
*
* Function description
*   Initializes the RSTC (Reset controller).
*   This makes sense since the default is to not allow user resets, 
*   which makes it impossible to apply a second RESET via J-Link
*/
_InitRSTC() {
   // Allow user reset
    __writeMemory32(0xA5000001, 0xFFFFFD08,"Memory"); 
}

/*********************************************************************
*
*       _Watchdog()
*
* Function description
*   Clear Watchdog
*/
_Watchdog()
{
//* Watchdog Disable
//      AT91C_BASE_WDTC->WDTC_WDMR= AT91C_WDTC_WDDIS;
   __writeMemory32(0x00008000,0xFFFFFD44,"Memory");
   __message " Watchdog Disable ";  
}
/*********************************************************************
*
*       _EFC()
*
* Function description
*   Set EFC Wait state
*/
_EFC()
{
    __message " Flash Initialization (EFC0) 1 WS 48 Mhz";  
    __writeMemory32(0x00000100,0xFFFFFF60,"Memory");
}

/*********************************************************************
*
*       _InitPLL()
* Function description
*   Initializes the PMC.
*   1. Enable the Main Oscillator
*   2. Configure PLL to 96MHz
*   3. Switch Master Clock (MCK) on PLL/2 = 48MHz
*/
//*#define AT91C_PMC_MOR   ((AT91_REG *) 	0xFFFFFC20) // (PMC) Main Oscillator Register
//*#define AT91C_PMC_PLLR  ((AT91_REG *) 	0xFFFFFC2C) // (PMC) PLL Register
//*#define AT91C_PMC_MCKR  ((AT91_REG *) 	0xFFFFFC30) // (PMC) Master Clock Register

    _InitPLL() {

    __message "Set Main Oscillator";
    __writeMemory32(0x00004001,0xFFFFFc20,"Memory");    // MOSC
    while( !(__readMemory32(0xFFFFFc68,"Memory") & 0x1)  );

    __message "Set PLL to 96MHz";
    __writeMemory32(0x0048100e,0xFFFFFc2c,"Memory");    // LOCK
    while( !(__readMemory32(0xFFFFFc68,"Memory") & 0x4)  );

    __message "Set Master Clock to 48MHz";
    __writeMemory32(0x00000004,0xFFFFFc30,"Memory");    // MCKRDY
    while( !(__readMemory32(0xFFFFFc68,"Memory") & 0x8)  );
    __writeMemory32(0x00000007,0xFFFFFc30,"Memory");    // MCKRDY
    while( !(__readMemory32(0xFFFFFc68,"Memory") & 0x8)  );
}

/*********************************************************************
*
*       execUserReset() : JTAG set initially to Full Speed
*/
execUserReset() {
    __message "execUserReset()";
    __emulatorSpeed(30000);  // Set JTAG speed to 30kHz to make a hardware reset
    __hwReset(0);            // Hardware Reset: CPU is automatically halted after the reset
    _InitPLL();              // Allow to debug at JTAG Full Speed
    _EFC();                  // Allow EFC read speed
    _MapRAMAt0();            // Remap RAM to address 0
    _Watchdog();             // Stop watch dog
    __emulatorSpeed(0);      // Set JTAG speed to full speed
}

/*********************************************************************
*
*       execUserPreload() : JTAG set initially to 32kHz
*/
execUserPreload() {
    __message "execUserPreload()";
//*  Get the Chip ID (AT91C_DBGU_C1R & AT91C_DBGU_C2R
    __mac_i=__readMemory32(0xFFFFF240,"Memory");
    __message " -------------------------------- Chip ID   0x",__mac_i:%X;
  if ( __mac_i == 0x27080340)  {__message " Chip ID for AT91SAM7S32";    }
  if ( __mac_i == 0x27080341)  {__message " Chip ID for AT91SAM7S32A";   }
  if ( __mac_i == 0x27080342)  {__message " Chip ID for AT91SAM7S321";   }
  if ( __mac_i == 0x27090540)  {__message " Chip ID for AT91SAM7S64 or AT91SAM7S64A" ;}
  if ( __mac_i == 0x270C0740)  {__message " Chip ID for AT91SAM7S128";   }
  if ( __mac_i == 0x270A0741)  {__message " Chip ID for AT91SAM7S128A";  }
  if ( __mac_i == 0x270D0940)  {__message " Chip ID for AT91SAM7S256";   }
  if ( __mac_i == 0x270B0941)  {__message " Chip ID for AT91SAM7S256A";  }

    __mac_i=__readMemory32(0xFFFFF244,"Memory");
    __message " Extention 0x",__mac_i:%X;  
    __mac_i=__readMemory32(0xFFFFFF6C,"Memory");
    __message " Flash Version 0x",__mac_i:%X;  

    __hwReset(0);            // Hardware Reset: CPU is automatically halted after the reset
    _InitPLL();              // Allow to load Code at JTAG Full Speed
    _EFC();                  // Allow EFC read speed
    _MapRAMAt0();            // Remap RAM to address 0
    _InitRSTC();             // Enable User Reset to allow execUserReset() execution
    _Watchdog();             // Stop watch dog
    __emulatorSpeed(0);      // Set JTAG speed to full speed
}

/*********************************************************************
*
*       __Core_Register() :
* Function description
* Read all ARM7 core regsiter
*/
__Core_Register()
{

__mac_i =__readMemory32(0x00,"Register");   __message "R00 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x04,"Register");   __message "R01 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x08,"Register");   __message "R02 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x0C,"Register");   __message "R03 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x10,"Register");   __message "R04 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x14,"Register");   __message "R05 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x18,"Register");   __message "R06 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x1C,"Register");   __message "R07 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x20,"Register");   __message "R08 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x24,"Register");   __message "R09 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x28,"Register");   __message "R10 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x2C,"Register");   __message "R11 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x30,"Register");   __message "R12 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x34,"Register");   __message "R13 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x38,"Register");   __message "R14 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x3C,"Register");   __message "R13 SVC 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x40,"Register");   __message "R14 SVC 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x44,"Register");   __message "R13 ABT 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x48,"Register");   __message "R14 ABT 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x4C,"Register");   __message "R13 UND 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x50,"Register");   __message "R14 UND 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x54,"Register");   __message "R13 IRQ 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x58,"Register");   __message "R14 IRQ 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x5C,"Register");   __message "R08 FIQ 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x60,"Register");   __message "R09 FIQ 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x64,"Register");   __message "R10 FIQ 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x68,"Register");   __message "R11 FIQ 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x6C,"Register");   __message "R12 FIQ 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x70,"Register");   __message "R13 FIQ 0x",__mac_i:%X;  
__mac_i =__readMemory32(0x74,"Register");   __message "R14 FIQ0x",__mac_i:%X; 
__mac_i =__readMemory32(0x98,"Register");   __message "CPSR     ",__mac_i:%X; 
__mac_i =__readMemory32(0x94,"Register");   __message "SPSR     ",__mac_i:%X; 
__mac_i =__readMemory32(0x9C,"Register");   __message "SPSR ABT ",__mac_i:%X; 
__mac_i =__readMemory32(0xA0,"Register");   __message "SPSR ABT ",__mac_i:%X; 
__mac_i =__readMemory32(0xA4,"Register");   __message "SPSR UND ",__mac_i:%X; 
__mac_i =__readMemory32(0xA8,"Register");   __message "SPSR IRQ ",__mac_i:%X; 
__mac_i =__readMemory32(0xAC,"Register");   __message "SPSR FIQ ",__mac_i:%X; 

__mac_i =__readMemory32(0xB4,"Register");   __message "PC 0x",__mac_i:%X;  

}

⌨️ 快捷键说明

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