]> git.sur5r.net Git - freertos/blob - Demo/ColdFire_MCF52259_CodeWarrior/cpu/mcf5225x_sysinit.c
Add Cortus port to produce V6.0.5.
[freertos] / Demo / ColdFire_MCF52259_CodeWarrior / cpu / mcf5225x_sysinit.c
1 /*\r
2  * File:                sysinit.c\r
3  * Purpose:             Reset configuration of the M52259EVB\r
4  * \r
5  * License:     All software covered by license agreement in -\r
6  *              docs/Freescale_Software_License.pdf\r
7  */\r
8 \r
9 #include "common.h"\r
10 \r
11 /********************************************************************/\r
12 \r
13 void mcf5225x_init(void);\r
14 void mcf5225x_wtm_init(void);\r
15 void mcf5225x_pll_init(void);\r
16 void mcf5225x_uart_init(void);\r
17 void mcf5225x_scm_init(void);\r
18 void mcf5225x_gpio_init(void);\r
19 \r
20 /********************************************************************/\r
21 void\r
22 mcf5225x_init(void)\r
23 {\r
24         register uint32 n;\r
25         register uint8 *dp, *sp;\r
26 \r
27 \r
28     /* \r
29      * Allow interrupts from ABORT, SW1, SW2 (IRQ[1,5,7]) \r
30      * and USB (IRQ[2,6])\r
31      */\r
32      \r
33         \r
34     /* Enable IRQ signals on the port */\r
35     MCF_GPIO_PNQPAR = 0\r
36         | MCF_GPIO_PNQPAR_IRQ1_IRQ1   \r
37         | MCF_GPIO_PNQPAR_IRQ5_IRQ5\r
38         | MCF_GPIO_PNQPAR_IRQ7_IRQ7;\r
39     \r
40     /* Set EPORT to look for falling edges */\r
41     MCF_EPORT_EPPAR = 0\r
42         | MCF_EPORT_EPPAR_EPPA1_FALLING  \r
43         | MCF_EPORT_EPPAR_EPPA2_FALLING  \r
44         | MCF_EPORT_EPPAR_EPPA5_FALLING\r
45         | MCF_EPORT_EPPAR_EPPA6_FALLING  \r
46         | MCF_EPORT_EPPAR_EPPA7_FALLING;\r
47         \r
48     /* Clear any currently triggered events on the EPORT  */\r
49     MCF_EPORT_EPIER = 0\r
50         | MCF_EPORT_EPIER_EPIE1\r
51         | MCF_EPORT_EPIER_EPIE2 \r
52         | MCF_EPORT_EPIER_EPIE5\r
53         | MCF_EPORT_EPIER_EPIE6 \r
54         | MCF_EPORT_EPIER_EPIE7;\r
55        \r
56     /* Enable interrupts in the interrupt controller */\r
57     MCF_INTC0_IMRL &= ~(0\r
58         | MCF_INTC_IMRL_INT_MASK1 \r
59         | MCF_INTC_IMRL_INT_MASK2 \r
60         | MCF_INTC_IMRL_INT_MASK5 \r
61         | MCF_INTC_IMRL_INT_MASK6 \r
62         | MCF_INTC_IMRL_INT_MASK7 \r
63         | MCF_INTC_IMRL_MASKALL);\r
64 \r
65   \r
66         /* Enable debug */\r
67         MCF_GPIO_PDDPAR = 0x0F;\r
68         \r
69         /* Set real time clock freq */\r
70 \r
71         MCF_CLOCK_RTCCR = 48000000;\r
72 \r
73         /* Copy the vector table to RAM */\r
74         if (__VECTOR_RAM != VECTOR_TABLE)\r
75         {\r
76                 for (n = 0; n < 256; n++)\r
77                         __VECTOR_RAM[n] = VECTOR_TABLE[n];\r
78                         \r
79                 mcf5xxx_wr_vbr((uint32)__VECTOR_RAM);\r
80         }\r
81 \r
82         /*\r
83          * Move initialized data from ROM to RAM.\r
84          */\r
85         if (__DATA_ROM != __DATA_RAM)\r
86         {\r
87                 dp = (uint8 *)__DATA_RAM;\r
88                 sp = (uint8 *)__DATA_ROM;\r
89                 n = (uint32)(__DATA_END - __DATA_RAM);\r
90                 while (n--)\r
91                         *dp++ = *sp++;\r
92         }\r
93 \r
94         /*\r
95          * Zero uninitialized data\r
96          */\r
97         if (__BSS_START != __BSS_END)\r
98         {\r
99                 sp = (uint8 *)__BSS_START;\r
100                 n = (uint32)(__BSS_END - __BSS_START);\r
101                 while (n--)\r
102                         *sp++ = 0;\r
103         }\r
104         mcf5225x_wtm_init();\r
105 \r
106         mcf5225x_pll_init();\r
107         mcf5225x_scm_init();\r
108         mcf5225x_uart_init();\r
109 }\r
110 /********************************************************************/\r
111 void\r
112 mcf5225x_wtm_init(void)\r
113 {\r
114         /*\r
115          * Disable Software Watchdog Timer\r
116          */\r
117         MCF_SCM_CWCR = 0;\r
118 }\r
119 /********************************************************************/\r
120 void\r
121 mcf5225x_pll_init(void)\r
122 {\r
123         /*Required if booting with internal relaxation oscillator & pll off, clkmod[1:0]=00 & xtal=1 */\r
124 #ifndef OMIT_OCLR_CONFIGURATION\r
125         MCF_CLOCK_OCLR = 0xC0;   //turn on crystal\r
126         MCF_CLOCK_CCLR = 0x00;    //switch to crystal \r
127     MCF_CLOCK_OCHR = 0x00; //turn off relaxation osc\r
128 #endif\r
129 \r
130         /* The PLL pre divider - 48MHz / 6 = 8MHz */\r
131         MCF_CLOCK_CCHR =0x05;\r
132          \r
133          \r
134         /* The PLL pre-divider affects this!!! \r
135          * Multiply 48Mhz reference crystal /CCHR by 10 to acheive system clock of 80Mhz\r
136          */\r
137 \r
138         MCF_CLOCK_SYNCR &= ~(MCF_CLOCK_SYNCR_PLLEN);\r
139 \r
140     MCF_CLOCK_SYNCR |= MCF_CLOCK_SYNCR_CLKSRC | MCF_CLOCK_SYNCR_PLLMODE;\r
141         \r
142         //80\r
143         MCF_CLOCK_SYNCR |= MCF_CLOCK_SYNCR_MFD(3) | MCF_CLOCK_SYNCR_RFD(0);\r
144         //64\r
145         //MCF_CLOCK_SYNCR = MCF_CLOCK_SYNCR_MFD(2) | MCF_CLOCK_SYNCR_RFD(0);\r
146         //16\r
147         //MCF_CLOCK_SYNCR = MCF_CLOCK_SYNCR_MFD(2) | MCF_CLOCK_SYNCR_RFD(2);\r
148         //8\r
149         //MCF_CLOCK_SYNCR = MCF_CLOCK_SYNCR_MFD(2) | MCF_CLOCK_SYNCR_RFD(3);\r
150         //1\r
151         //MCF_CLOCK_SYNCR = MCF_CLOCK_SYNCR_MFD(2) | MCF_CLOCK_SYNCR_RFD(6);\r
152         \r
153         MCF_CLOCK_SYNCR |= MCF_CLOCK_SYNCR_PLLEN;\r
154 \r
155         \r
156         while (!(MCF_CLOCK_SYNSR & MCF_CLOCK_SYNSR_LOCK))\r
157         {\r
158         }\r
159 }\r
160 /********************************************************************/\r
161 void\r
162 mcf5225x_scm_init(void)\r
163 {\r
164         /*\r
165          * Enable on-chip modules to access internal SRAM\r
166          */\r
167         MCF_SCM_RAMBAR = (0\r
168                 | MCF_SCM_RAMBAR_BA(SRAM_ADDRESS)\r
169                 | MCF_SCM_RAMBAR_BDE);\r
170 }\r
171 /********************************************************************/\r
172 void\r
173 mcf5225x_gpio_init(void)\r
174 {\r
175         /*\r
176          * Initialize Port TA to enable Axcel control\r
177          */\r
178         MCF_GPIO_PTAPAR = 0x00; \r
179         MCF_GPIO_DDRTA  = 0x0F;\r
180         MCF_GPIO_PORTTA = 0x04;\r
181         \r
182 }\r
183 /********************************************************************/\r
184 void\r
185 mcf5225x_uart_init(void)\r
186 {\r
187         /*\r
188          * Initialize all three UARTs for serial communications\r
189          */\r
190 \r
191         register uint16 ubgs;\r
192 \r
193         /*\r
194          * Set Port UA to initialize URXD0/UTXD0\r
195          */\r
196     MCF_GPIO_PUAPAR = 0\r
197         | MCF_GPIO_PUAPAR_URXD0_URXD0\r
198         | MCF_GPIO_PUAPAR_UTXD0_UTXD0;\r
199 \r
200     MCF_GPIO_PUBPAR = 0\r
201         | MCF_GPIO_PUBPAR_URXD1_URXD1\r
202         | MCF_GPIO_PUBPAR_UTXD1_UTXD1;\r
203 \r
204     MCF_GPIO_PUCPAR = 0\r
205         | MCF_GPIO_PUCPAR_URXD2_URXD2\r
206         | MCF_GPIO_PUCPAR_UTXD2_UTXD2;\r
207 \r
208         /*\r
209          * Reset Transmitter\r
210          */\r
211         MCF_UART0_UCR = MCF_UART_UCR_RESET_TX;\r
212         MCF_UART1_UCR = MCF_UART_UCR_RESET_TX;\r
213         MCF_UART2_UCR = MCF_UART_UCR_RESET_TX;\r
214 \r
215         /*\r
216          * Reset Receiver\r
217          */\r
218         MCF_UART0_UCR = MCF_UART_UCR_RESET_RX;\r
219         MCF_UART1_UCR = MCF_UART_UCR_RESET_RX;\r
220         MCF_UART2_UCR = MCF_UART_UCR_RESET_RX;\r
221 \r
222         /*\r
223          * Reset Mode Register\r
224          */\r
225         MCF_UART0_UCR = MCF_UART_UCR_RESET_MR;\r
226         MCF_UART1_UCR = MCF_UART_UCR_RESET_MR;\r
227         MCF_UART2_UCR = MCF_UART_UCR_RESET_MR;\r
228 \r
229         /*\r
230          * No parity, 8-bits per character\r
231          */\r
232         MCF_UART0_UMR1 = (0\r
233                 | MCF_UART_UMR_PM_NONE\r
234                 | MCF_UART_UMR_BC_8 );\r
235         MCF_UART1_UMR1 = (0\r
236                 | MCF_UART_UMR_PM_NONE\r
237                 | MCF_UART_UMR_BC_8 );\r
238         MCF_UART2_UMR1 = (0\r
239                 | MCF_UART_UMR_PM_NONE\r
240                 | MCF_UART_UMR_BC_8 );\r
241 \r
242         /*\r
243          * No echo or loopback, 1 stop bit\r
244          */\r
245         MCF_UART0_UMR2 = (0\r
246                 | MCF_UART_UMR_CM_NORMAL\r
247                 | MCF_UART_UMR_SB_STOP_BITS_1);\r
248         MCF_UART1_UMR2 = (0\r
249                 | MCF_UART_UMR_CM_NORMAL\r
250                 | MCF_UART_UMR_SB_STOP_BITS_1);\r
251         MCF_UART2_UMR2 = (0\r
252                 | MCF_UART_UMR_CM_NORMAL\r
253                 | MCF_UART_UMR_SB_STOP_BITS_1);\r
254 \r
255         /*\r
256          * Set Rx and Tx baud by SYSTEM CLOCK\r
257          */\r
258         MCF_UART0_UCSR = (0\r
259                 | MCF_UART_UCSR_RCS_SYS_CLK\r
260                 | MCF_UART_UCSR_TCS_SYS_CLK);\r
261         MCF_UART1_UCSR = (0\r
262                 | MCF_UART_UCSR_RCS_SYS_CLK\r
263                 | MCF_UART_UCSR_TCS_SYS_CLK);\r
264         MCF_UART2_UCSR = (0\r
265                 | MCF_UART_UCSR_RCS_SYS_CLK\r
266                 | MCF_UART_UCSR_TCS_SYS_CLK);\r
267 \r
268         /*\r
269          * Mask all UART interrupts\r
270          */\r
271         MCF_UART0_UIMR = 0;\r
272         MCF_UART1_UIMR = 0;\r
273         MCF_UART2_UIMR = 0;\r
274 \r
275         /*\r
276          * Calculate baud settings\r
277          */\r
278         ubgs = (uint16)((SYSTEM_CLOCK*1000000)/(UART_BAUD * 32));\r
279 \r
280         MCF_UART0_UBG1 = (uint8)((ubgs & 0xFF00) >> 8);\r
281         MCF_UART0_UBG2 = (uint8)(ubgs & 0x00FF);\r
282         MCF_UART1_UBG1 = (uint8)((ubgs & 0xFF00) >> 8);\r
283         MCF_UART1_UBG2 = (uint8)(ubgs & 0x00FF);\r
284         MCF_UART2_UBG1 = (uint8)((ubgs & 0xFF00) >> 8);\r
285         MCF_UART2_UBG2 = (uint8)(ubgs & 0x00FF);\r
286 \r
287         /*\r
288          * Enable receiver and transmitter\r
289          */\r
290         MCF_UART0_UCR = (0\r
291                 | MCF_UART_UCR_TX_ENABLED\r
292                 | MCF_UART_UCR_RX_ENABLED);\r
293         MCF_UART1_UCR = (0\r
294                 | MCF_UART_UCR_TX_ENABLED\r
295                 | MCF_UART_UCR_RX_ENABLED);\r
296         MCF_UART2_UCR = (0\r
297                 | MCF_UART_UCR_TX_ENABLED\r
298                 | MCF_UART_UCR_RX_ENABLED);\r
299 \r
300 }\r
301 /********************************************************************/\r