summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Nielsen Feltzing <linus@haxx.se>2004-10-15 11:33:58 +0000
committerLinus Nielsen Feltzing <linus@haxx.se>2004-10-15 11:33:58 +0000
commita5117f0bb6cc3d41fb56c8ba17d66545d026d5f8 (patch)
tree497262cd3b08e67532589f276033431a299165e5
parent82fb2ace7736210fc5ee9e98e29fed586c1f5186 (diff)
downloadrockbox-a5117f0bb6cc3d41fb56c8ba17d66545d026d5f8.tar.gz
rockbox-a5117f0bb6cc3d41fb56c8ba17d66545d026d5f8.zip
Ported interrupt vector handling to Coldfire
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@5285 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/SOURCES1
-rw-r--r--firmware/system.c178
2 files changed, 176 insertions, 3 deletions
diff --git a/firmware/SOURCES b/firmware/SOURCES
index 82d32fb8ad..7594c6dc1a 100644
--- a/firmware/SOURCES
+++ b/firmware/SOURCES
@@ -2,6 +2,7 @@
2crt0.S 2crt0.S
3backlight.c 3backlight.c
4thread.c 4thread.c
5system.c
5#else 6#else
6backlight.c 7backlight.c
7buffer.c 8buffer.c
diff --git a/firmware/system.c b/firmware/system.c
index 70424c07a8..2ac6ed883f 100644
--- a/firmware/system.c
+++ b/firmware/system.c
@@ -18,7 +18,181 @@
18 ****************************************************************************/ 18 ****************************************************************************/
19#include <stdio.h> 19#include <stdio.h>
20#include "config.h" 20#include "config.h"
21#include <stdbool.h>
21 22
23#if CONFIG_CPU == MCF5249
24
25#define default_interrupt(name) \
26 extern __attribute__((weak,alias("UIE"))) void name (void);
27
28static const char* const irqname[] = {
29 "", "", "AccessErr","AddrErr","IllInstr", "", "","",
30 "PrivVio","Trace","Line-A", "Line-F","Debug","","FormErr","Uninit",
31 "","","","","","","","",
32 "Spurious","Level1","Level2","Level3","Level4","Level5","Level6","Level7",
33 "Trap0","Trap1","Trap2","Trap3","Trap4","Trap5","Trap6","Trap7",
34 "Trap8","Trap9","Trap10","Trap11","Trap12","Trap13","Trap14","Trap15",
35 "SWT","Timer0","Timer1","I2C","UART1","UART2","DMA0","DMA1",
36 "DMA2","DMA3","QSPI","","","","","",
37 "PDIR1FULL","PDIR2FULL","EBUTXEMPTY","IIS2TXEMPTY",
38 "IIS1TXEMPTY","PDIR3FULL","PDIR3RESYN","UQ2CHANERR",
39 "AUDIOTICK","PDIR2RESYN","PDIR2UNOV","PDIR1RESYN",
40 "PDIR1UNOV","UQ1CHANERR","IEC2BUFATTEN","IEC2PARERR",
41 "IEC2VALNOGOOD","IEC2CNEW","IEC1BUFATTEN","UCHANTXNF",
42 "UCHANTXUNDER","UCHANTXEMPTY","PDIR3UNOV","IEC1PARERR",
43 "IEC1VALNOGOOD","IEC1CNEW","EBUTXRESYN","EBUTXUNOV",
44 "IIS2TXRESYN","IIS2TXUNOV","IIS1TXRESYN","IIS1TXUNOV",
45 "GPIO0","GPI1","GPI2","GPI3","GPI4","GPI5","GPI6","GPI7",
46 "","","","","","","","SOFTINT0",
47 "SOFTINT1","SOFTINT2","SOFTINT3","",
48 "","CDROMCRCERR","CDROMNOSYNC","CDROMILSYNC",
49 "CDROMNEWBLK","","","","","","","",
50 "","","","","","","","",
51 "","","","","","","","",
52 "","","","","","","","",
53 "","","","","","","","",
54 "","","","","","","","",
55 "","","","","","","","",
56 "","","","","","","","",
57 "","","","","","","",""
58};
59
60default_interrupt (TRAP0); /* Trap #0 */
61default_interrupt (TRAP1); /* Trap #1 */
62default_interrupt (TRAP2); /* Trap #2 */
63default_interrupt (TRAP3); /* Trap #3 */
64default_interrupt (TRAP4); /* Trap #4 */
65default_interrupt (TRAP5); /* Trap #5 */
66default_interrupt (TRAP6); /* Trap #6 */
67default_interrupt (TRAP7); /* Trap #7 */
68default_interrupt (TRAP8); /* Trap #8 */
69default_interrupt (TRAP9); /* Trap #9 */
70default_interrupt (TRAP10); /* Trap #10 */
71default_interrupt (TRAP11); /* Trap #11 */
72default_interrupt (TRAP12); /* Trap #12 */
73default_interrupt (TRAP13); /* Trap #13 */
74default_interrupt (TRAP14); /* Trap #14 */
75default_interrupt (TRAP15); /* Trap #15 */
76default_interrupt (SWT); /* Software Watchdog Timer */
77default_interrupt (TIMER0); /* Timer 0 */
78default_interrupt (TIMER1); /* Timer 1 */
79default_interrupt (I2C); /* I2C */
80default_interrupt (UART1); /* UART 1 */
81default_interrupt (UART2); /* UART 2 */
82default_interrupt (DMA0); /* DMA 0 */
83default_interrupt (DMA1); /* DMA 1 */
84default_interrupt (DMA2); /* DMA 2 */
85default_interrupt (DMA3); /* DMA 3 */
86default_interrupt (QSPI); /* QSPI */
87
88default_interrupt (PDIR1FULL); /* Processor data in 1 full */
89default_interrupt (PDIR2FULL); /* Processor data in 2 full */
90default_interrupt (EBUTXEMPTY); /* EBU transmit FIFO empty */
91default_interrupt (IIS2TXEMPTY); /* IIS2 transmit FIFO empty */
92default_interrupt (IIS1TXEMPTY); /* IIS1 transmit FIFO empty */
93default_interrupt (PDIR3FULL); /* Processor data in 3 full */
94default_interrupt (PDIR3RESYN); /* Processor data in 3 resync */
95default_interrupt (UQ2CHANERR); /* IEC958-2 Rx U/Q channel error */
96default_interrupt (AUDIOTICK); /* "tick" interrupt */
97default_interrupt (PDIR2RESYN); /* Processor data in 2 resync */
98default_interrupt (PDIR2UNOV); /* Processor data in 2 under/overrun */
99default_interrupt (PDIR1RESYN); /* Processor data in 1 resync */
100default_interrupt (PDIR1UNOV); /* Processor data in 1 under/overrun */
101default_interrupt (UQ1CHANERR); /* IEC958-1 Rx U/Q channel error */
102default_interrupt (IEC2BUFATTEN);/* IEC958-2 channel buffer full */
103default_interrupt (IEC2PARERR); /* IEC958-2 Rx parity or symbol error */
104default_interrupt (IEC2VALNOGOOD);/* IEC958-2 flag not good */
105default_interrupt (IEC2CNEW); /* IEC958-2 New C-channel received */
106default_interrupt (IEC1BUFATTEN);/* IEC958-1 channel buffer full */
107default_interrupt (UCHANTXNF); /* U channel Tx reg next byte is first */
108default_interrupt (UCHANTXUNDER);/* U channel Tx reg underrun */
109default_interrupt (UCHANTXEMPTY);/* U channel Tx reg is empty */
110default_interrupt (PDIR3UNOV); /* Processor data in 3 under/overrun */
111default_interrupt (IEC1PARERR); /* IEC958-1 Rx parity or symbol error */
112default_interrupt (IEC1VALNOGOOD);/* IEC958-1 flag not good */
113default_interrupt (IEC1CNEW); /* IEC958-1 New C-channel received */
114default_interrupt (EBUTXRESYN); /* EBU Tx FIFO resync */
115default_interrupt (EBUTXUNOV); /* EBU Tx FIFO under/overrun */
116default_interrupt (IIS2TXRESYN); /* IIS2 Tx FIFO resync */
117default_interrupt (IIS2TXUNOV); /* IIS2 Tx FIFO under/overrun */
118default_interrupt (IIS1TXRESYN); /* IIS1 Tx FIFO resync */
119default_interrupt (IIS1TXUNOV); /* IIS1 Tx FIFO under/overrun */
120default_interrupt (GPI0); /* GPIO interrupt 0 */
121default_interrupt (GPI1); /* GPIO interrupt 1 */
122default_interrupt (GPI2); /* GPIO interrupt 2 */
123default_interrupt (GPI3); /* GPIO interrupt 3 */
124default_interrupt (GPI4); /* GPIO interrupt 4 */
125default_interrupt (GPI5); /* GPIO interrupt 5 */
126default_interrupt (GPI6); /* GPIO interrupt 6 */
127default_interrupt (GPI7); /* GPIO interrupt 7 */
128
129default_interrupt (SOFTINT0); /* Software interrupt 0 */
130default_interrupt (SOFTINT1); /* Software interrupt 1 */
131default_interrupt (SOFTINT2); /* Software interrupt 2 */
132default_interrupt (SOFTINT3); /* Software interrupt 3 */
133
134default_interrupt (CDROMCRCERR); /* CD-ROM CRC error */
135default_interrupt (CDROMNOSYNC); /* CD-ROM No sync */
136default_interrupt (CDROMILSYNC); /* CD-ROM Illegal sync */
137default_interrupt (CDROMNEWBLK); /* CD-ROM New block */
138
139void UIE (void) /* Unexpected Interrupt or Exception */
140{
141 unsigned int format_vector, pc;
142 int vector;
143
144 asm volatile ("move.l (0,%%sp),%0": "=r"(format_vector));
145 asm volatile ("move.l (4,%%sp),%0": "=r"(pc));
146
147 vector = (format_vector >> 16) & 0xff;
148
149 while (1)
150 {
151 }
152}
153
154/* reset vectors are handled in crt0.S */
155void (* const vbr[]) (void) __attribute__ ((section (".vectors"))) =
156{
157 UIE,UIE,UIE,UIE,UIE,UIE,
158 UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,
159 UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,
160 UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,
161
162 TRAP0,TRAP1,TRAP2,TRAP3,TRAP4,TRAP5,TRAP6,TRAP7,
163 TRAP8,TRAP9,TRAP10,TRAP11,TRAP12,TRAP13,TRAP14,TRAP15,
164
165 SWT,TIMER0,TIMER1,I2C,UART1,UART2,DMA0,DMA1,
166 DMA2,DMA3,QSPI,UIE,UIE,UIE,UIE,UIE,
167 PDIR1FULL,PDIR2FULL,EBUTXEMPTY,IIS2TXEMPTY,
168 IIS1TXEMPTY,PDIR3FULL,PDIR3RESYN,UQ2CHANERR,
169 AUDIOTICK,PDIR2RESYN,PDIR2UNOV,PDIR1RESYN,
170 PDIR1UNOV,UQ1CHANERR,IEC2BUFATTEN,IEC2PARERR,
171 IEC2VALNOGOOD,IEC2CNEW,IEC1BUFATTEN,UCHANTXNF,
172 UCHANTXUNDER,UCHANTXEMPTY,PDIR3UNOV,IEC1PARERR,
173 IEC1VALNOGOOD,IEC1CNEW,EBUTXRESYN,EBUTXUNOV,
174 IIS2TXRESYN,IIS2TXUNOV,IIS1TXRESYN,IIS1TXUNOV,
175 GPI0,GPI1,GPI2,GPI3,GPI4,GPI5,GPI6,GPI7,
176 UIE,UIE,UIE,UIE,UIE,UIE,UIE,SOFTINT0,
177 SOFTINT1,SOFTINT2,SOFTINT3,UIE,
178 UIE,CDROMCRCERR,CDROMNOSYNC,CDROMILSYNC,
179 CDROMNEWBLK,UIE,UIE,UIE,UIE,UIE,UIE,UIE,
180
181 UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,
182 UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,
183 UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,
184 UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,
185 UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,
186 UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,
187 UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,
188 UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE,UIE
189};
190
191void system_init(void)
192{
193}
194
195#elif CONFIG_CPU == SH7034
22#include "lcd.h" 196#include "lcd.h"
23#include "font.h" 197#include "font.h"
24#include "led.h" 198#include "led.h"
@@ -30,9 +204,6 @@
30#define reserve_interrupt(number) \ 204#define reserve_interrupt(number) \
31 void UIE##number (void) 205 void UIE##number (void)
32 206
33extern void reset_pc (void);
34extern void reset_sp (void);
35
36static const char* const irqname[] = { 207static const char* const irqname[] = {
37 "", "", "", "", "IllInstr", "", "IllSltIn","","", 208 "", "", "", "", "IllInstr", "", "IllSltIn","","",
38 "CPUAdrEr", "DMAAdrEr", "NMI", "UserBrk", 209 "CPUAdrEr", "DMAAdrEr", "NMI", "UserBrk",
@@ -541,3 +712,4 @@ int system_memory_guard(int newmode)
541 712
542 return oldmode; 713 return oldmode;
543} 714}
715#endif