Hallo..
ich habe ein neues Problem mit meinem LPC4353 Cortex M4/M0.
Es ist per RMII ein Ethernet-Controller an den Controller angeschlossen
worden und ich habe die Initialisierungsroutinen aus dem LWIP-Stack bzw.
der CMSIS-Lib genommen.
Nun kommt es aber ab und zu (!) zu einem Freeze des Systems wenn ich
folgende Befehle ausführe:
1 | NVIC_DisableIRQ(ETHERNET_IRQn);
|
2 | NVIC_ClearPendingIRQ(ETHERNET_IRQn);
|
3 | NVIC_EnableIRQ(ETHERNET_IRQn);
|
explizit die "EnableIRQ"-Anweisung ist dabei für das Stoppen der
Ausführung verantwortlich. Deshalb hatte ich schon die entsprechende
Routine aus der CMSIS extrahiert und in das Programm eingebaut - selbes
Ergebnis:
1 | NVIC->ISER[0]=1<<5; // ETHERNET_IRQn=5
|
ich hatte schon an ein Timing-Problem gedacht und deshalb vor den obigen
Anweisungen eine Wartezeit eingefügt, aber leider ohne Erfolg.
Die Interrupt-Routine (ETH_IRQHandler) ist zu Testzwecken extra auf
folgendes beschränkt:
1 | void ETH_IRQHandler(void)
|
2 | {
|
3 | uint32 ints;
|
4 |
|
5 | /* Get pending interrupts */
|
6 | ints = LPC_ETHERNET->DMA_STAT;
|
7 |
|
8 | /* Clear pending interrupts */
|
9 | LPC_ETHERNET->DMA_STAT = ints;
|
10 | }
|
hat jemand vielleicht eine Idee, warum die NVIC-Sequenz manchmal
funktioniert und manchmal (=häufig) nicht?
Oder gibt es für die Initialisierung des NVIC besondere Hinweise, die
ich nicht beachtet habe?
vielen Dank.
Rene.