Hallo Leute, Ich bin jetzt über drei Ecken dazu gekommen auchmal einen Philps ARM zu programmieren und habe ein echt komisches Problem mit dem Port1 bei den GPIOs. In den letzten Jahren hatte ich nur AVRs in Gebrauch und irgendwie vermute ich, dass mein Problem eine triviale Lösung haben könnte. Es ist also so, dass ich im Hauptprogramm die Pins des Port1 (also die, die auf Ausgang sind) nicht mehr auf 0 schalten. Wenn man sie während der Initialisierung auf 0 stellt, dann passt es. Stellt man sie im Hauptprogramm auf 1 geht das auch noch, aber eine nachfolgendes setzen auf 0 geht einfach nicht mehr. Mit Port 0 geht’s problemlos. Dabei ist schon bekannt, dass es IOSET und IOCLR gibt und das eine Bit (3) in PINSEL2 ist auch gesetzt. Vielleicht ist ne Kleinigkeit, aber an so was kann man verzweifeln. lg Ulrich
Einige Portpins haben spezielle Eigenschaften, wie z.B. Open Drain Ausgänge für I²C, oder es ist eine Special Funktion aktiviert und nicht der GPIO Modus (siehe Pin Configuration und Pin Connect Block). Machen alle Pins von Port 1 ärger oder nur einzelne ?
Die Spezialfunktionen liegen alle auf Port 0. Port 1 hat nur JTAG und Trace zu bieten. > und das eine Bit (3) in PINSEL2 ist auch gesetzt Was die Pins 16..25 als TRACE Pins deklariert. So wird das nix. Wenn die Sense-Pins P1.26 und P1.20 hardwareseitig richtig liegen, sollte man PINSEL2 in Ruhe lassen.
Hi, etwas spät aber immerhin komme ich heute noch dazu. Erstmal ists richtig, Port1 hat eigentlich keine Sonderkunktionen, nur das Bit 3 in Pinsel2 entscheidet über den Gebrauch als GPIO und es wird eh 0 gesetzt, da hab ich mich vorhin geirrt - sollte also richtig sein, hab ich gerade nochmal geprüft. Wie müssen P1.26 und P1.20 beschaltet sein? 26 liegt am RTCK vom Jtag, 20 ist als Ausgang beschaltet (lässt sich aber genauso wenig wie die anderen als Ausgang definierten Bits wieder auf 0 legen). Hab den verwendeten Code jetzt mal was gerafft um das hier reinstellen zu können: PINSEL2=PINSEL2 & 0xFFFFFFF7; IO1DIR=IO1DIR | 0x02300000; //Port1. 20, 21 und 25 als Output while(1) { wait(30000); IO1SET=0x02300000; //Port1. 20, 21 und 25 setzen wait(30000); IO1CLR=0x02300000; //Port1. 20, 21 und 25 löschen } Die Schleife läuft auch tadellos bestätigt durch UART und einen Pin von Port0, nur beim Port 1 liegt immer ein High an. Das kanns doch nicht sein, oder? Ich kann auch so gut wie ausschließen, dass der Chip nen Fehler hat, weils auf zwei unterschiedlichen Boards nicht funzt. Bitte Leute, sagt mir dass ich blöd bin und ne Kleinigkeit vergessen habe, Hauptsache das Ding läuft endlich richtig. lg Ulrich
Lass mal P1.20 weg. Hardwaremässig offen! Wenn's dann tut, spielt dir das ETM einen Streich und bleibt auch trotz deines PINSEL2 Statements auf den Pins sitzen.
Hast du P1.20 und P1.26 auf High während dem Reset ? Ansonsten wird Trace bzw. Debug an die Pins geschaltet.
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.