/* * File: mcf5225x_lo.s * Purpose: Low-level routines for the MCF5225x. * * Notes: * * License: All software covered by license agreement in - * docs/Freescale_Software_License.pdf */ #define mcf5225x_init _mcf5225x_init #define common_startup _common_startup #define cpu_startup _cpu_startup #define main _main #define __IPSBAR ___IPSBAR #define __SRAM ___SRAM #define __FLASH ___FLASH #define __SP_INIT ___SP_INIT .extern __IPSBAR .extern __SRAM .extern __FLASH .extern __SP_INIT .extern mcf5225x_init .extern common_startup .extern cpu_startup .extern main .global asm_startmeup .global _asm_startmeup .global d0_reset .global _d0_reset .global d1_reset .global _d1_reset .data d0_reset: _d0_reset: .long 0 d1_reset: _d1_reset: .long 0 .text /******************************************************************** * * This is the main entry point upon hard reset. The memory map is * setup based on linker file definitions, then the higher level * system initialization routine is called. Finally, we jump to the * "main" process. */ asm_startmeup: _asm_startmeup: move.w #0x2700,sr /* Save off reset values of D0 and D1 */ move.l d0,d6 move.l d1,d7 /* Initialize RAMBAR1: locate SRAM and validate it */ move.l #__SRAM,d0 andi.l #0xFFFF0000,d0 add.l #0x21,d0 movec d0,RAMBAR1 /* Locate Stack Pointer */ move.l #__SP_INIT,sp /* Initialize IPSBAR */ move.l #__IPSBAR,d0 add.l #0x1,d0 move.l d0,0x40000000 /* Initialize FLASHBAR */ move.l #__FLASH,d0 cmp.l #0x00000000,d0 bne change_flashbar add.l #0x61,d0 movec d0,RAMBAR0 _continue_startup: /* Locate Stack Pointer */ move.l #__SP_INIT,sp /* Initialize the system */ jsr mcf5225x_init /* Common startup code */ //jsr common_startup /* Save off intial D0 and D1 to RAM */ move.l d6,d0_reset move.l d7,d1_reset /* CPU specific startup code */ //jsr cpu_startup /* Jump to the main process */ jsr main bra . nop nop halt change_flashbar: /* * The following sequence is used to set FLASHBAR. Since we may * be executing from Flash, we must put the routine into SRAM for * execution and then jump back to Flash using the new address. * * The following instructions are coded into the SRAM: * * move.l #(__FLASH + 0x21),d0 * movec d0, RAMBAR0 * jmp _continue_startup * * An arbitrary SRAM address is chosen until the real address * can be loaded. * * This routine is not necessary if the default Flash address * (0x00000000) is used. * * If running in SRAM, change_flashbar should not be executed */ move.l #__SRAM,a0 /* Code "move.l #(__FLASH + 0x21),d0" into SRAM */ move.w #0x203C,d0 move.w d0,(a0)+ move.l #__FLASH,d0 add.l #0x21,d0 move.l d0,(a0)+ /* Code "movec d0,FLASHBAR" into SRAM */ move.l #0x4e7b0C04,d0 move.l d0,(a0)+ /* Code "jmp _continue_startup" into SRAM */ move.w #0x4EF9,d0 move.w d0,(a0)+ move.l #_continue_startup,d0 move.l d0,(a0)+ /* Jump to code segment in internal SRAM */ jmp __SRAM /********************************************************************/ .end