Schönen guten Tag,
Ich probieren schon seit über einem Tag in C meine Uart1-Schnittstelle
auf meinem LPC2136 mit dem FIQ (Fast Interrupt Request) laufen zulassen.
Mit dem normalen IRQ funktioniert es einwandfrei.
Ich muss zugeben, ich bin kein Profi in Sachen ARM-Controller bzw.
Programmierung. Deswegen verwirrt mich auch der Aufbau meiner startup.s
.Denn in einigen Foreneinträgen habe ich gelesen, dass ich dort etwas
verändern muss. Verstanden Wo und Was habe ich aber noch nicht.
Schonmal Vielen Dank für eure Mühen ;)
1 | void uart1_irq_init(void);
|
2 | void uart1isr(void) __attribute__ ((interrupt("FIQ")));
|
3 |
|
4 | /*Main-Funktion*/
|
5 | int main(void)
|
6 | {
|
7 | systeminit();
|
8 | gpioinit();
|
9 | // setup the UART;
|
10 | uart1init(UART_BAUD(BAUD), UART_8N1, UART_FIFO_8);
|
11 |
|
12 | uart1_irq_init();
|
13 | enableFIQ();
|
14 |
|
15 | for(;;)
|
16 | {
|
17 | /*Tut irgendwas*/
|
18 | }
|
19 | return 0;
|
20 | }
|
21 |
|
22 | void uart1_irq_init(void)
|
23 | {
|
24 | UART1_LCR = 0x03; //8bit lenght
|
25 | UART1_FCR = 0x07; //Enable and reset TX and RX FIFO.
|
26 | UART1_IER |= 0x7; //Enable RBR/THRE/RX Line Interrupts
|
27 | VICVectAddr0 = (unsigned)uart1isr; //ISR deklarieren
|
28 | VICVectCntl0 = (1<<5)|7; //Interrupt Priority
|
29 | VICIntSelect |= (1<<7); //UART1 im FIQ-Modus
|
30 | VICIntEnable |= (1<<7); //Timer0 Interrupt enable
|
31 | }
|
32 |
|
33 | void uart1isr(void)
|
34 | {
|
35 | uartdata=UART1_RBR;
|
36 | VICVectAddr = 0; //"Submit" Interrupt
|
37 | }
|