www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik [LPC2148] power down will nicht


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Fabian K. (fabian_k)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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

Autor: Fabian K. (fabian_k)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net