MCF52233_sysinit.s
上传用户:dongxin
上传日期:2022-06-22
资源大小:370k
文件大小:3k
源码类别:

uCOS

开发平台:

Others

  1. /*
  2.  * File: mcf5223x_sysinit.s
  3.  * Purpose: Assembly reset function for mcf5223x.
  4.  *
  5.  * Notes:
  6.  *
  7.  */
  8.  
  9. /***
  10.  * MCF5223x Derivative Memory map definitions from linker command files:
  11.  * __IPSBAR, __RAMBAR, __RAMBAR_SIZE, __FLASHBAR, __FLASHBAR_SIZE linker
  12.  * symbols must be defined in the linker command file.
  13.  */ 
  14.     .extern ___IPSBAR;
  15.     .extern ___RAMBAR;
  16.     .extern ___RAMBAR_SIZE;
  17.     .extern ___FLASHBAR;
  18.     .extern ___FLASHBAR_SIZE;
  19.     .extern ___SP_INIT
  20. /***
  21.  *   void SYSTEM_SysInit(void); : does Power-on Reset configuration of the M5253EVB
  22.  */     
  23. .extern _SYSTEM_SysInit
  24. .extern _OSCtxSw
  25. /***
  26.  *   int main(void); must be defined and we use mangling
  27.  */     
  28.     .extern _main
  29.     
  30.     .global _asm_startmeup
  31.     .global swi
  32.     .global _swi
  33. .text
  34. .function "_asm_startmeup",_asm_startmeup,_asm_startmeup_end-_asm_startmeup
  35. /********************************************************************
  36.  * 
  37.  * This is the main entry point upon hard reset.  The memory map is
  38.  * setup based on linker file definitions, then the higher level
  39.  * system initialization routine is called.  Finally, we jump to the
  40.  * "main" process. 
  41.  */
  42. _asm_startmeup: 
  43. move.w #0x2700,SR
  44.     
  45. /* Initialize RAMBAR: locate SRAM and validate it */
  46. move.l #(___RAMBAR + 0x21),d0
  47. movec d0,RAMBAR1
  48. /* Initialize IPSBAR */
  49. move.l #___IPSBAR,d0
  50.    add.l   #0x1,d0
  51. move.l d0,0x40000000
  52.   /* Initialize FLASHBAR */
  53.   move.l  #___FLASHBAR,d0
  54.   cmp.l   #0x00000000,d0
  55.   bne     change_flashbar
  56.   add.l   #0x61,d0
  57.   movec   d0,FLASHBAR
  58. _continue_startup:    
  59.   /* At this point the memory should be correctly setup */
  60. /* Locate Stack Pointer */ 
  61. move.l #___SP_INIT,sp
  62. /* Initialize periphs, bus, memory, etc... */
  63. jsr _SYSTEM_SysInit
  64. /* Initialize A6 */
  65. movea.l #0,A6
  66. link A6,#0
  67.     
  68. /* Jump to the main process */
  69. jsr _main
  70. nop
  71. nop
  72. halt
  73. change_flashbar:
  74.     /* 
  75.      * The following sequence is used to set FLASHBAR. Since we may 
  76.      * be executing from Flash, we must put the routine into SRAM for
  77.      * execution and then jump back to Flash using the new address.
  78.      *
  79.      * The following instructions are coded into the SRAM:
  80.      *
  81.      * move.l #(___FLASHBAR + 0x61),d0
  82.      * movec d0, RAMBAR
  83.      * jmp _continue_startup
  84.      *
  85.      * An arbitrary SRAM address is chosen until the real address
  86.      * can be loaded.
  87.      *
  88.      * This routine is not necessary if the default Flash address
  89.      * (0x00000000) is used.
  90.      *
  91.      * If running in SRAM, change_flashbar should not be executed 
  92.      */
  93. move.l  #___RAMBAR,a0
  94. /* Code "move.l #(___FLASHBAR + 0x61),d0" into SRAM */
  95. move.w  #0x203C,d0
  96. move.w  d0,(a0)+
  97. move.l  #___FLASHBAR,d0
  98.   add.l   #0x61,d0
  99.   move.l  d0,(a0)+
  100. /* Code "movec d0,FLASHBAR" into SRAM */
  101. move.l  #0x4e7b0C04,d0
  102. move.l  d0,(a0)+
  103. /* Code "jmp _continue_startup" into SRAM */
  104. move.w  #0x4EF9,d0
  105. move.w  d0,(a0)+
  106. move.l  #_continue_startup,d0
  107. move.l  d0,(a0)+
  108. /* Jump to code segment in internal SRAM */
  109. jmp     ___RAMBAR
  110. _asm_startmeup_end:
  111. /********************************************************************/
  112. swi:
  113. _swi:
  114.     jmp _OSCtxSw
  115.     rts
  116. .end