Datum:
Hallo, meine bisherigen Versuche den LPC2148 in den power down Modus zu versetzen gingen leider schief. Lange Recherchen im Netz haben mir leider auch nicht weitergeholfen, deshalb dieser Thread. Der Unterprogramm-code:
void power_down() { PINSEL0 |= 0xC000; // PIN-funktion fuer P0.7 setzen (EINT2) INTWAKE = 0x04; // P0.7 als interrupt-quelle EXTMODE = 0x04; // fuer flanke konfigurieren EXTPOLAR = 0x04; // und konfigurieren fuer steigende flanke VICIntEnClr = 0xFFFFFFFF; // alles bisherige loeschen VICIntSelect = 0x00000000; // jetzt alle interrupts IRQ VICVectAddr0 = (unsigned long)isr; // adresse fuer wakeup-code setzen VICVectCntl0 = (0x20 | 16); // benutze EINT2 VICIntEnable = 0x00010000; // enable PCON = 0x02; // power down LPC return; } void __attribute__ ((interrupt("IRQ"))) isr(void) { EXTINT = 0x04; // bit wieder loeschen VICVectAddr = 0; } |
Zum "Wecken" soll der Interrupt-Pin EINT2 verwendet werden. Im Hauptprogramm wird nur die Clock initialisiert (60Mhz), UART initialisiert, Pin-Funktionen für UART gesetzt und die power_down() Funktion aufgerufen. Was habe ich vergessen oder falsch gemacht? Danke im vorraus, Fabian
Datum:
Gut, dass Dummheit nicht weh tut (: Ich habe im wakeup-isr das entsprechende Bit in EXTINT gelöscht, da im Datenblatt steht, dass ein wakeup-code genau das tun soll. Die Lösung: Das Bit muss auch gelöscht werden, bevor die MPU ein erstes Mal in den power-down Modus versetzt wird. Von dem steht allerdings nichts im Datenblatt. Jetzt funktioniert der Code soweit, aufwecken mit touchscreen an EINT2 funktioniert ebenfalls und wakeup-code wird auch aufgerufen. Leider werden die ersten vier Zeichen nach dem Aufwecken falsch gesendet (UART0), alle ab dem 4.Zeichen allerdings problemlos. Eine kurze Wartezeit half leider nichts. Was könnte die Ursache dafür sein? Danke im vorraus Fabian