]> git.sur5r.net Git - freertos/blob - Demo/ColdFire_MCF52259_CodeWarrior/Freescale_Headers/mcf5xxx.h
Change to the file headers only.
[freertos] / Demo / ColdFire_MCF52259_CodeWarrior / Freescale_Headers / mcf5xxx.h
1 /*\r
2  * File:        mcf5xxx.h\r
3  * Purpose:     Definitions common to all ColdFire processors\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 #ifndef _CPU_MCF5XXX_H\r
12 #define _CPU_MCF5XXX_H\r
13 \r
14 /***********************************************************************/\r
15 /*\r
16  * Misc. Defines\r
17  */\r
18 #ifdef  FALSE\r
19 #undef  FALSE\r
20 #endif\r
21 #define FALSE   (0)\r
22 \r
23 #ifdef  TRUE\r
24 #undef  TRUE\r
25 #endif\r
26 #define TRUE    (1)\r
27 \r
28 #ifdef  NULL\r
29 #undef  NULL\r
30 #endif\r
31 #define NULL    (0)\r
32 \r
33 #ifdef  ON\r
34 #undef  ON\r
35 #endif\r
36 #define ON      (1)\r
37 \r
38 #ifdef  OFF\r
39 #undef  OFF\r
40 #endif\r
41 #define OFF     (0)\r
42 \r
43 /***********************************************************************/\r
44 /*\r
45  * The basic data types\r
46  */\r
47 typedef unsigned char       uint8;  /*  8 bits */\r
48 typedef unsigned short int  uint16; /* 16 bits */\r
49 typedef unsigned long int   uint32; /* 32 bits */\r
50 \r
51 typedef char                int8;   /*  8 bits */\r
52 typedef short int           int16;  /* 16 bits */\r
53 typedef int                 int32;  /* 32 bits */\r
54 \r
55 typedef volatile int8       vint8;  /*  8 bits */\r
56 typedef volatile int16      vint16; /* 16 bits */\r
57 typedef volatile int32      vint32; /* 32 bits */\r
58 \r
59 typedef volatile uint8      vuint8;  /*  8 bits */\r
60 typedef volatile uint16     vuint16; /* 16 bits */\r
61 typedef volatile uint32     vuint32; /* 32 bits */\r
62 \r
63 /***********************************************************************/\r
64 /*\r
65  * Common M68K & ColdFire definitions\r
66  */\r
67 #define ADDRESS         uint32\r
68 #define INSTRUCTION     uint16\r
69 #define ILLEGAL         0x4AFC\r
70 #define CPU_WORD_SIZE   16\r
71 \r
72 /* Status Register */\r
73 #define MCF5XXX_SR_T        (0x8000)\r
74 #define MCF5XXX_SR_S        (0x2000)\r
75 #define MCF5XXX_SR_M        (0x1000)\r
76 #define MCF5XXX_SR_IPL      (0x0700)\r
77 #define MCF5XXX_SR_IPL_0    (0x0000)\r
78 #define MCF5XXX_SR_IPL_1    (0x0100)\r
79 #define MCF5XXX_SR_IPL_2    (0x0200)\r
80 #define MCF5XXX_SR_IPL_3    (0x0300)\r
81 #define MCF5XXX_SR_IPL_4    (0x0400)\r
82 #define MCF5XXX_SR_IPL_5    (0x0500)\r
83 #define MCF5XXX_SR_IPL_6    (0x0600)\r
84 #define MCF5XXX_SR_IPL_7    (0x0700)\r
85 #define MCF5XXX_SR_X        (0x0010)\r
86 #define MCF5XXX_SR_N        (0x0008)\r
87 #define MCF5XXX_SR_Z        (0x0004)\r
88 #define MCF5XXX_SR_V        (0x0002)\r
89 #define MCF5XXX_SR_C        (0x0001)\r
90 \r
91 /* Cache Control Register */\r
92 #define MCF5XXX_CACR_CENB       (0x80000000)\r
93 #define MCF5XXX_CACR_DEC        (0x80000000)\r
94 #define MCF5XXX_CACR_DW         (0x40000000)\r
95 #define MCF5XXX_CACR_DESB       (0x20000000)\r
96 #define MCF5XXX_CACR_CPDI       (0x10000000)\r
97 #define MCF5XXX_CACR_DDPI       (0x10000000)\r
98 #define MCF5XXX_CACR_CPD        (0x10000000)\r
99 #define MCF5XXX_CACR_CFRZ       (0x08000000)\r
100 #define MCF5XXX_CACR_DHLCK      (0x08000000)\r
101 #define MCF5XXX_CACR_DDCM_WT    (0x00000000)\r
102 #define MCF5XXX_CACR_DDCM_CB    (0x02000000)\r
103 #define MCF5XXX_CACR_DDCM_IP    (0x04000000)\r
104 #define MCF5XXX_CACR_DDCM_II    (0x06000000)\r
105 #define MCF5XXX_CACR_CINV       (0x01000000)\r
106 #define MCF5XXX_CACR_DCINVA     (0x01000000)\r
107 #define MCF5XXX_CACR_DIDI       (0x00800000)\r
108 #define MCF5XXX_CACR_DDSP       (0x00800000)\r
109 #define MCF5XXX_CACR_DISD       (0x00400000)\r
110 #define MCF5XXX_CACR_INVI       (0x00200000)\r
111 #define MCF5XXX_CACR_INVD       (0x00100000)\r
112 #define MCF5XXX_CACR_BEC        (0x00080000)\r
113 #define MCF5XXX_CACR_BCINVA     (0x00040000)\r
114 #define MCF5XXX_CACR_IEC        (0x00008000)\r
115 #define MCF5XXX_CACR_DNFB       (0x00002000)\r
116 #define MCF5XXX_CACR_IDPI       (0x00001000)\r
117 #define MCF5XXX_CACR_IHLCK      (0x00000800)\r
118 #define MCF5XXX_CACR_CEIB       (0x00000400)\r
119 #define MCF5XXX_CACR_IDCM       (0x00000400)\r
120 #define MCF5XXX_CACR_DCM_WR     (0x00000000)\r
121 #define MCF5XXX_CACR_DCM_CB     (0x00000100)\r
122 #define MCF5XXX_CACR_DCM_IP     (0x00000200)\r
123 #define MCF5XXX_CACR_DCM        (0x00000200)\r
124 #define MCF5XXX_CACR_DCM_II     (0x00000300)\r
125 #define MCF5XXX_CACR_DBWE       (0x00000100)\r
126 #define MCF5XXX_CACR_ICINVA     (0x00000100)\r
127 #define MCF5XXX_CACR_IDSP       (0x00000080)\r
128 #define MCF5XXX_CACR_DWP        (0x00000020)\r
129 #define MCF5XXX_CACR_EUSP       (0x00000020)\r
130 #define MCF5XXX_CACR_EUST       (0x00000020)\r
131 #define MCF5XXX_CACR_DF         (0x00000010)\r
132 #define MCF5XXX_CACR_CLNF_00    (0x00000000)\r
133 #define MCF5XXX_CACR_CLNF_01    (0x00000002)\r
134 #define MCF5XXX_CACR_CLNF_10    (0x00000004)\r
135 #define MCF5XXX_CACR_CLNF_11    (0x00000006)\r
136 \r
137 /* Access Control Register */\r
138 #define MCF5XXX_ACR_AB(a)       ((a)&0xFF000000)\r
139 #define MCF5XXX_ACR_AM(a)       (((a)&0xFF000000) >> 8)\r
140 #define MCF5XXX_ACR_AM_4G       (0x00FF0000)\r
141 #define MCF5XXX_ACR_AM_2G       (0x007F0000)\r
142 #define MCF5XXX_ACR_AM_1G       (0x003F0000)\r
143 #define MCF5XXX_ACR_AM_1024M    (0x003F0000)\r
144 #define MCF5XXX_ACR_AM_512M     (0x001F0000)\r
145 #define MCF5XXX_ACR_AM_256M     (0x000F0000)\r
146 #define MCF5XXX_ACR_AM_128M     (0x00070000)\r
147 #define MCF5XXX_ACR_AM_64M      (0x00030000)\r
148 #define MCF5XXX_ACR_AM_32M      (0x00010000)\r
149 #define MCF5XXX_ACR_AM_16M      (0x00000000)\r
150 #define MCF5XXX_ACR_EN          (0x00008000)\r
151 #define MCF5XXX_ACR_SM_USER     (0x00000000)\r
152 #define MCF5XXX_ACR_SM_SUPER    (0x00002000)\r
153 #define MCF5XXX_ACR_SM_IGNORE   (0x00006000)\r
154 #define MCF5XXX_ACR_ENIB        (0x00000080)\r
155 #define MCF5XXX_ACR_CM          (0x00000040)\r
156 #define MCF5XXX_ACR_DCM_WR      (0x00000000)\r
157 #define MCF5XXX_ACR_DCM_CB      (0x00000020)\r
158 #define MCF5XXX_ACR_DCM_IP      (0x00000040)\r
159 #define MCF5XXX_ACR_DCM_II      (0x00000060)\r
160 #define MCF5XXX_ACR_CM          (0x00000040)\r
161 #define MCF5XXX_ACR_BWE         (0x00000020)\r
162 #define MCF5XXX_ACR_WP          (0x00000004)\r
163 \r
164 /* RAM Base Address Register */\r
165 #define MCF5XXX_RAMBAR_BA(a)    ((a)&0xFFFFC000)\r
166 #define MCF5XXX_RAMBAR_PRI_00   (0x00000000)\r
167 #define MCF5XXX_RAMBAR_PRI_01   (0x00004000)\r
168 #define MCF5XXX_RAMBAR_PRI_10   (0x00008000)\r
169 #define MCF5XXX_RAMBAR_PRI_11   (0x0000C000)\r
170 #define MCF5XXX_RAMBAR_WP       (0x00000100)\r
171 #define MCF5XXX_RAMBAR_CI       (0x00000020)\r
172 #define MCF5XXX_RAMBAR_SC       (0x00000010)\r
173 #define MCF5XXX_RAMBAR_SD       (0x00000008)\r
174 #define MCF5XXX_RAMBAR_UC       (0x00000004)\r
175 #define MCF5XXX_RAMBAR_UD       (0x00000002)\r
176 #define MCF5XXX_RAMBAR_V        (0x00000001)\r
177 \r
178 /* Read macros for D0/D1 reset values */\r
179 #define MCF5XXX_D0_PF(x)        (((x)&0xFF000000)>>24)\r
180 #define MCF5XXX_D0_VER(x)       (((x)&0x00F00000)>>20)\r
181 #define MCF5XXX_D0_REV(x)       (((x)&0x000F0000)>>16)\r
182 #define MCF5XXX_D0_MAC(x)       ((x)&0x00008000)\r
183 #define MCF5XXX_D0_DIV(x)       ((x)&0x00004000)\r
184 #define MCF5XXX_D0_EMAC(x)      ((x)&0x00002000)\r
185 #define MCF5XXX_D0_FPU(x)       ((x)&0x00001000)\r
186 #define MCF5XXX_D0_MMU(x)       ((x)&0x00000800)\r
187 #define MCF5XXX_D0_ISA(x)       (((x)&0x000000F0)>>4)\r
188 #define MCF5XXX_D0_DEBUG(x)     (((x)&0x0000000F)>>0)\r
189 #define MCF5XXX_D1_CL(x)        (((x)&0xC0000000)>>30)\r
190 #define MCF5XXX_D1_ICA(x)       (((x)&0x30000000)>>28)\r
191 #define MCF5XXX_D1_ICSIZ(x)     (((x)&0x0F000000)>>24)\r
192 #define MCF5XXX_D1_RAM0SIZ(x)   (((x)&0x00F00000)>>20)\r
193 #define MCF5XXX_D1_ROM0SIZ(x)   (((x)&0x000F0000)>>16)\r
194 #define MCF5XXX_D1_BUSW(x)      (((x)&0x0000C000)>>14)\r
195 #define MCF5XXX_D1_DCA(x)       (((x)&0x00003000)>>12)\r
196 #define MCF5XXX_D1_DCSIZ(x)     (((x)&0x00000F00)>>8)\r
197 #define MCF5XXX_D1_RAM1SIZ(x)   (((x)&0x000000F0)>>4)\r
198 #define MCF5XXX_D1_ROM1SIZ(x)   (((x)&0x0000000F)>>0)\r
199 \r
200 /***********************************************************************/\r
201 /*\r
202  * The ColdFire family of processors has a simplified exception stack\r
203  * frame that looks like the following:\r
204  *\r
205  *              3322222222221111 111111\r
206  *              1098765432109876 5432109876543210\r
207  *           8 +----------------+----------------+\r
208  *             |         Program Counter         |\r
209  *           4 +----------------+----------------+\r
210  *             |FS/Fmt/Vector/FS|      SR        |\r
211  *   SP -->  0 +----------------+----------------+\r
212  *\r
213  * The stack self-aligns to a 4-byte boundary at an exception, with\r
214  * the FS/Fmt/Vector/FS field indicating the size of the adjustment\r
215  * (SP += 0,1,2,3 bytes).\r
216  */\r
217 #define MCF5XXX_RD_SF_FORMAT(PTR)   \\r
218     ((*((uint16 *)(PTR)) >> 12) & 0x00FF)\r
219 \r
220 #define MCF5XXX_RD_SF_VECTOR(PTR)   \\r
221     ((*((uint16 *)(PTR)) >>  2) & 0x00FF)\r
222 \r
223 #define MCF5XXX_RD_SF_FS(PTR)       \\r
224     ( ((*((uint16 *)(PTR)) & 0x0C00) >> 8) | (*((uint16 *)(PTR)) & 0x0003) )\r
225 \r
226 #define MCF5XXX_SF_SR(PTR)  *((uint16 *)(PTR)+1)\r
227 #define MCF5XXX_SF_PC(PTR)  *((uint32 *)(PTR)+1)\r
228 \r
229 /********************************************************************/\r
230 /*\r
231  * Functions provided in mcf5xxx.s\r
232  */\r
233 int  asm_set_ipl (uint32);\r
234 void mcf5xxx_exe_wdebug (void *);\r
235 void mcf5xxx_wr_sr (uint32);\r
236 void mcf5xxx_wr_cacr (uint32);\r
237 void mcf5xxx_wr_asid (uint32);\r
238 void mcf5xxx_wr_acr0 (uint32);\r
239 void mcf5xxx_wr_acr1 (uint32);\r
240 void mcf5xxx_wr_acr2 (uint32);\r
241 void mcf5xxx_wr_acr3 (uint32);\r
242 void mcf5xxx_wr_mmubar (uint32);\r
243 void mcf5xxx_wr_other_a7 (uint32);\r
244 void mcf5xxx_wr_other_sp (uint32);\r
245 void mcf5xxx_wr_vbr (uint32);\r
246 void mcf5xxx_wr_macsr (uint32);\r
247 void mcf5xxx_wr_mask (uint32);\r
248 void mcf5xxx_wr_acc0 (uint32);\r
249 void mcf5xxx_wr_accext01 (uint32);\r
250 void mcf5xxx_wr_accext23 (uint32);\r
251 void mcf5xxx_wr_acc1 (uint32);\r
252 void mcf5xxx_wr_acc2 (uint32);\r
253 void mcf5xxx_wr_acc3 (uint32);\r
254 void mcf5xxx_wr_pc (uint32);\r
255 void mcf5xxx_wr_rombar0 (uint32);\r
256 void mcf5xxx_wr_rombar1 (uint32);\r
257 void mcf5xxx_wr_rambar0 (uint32);\r
258 void mcf5xxx_wr_rambar1 (uint32);\r
259 void mcf5xxx_wr_mpcr (uint32);\r
260 void mcf5xxx_wr_secmbar (uint32);\r
261 void mcf5xxx_wr_mbar1 (uint32);\r
262 void mcf5xxx_wr_mbar (uint32);\r
263 void mcf5xxx_wr_mbar0 (uint32);\r
264 \r
265 /*\r
266  * Functions provided in mcf5xxx.c\r
267  */\r
268 void mcf5xxx_exception_handler (void *);\r
269 void mcf5xxx_interpret_d0d1 (int, int);\r
270 void mcf5xxx_irq_enable (void);\r
271 void mcf5xxx_irq_disable (void);\r
272 ADDRESS mcf5xxx_set_handler (int, ADDRESS);\r
273 \r
274 /*\r
275  * Functions provided by processor specific C file\r
276  */\r
277 void cpu_handle_interrupt (int);\r
278 \r
279 /********************************************************************/\r
280 \r
281 #endif  /* _CPU_MCF5XXX_H */\r
282 \r