Hallo, Ich versuche gerade einen LPC2148 auf einer selbstgebauten PCB zum laufen zu bekommen. Ich lade den code via FlashMagic ins Flash, das funktioniert auch ohne probleme. Leider wird der code im chip nicht ausgeführt - das programm sollte nur 2 pins auf "1" setzen, diese bleiben jedoch auf 0. int main (void) { /* LED var */ //IODIR1 = 0x00FF0000; /* P1.16..23 defined as Outputs */ IODIR1 = 0x00000300; /* P1.16..23 defined as Outputs */ IOSET1 = 0x00000300; while (1) { } } das ganze ist eine geänderte kopie des keil projekts "blinky". Zu den pins - nach dem programmieren starte ich das programm nochmal explizit mit Flashmagix, beginnend bei adresse 0x00, wie im compiler eingestellt. P0.14 und RESET sind beide "high", dennoch startet das programm nicht, bzw. werden die beiden pins nicht gesetzt. Hat jemand eine Ahnung was falsch sein könnte?
rotary schrieb: > niemand eine idee dazu? Mehrere: - SCS Register vielleicht für Fast-IO konfiguriert? - Prüfsumme im Interrupt-Vektor gesetzt (womit wird geflasht)? - Zustand P0.31 u. P1.31 beim Reset? - Passen Startcode und Linkerscript zusammen? - ... Es ist sinnlos bei nicht funktionierenden ARM-Programmen nur Codeschnipsel zu posten. Beim AVR ist das schon grenzwertig aber beim ARM gibt es einfach zu viele Stellschrauben. Also ganzes Projekt zippen und anhängen. Aber das mit den beiden Pins P0.31 und P1.31 solltest du als erstes prüfen. Die dürfen nicht low sein, können aber in der Luft hängen (interne pull-ups beim Start). - Michael
danke für die antwort, Im Anhang das Projekt. P0.31 und P1.31 sind beide floatend.
Sieht eigentlich gut aus. SCS wird nicht angefasst und FlashMagic (hattest du ja bereits geschrieben) setzt die Prüfsumme automatisch. Ich habe mir jetzt also mein altes Eval-Board hervorgekramt um das nachzumessen und bin bei den Ports stutzig geworden. mit IODIR1=0x300 werden P1.8 + P1.9 als Ausgang konfiguriert. Die werden aber doch gar nicht herausgeführt beim 2148. Ich habe kein uvision installiert, kann das also nicht abändern. Hast du es schon mit anderen Ports probiert? - Michael
hi, danke für den hinweis, ein übler fehler in meinem code - ich habe an den pins 0.8 und 0.9 2 leds angeschlossen, habs jetzt mit port0 versucht, aber leider immer noch keine reaktion bei den leds. IODIR0 = 0x00000300; IOSET0 = 0x00000300;
Das sieht nach einem Hardwarefehler aus. Mit leerem Flash liegen and P0.8 u. P0.9 erwartungsgemäß 0V. Die Stromaufnahme des Boards beträgt ~20mA. Mit deinem Programm steigt die Stromaufnahme auf ~60mA und an P0.8 + P0.9 liegen 3.3V. An P0.10 übrigens auch. An P0.11 liegen wieder 0V.
alles klar danke dir, könntest du dir bitte noch meinen schaltplan ansehen? siehe anhang.
Sollte Vbat nicht an Vdd ran, wenn man keine Batterie verwendet? Ebenso Vref.
Das interessante ist das sich der Controller flashen läßt. Er läuft also grundsätzlich. Einen internen Oszillator haben die 21xx nicht. Der Quarz schwingt also. Es könnte sein das die PLL nicht einrastet weil mit dem Quarz etwas nicht stimmt. Welche Frequenz hat der? VBAT und VREF gehören an VDD. Möglicherweise hat das Nebeneffekte wenn das nicht der Fall ist. - Michael
danke für den tip, habs mir im datenblatt nochmal angesehen - vbat dient wohl nur zur versorgung der RTC, aref für den ADC - ich werds trotzdem mal versuchen die 2 pins an vdd zu hängen.
der quarz hat eine frequenz von 12MHz und schwingt, hab ic mit dem oszi nachgemessen.
Ich meine das es ein Errata gibt bezüglich VBAT. Da gehört Spannung dran. VREF muß, anders als beim AVR, in der Nähe von VDD liegen. Der Pin ist nur herausgeführt damit man dort eine besonders gesiebte Spannung anlegen kann. Aber ob ein Fehlen der Spannung noch andere Komponenten als den ADC beeinflußt weiß ich nicht. > der quarz hat eine frequenz von 12MHz und schwingt Sicher tut er das, sonst würde der Bootloader nicht funktionieren. Die Frage ist nur ob das Signal "gut genug" ist für die PLL. Wenn die nicht einrastet bleibt der Startcode in einer Schleife hängen. Ich halte das aber für wenig wahrscheinlich. 12MHz liegen auch im zulässigen Bereich. War nur so eine Idee. - Michael
so hab jetzt vref und vbat auch auf 3.3V gehängt, leider immer noch keine änderung - das programm startet nicht.
Erhöht sich denn die Stromaufnahme? Btw, wie hoch ist die überhaupt?
3,3V / 16mA, mit programm drauf, ohne programm genau das selbe.
Das bedeutet das die PLL nicht läuft. main() wird also gar nicht erreicht. Könnte an der PLL selbst liegen oder aber das Programm wird tatsächlich nicht ausgeführt. Du könntest versuchen die Initialisierung der PLL zu überspringen um das zu prüfen. Vielleicht stimmt etwas mit der Reset/P0.14 Steuerung nicht und der Controller bleibt jedes Mal im Bootloader stehen. Ein "go" aus FM heraus funktioniert bei mir. Allerdings nur wenn P0.14 high ist. Ein Kurzschluß zwischen Handshaking- und Datenleitung könnte evtl. dazu führen das P0.14 im entscheidenen Moment low ist. Ansonsten bin ich da gerade etwas ratlos. - Michael
danke schonmal für deine hilfe, werd das mit der pll mal testen - hab jetzt mal einen reset-taster eingebaut, und am scope reset und bootloader pin angeguckt, sieht beides super aus.
nach diversen tests wieder mal ein hilferuf :) ich habe das initialisieren und umschalten der PLL in der startup.s übersprungen, aber leider noch immer keine änderung - stromaufnahme mit und ohne programm 16mA. Ich hab jetzt einige Schaltpläne von anderen projekten gesehen, welche bei den grundlegenden pins (versorgung, reset, etc) die gleiche anschlussbelegung haben wie meiner, dennoch will der controller auf meinem board keinen ton von sich geben. bin für alle tips und anregungen dankbar :)
Einen hab' ich noch: Ob weiterhin der Bootloader läuft, müßtest du wie folgt herausfinden können: 1. Deaktiviere in den Einstellungen von FM ("advanced options" glaube ich) die automatische Steuerung von Reset und P0.14. 2. Führe ISP->Read device ID aus. Dann müßte der Chip antworten. Wenn dem so ist stellt sich halt die Frage warum das Programm nicht ausgeführt wird. Der einzige Grund der mir da einfällt ist das die schon angedeutete Prüfsumme nicht stimmt. Vielleicht ist die Version von FM die du verwendest kaputt. - Michael PS: Das es ohne PLL bei den 16mA bleibt ist normal. Die PLL erhöht ja die Taktfrequenz des Controllers.
Antwortet der LPC mit Synchronized wenn du im Terminal ein ? (Fragez.) schickst?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.