diff options
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/SOURCES | 1 | ||||
-rw-r--r-- | firmware/system.c | 178 |
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 @@ | |||
2 | crt0.S | 2 | crt0.S |
3 | backlight.c | 3 | backlight.c |
4 | thread.c | 4 | thread.c |
5 | system.c | ||
5 | #else | 6 | #else |
6 | backlight.c | 7 | backlight.c |
7 | buffer.c | 8 | buffer.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 | |||
28 | static 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 | |||
60 | default_interrupt (TRAP0); /* Trap #0 */ | ||
61 | default_interrupt (TRAP1); /* Trap #1 */ | ||
62 | default_interrupt (TRAP2); /* Trap #2 */ | ||
63 | default_interrupt (TRAP3); /* Trap #3 */ | ||
64 | default_interrupt (TRAP4); /* Trap #4 */ | ||
65 | default_interrupt (TRAP5); /* Trap #5 */ | ||
66 | default_interrupt (TRAP6); /* Trap #6 */ | ||
67 | default_interrupt (TRAP7); /* Trap #7 */ | ||
68 | default_interrupt (TRAP8); /* Trap #8 */ | ||
69 | default_interrupt (TRAP9); /* Trap #9 */ | ||
70 | default_interrupt (TRAP10); /* Trap #10 */ | ||
71 | default_interrupt (TRAP11); /* Trap #11 */ | ||
72 | default_interrupt (TRAP12); /* Trap #12 */ | ||
73 | default_interrupt (TRAP13); /* Trap #13 */ | ||
74 | default_interrupt (TRAP14); /* Trap #14 */ | ||
75 | default_interrupt (TRAP15); /* Trap #15 */ | ||
76 | default_interrupt (SWT); /* Software Watchdog Timer */ | ||
77 | default_interrupt (TIMER0); /* Timer 0 */ | ||
78 | default_interrupt (TIMER1); /* Timer 1 */ | ||
79 | default_interrupt (I2C); /* I2C */ | ||
80 | default_interrupt (UART1); /* UART 1 */ | ||
81 | default_interrupt (UART2); /* UART 2 */ | ||
82 | default_interrupt (DMA0); /* DMA 0 */ | ||
83 | default_interrupt (DMA1); /* DMA 1 */ | ||
84 | default_interrupt (DMA2); /* DMA 2 */ | ||
85 | default_interrupt (DMA3); /* DMA 3 */ | ||
86 | default_interrupt (QSPI); /* QSPI */ | ||
87 | |||
88 | default_interrupt (PDIR1FULL); /* Processor data in 1 full */ | ||
89 | default_interrupt (PDIR2FULL); /* Processor data in 2 full */ | ||
90 | default_interrupt (EBUTXEMPTY); /* EBU transmit FIFO empty */ | ||
91 | default_interrupt (IIS2TXEMPTY); /* IIS2 transmit FIFO empty */ | ||
92 | default_interrupt (IIS1TXEMPTY); /* IIS1 transmit FIFO empty */ | ||
93 | default_interrupt (PDIR3FULL); /* Processor data in 3 full */ | ||
94 | default_interrupt (PDIR3RESYN); /* Processor data in 3 resync */ | ||
95 | default_interrupt (UQ2CHANERR); /* IEC958-2 Rx U/Q channel error */ | ||
96 | default_interrupt (AUDIOTICK); /* "tick" interrupt */ | ||
97 | default_interrupt (PDIR2RESYN); /* Processor data in 2 resync */ | ||
98 | default_interrupt (PDIR2UNOV); /* Processor data in 2 under/overrun */ | ||
99 | default_interrupt (PDIR1RESYN); /* Processor data in 1 resync */ | ||
100 | default_interrupt (PDIR1UNOV); /* Processor data in 1 under/overrun */ | ||
101 | default_interrupt (UQ1CHANERR); /* IEC958-1 Rx U/Q channel error */ | ||
102 | default_interrupt (IEC2BUFATTEN);/* IEC958-2 channel buffer full */ | ||
103 | default_interrupt (IEC2PARERR); /* IEC958-2 Rx parity or symbol error */ | ||
104 | default_interrupt (IEC2VALNOGOOD);/* IEC958-2 flag not good */ | ||
105 | default_interrupt (IEC2CNEW); /* IEC958-2 New C-channel received */ | ||
106 | default_interrupt (IEC1BUFATTEN);/* IEC958-1 channel buffer full */ | ||
107 | default_interrupt (UCHANTXNF); /* U channel Tx reg next byte is first */ | ||
108 | default_interrupt (UCHANTXUNDER);/* U channel Tx reg underrun */ | ||
109 | default_interrupt (UCHANTXEMPTY);/* U channel Tx reg is empty */ | ||
110 | default_interrupt (PDIR3UNOV); /* Processor data in 3 under/overrun */ | ||
111 | default_interrupt (IEC1PARERR); /* IEC958-1 Rx parity or symbol error */ | ||
112 | default_interrupt (IEC1VALNOGOOD);/* IEC958-1 flag not good */ | ||
113 | default_interrupt (IEC1CNEW); /* IEC958-1 New C-channel received */ | ||
114 | default_interrupt (EBUTXRESYN); /* EBU Tx FIFO resync */ | ||
115 | default_interrupt (EBUTXUNOV); /* EBU Tx FIFO under/overrun */ | ||
116 | default_interrupt (IIS2TXRESYN); /* IIS2 Tx FIFO resync */ | ||
117 | default_interrupt (IIS2TXUNOV); /* IIS2 Tx FIFO under/overrun */ | ||
118 | default_interrupt (IIS1TXRESYN); /* IIS1 Tx FIFO resync */ | ||
119 | default_interrupt (IIS1TXUNOV); /* IIS1 Tx FIFO under/overrun */ | ||
120 | default_interrupt (GPI0); /* GPIO interrupt 0 */ | ||
121 | default_interrupt (GPI1); /* GPIO interrupt 1 */ | ||
122 | default_interrupt (GPI2); /* GPIO interrupt 2 */ | ||
123 | default_interrupt (GPI3); /* GPIO interrupt 3 */ | ||
124 | default_interrupt (GPI4); /* GPIO interrupt 4 */ | ||
125 | default_interrupt (GPI5); /* GPIO interrupt 5 */ | ||
126 | default_interrupt (GPI6); /* GPIO interrupt 6 */ | ||
127 | default_interrupt (GPI7); /* GPIO interrupt 7 */ | ||
128 | |||
129 | default_interrupt (SOFTINT0); /* Software interrupt 0 */ | ||
130 | default_interrupt (SOFTINT1); /* Software interrupt 1 */ | ||
131 | default_interrupt (SOFTINT2); /* Software interrupt 2 */ | ||
132 | default_interrupt (SOFTINT3); /* Software interrupt 3 */ | ||
133 | |||
134 | default_interrupt (CDROMCRCERR); /* CD-ROM CRC error */ | ||
135 | default_interrupt (CDROMNOSYNC); /* CD-ROM No sync */ | ||
136 | default_interrupt (CDROMILSYNC); /* CD-ROM Illegal sync */ | ||
137 | default_interrupt (CDROMNEWBLK); /* CD-ROM New block */ | ||
138 | |||
139 | void 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 */ | ||
155 | void (* 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 | |||
191 | void 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 | ||
33 | extern void reset_pc (void); | ||
34 | extern void reset_sp (void); | ||
35 | |||
36 | static const char* const irqname[] = { | 207 | static 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 | ||