]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/ColdFire_MCF52259_CodeWarrior/cpu/mcf5225x_lo.s
Add FreeRTOS-Plus directory.
[freertos] / FreeRTOS / Demo / ColdFire_MCF52259_CodeWarrior / cpu / mcf5225x_lo.s
1 /*\r
2  * File:        mcf5225x_lo.s\r
3  * Purpose:     Low-level routines for the MCF5225x.\r
4  *\r
5  * Notes:       \r
6  * \r
7  * License:     All software covered by license agreement in -\r
8  *              docs/Freescale_Software_License.pdf\r
9  */\r
10 \r
11 #define mcf5225x_init   _mcf5225x_init\r
12 #define common_startup  _common_startup\r
13 #define cpu_startup     _cpu_startup\r
14 #define main            _main\r
15 #define __IPSBAR        ___IPSBAR   \r
16 #define __SRAM          ___SRAM     \r
17 #define __FLASH         ___FLASH    \r
18 #define __SP_INIT       ___SP_INIT  \r
19  \r
20         .extern __IPSBAR\r
21         .extern __SRAM\r
22         .extern __FLASH\r
23         .extern __SP_INIT\r
24         .extern mcf5225x_init\r
25     .extern common_startup\r
26     .extern cpu_startup\r
27         .extern main\r
28 \r
29         .global asm_startmeup\r
30         .global _asm_startmeup\r
31         .global d0_reset\r
32         .global _d0_reset\r
33         .global d1_reset\r
34         .global _d1_reset\r
35 \r
36     .data\r
37     \r
38 d0_reset:\r
39 _d0_reset:  .long   0\r
40 d1_reset:\r
41 _d1_reset:  .long   0\r
42 \r
43         .text\r
44 \r
45 /********************************************************************\r
46  * \r
47  * This is the main entry point upon hard reset.  The memory map is\r
48  * setup based on linker file definitions, then the higher level\r
49  * system initialization routine is called.  Finally, we jump to the\r
50  * "main" process. \r
51  */\r
52 asm_startmeup:\r
53 _asm_startmeup:\r
54 \r
55     move.w      #0x2700,sr\r
56 \r
57     /* Save off reset values of D0 and D1 */\r
58     move.l  d0,d6\r
59     move.l  d1,d7\r
60     \r
61     /* Initialize RAMBAR1: locate SRAM and validate it */\r
62         move.l  #__SRAM,d0\r
63         andi.l  #0xFFFF0000,d0\r
64     add.l   #0x21,d0\r
65     movec   d0,RAMBAR1\r
66 \r
67         /* Locate Stack Pointer */ \r
68         move.l  #__SP_INIT,sp\r
69 \r
70     /* Initialize IPSBAR */\r
71         move.l  #__IPSBAR,d0\r
72     add.l   #0x1,d0\r
73         move.l  d0,0x40000000\r
74         \r
75     /* Initialize FLASHBAR */\r
76     move.l  #__FLASH,d0\r
77     cmp.l   #0x00000000,d0\r
78     bne     change_flashbar\r
79     add.l   #0x61,d0\r
80     movec   d0,RAMBAR0\r
81 \r
82 _continue_startup:\r
83 \r
84         /* Locate Stack Pointer */ \r
85         move.l  #__SP_INIT,sp\r
86 \r
87         /* Initialize the system */\r
88         jsr             mcf5225x_init\r
89 \r
90     /* Common startup code */\r
91     //jsr     common_startup\r
92 \r
93     /* Save off intial D0 and D1 to RAM */\r
94     move.l  d6,d0_reset\r
95     move.l  d7,d1_reset\r
96     \r
97     /* CPU specific startup code */\r
98         //jsr     cpu_startup\r
99 \r
100         /* Jump to the main process */\r
101         jsr             main\r
102         \r
103         bra             .\r
104         nop\r
105         nop\r
106         halt\r
107 \r
108 change_flashbar:\r
109     /* \r
110      * The following sequence is used to set FLASHBAR. Since we may \r
111      * be executing from Flash, we must put the routine into SRAM for\r
112      * execution and then jump back to Flash using the new address.\r
113      *\r
114      * The following instructions are coded into the SRAM:\r
115      *\r
116      * move.l   #(__FLASH + 0x21),d0\r
117      * movec    d0, RAMBAR0\r
118      * jmp              _continue_startup\r
119      *\r
120      * An arbitrary SRAM address is chosen until the real address\r
121      * can be loaded.\r
122      *\r
123      * This routine is not necessary if the default Flash address\r
124      * (0x00000000) is used.\r
125      *\r
126      * If running in SRAM, change_flashbar should not be executed \r
127      */\r
128 \r
129         move.l  #__SRAM,a0\r
130 \r
131         /* Code "move.l #(__FLASH + 0x21),d0" into SRAM */\r
132         move.w  #0x203C,d0\r
133         move.w  d0,(a0)+\r
134         move.l  #__FLASH,d0\r
135     add.l   #0x21,d0\r
136     move.l  d0,(a0)+\r
137         \r
138         /* Code "movec d0,FLASHBAR" into SRAM */\r
139         move.l  #0x4e7b0C04,d0\r
140         move.l  d0,(a0)+\r
141                 \r
142         /* Code "jmp _continue_startup" into SRAM */\r
143         move.w  #0x4EF9,d0\r
144         move.w  d0,(a0)+\r
145         move.l  #_continue_startup,d0\r
146         move.l  d0,(a0)+\r
147 \r
148         /* Jump to code segment in internal SRAM */\r
149         jmp         __SRAM\r
150 \r
151 /********************************************************************/\r
152 \r
153         .end\r