Hallo Leute, ich habe einen LPC2294 und programmiere mit uVersion3 von Keil. Wie man einen Ausgang belegt und beschaltet ist kein Problem. Aber wie mache ich es bei einem Eingang? Ich möchte einen Eingang auf den Zustand high in einer if-Anweisung abfragen. Und wie kann ich den diesen Eingang im Debugmodus bei Keil setzen. MFG Hotte
@Hotte, wenn Du weisst wie man die Port als Ausgang programmiert, dann tue genau das nicht ;-) Default nach Reset ist Eingang. All die Bits, die gesetzt werden in IODIR bleiben eben low (0). Dann ist der Eingang hochohmig. Der High-pegel muss somit von aussen getrieben werden und mehr als den max. leakage (ich glaub das war 1 uA), treiben koennen. Hoffe das hilft ein wenig, Robert
Danke für die Antwort Robert, aber irgendwie habe ich jetzt ein Verständnisproblem. Ich dachte mit IODIR setze ich einen PIN als Ausgang und wenn ich IODIR nicht sezte habe ich einen Eingang. Mit welchem Befehl rufe ich diesen Eingang denn nun auf? Ich steh im Moment auf dem Schlauch.
IOPIN ist dafür zuständig. Um zu prüfen ob z. B. P0.3 auf high liegt kannst du folgendes schreiben:
1 | if (IO0PIN & (1 << 3)) |
2 | {
|
3 | }
|
Also langsam habe ich nun doch Verständnisprobleme mit dem Eingang beim LPC2294. Wenn ich nun Port14 abfragen möchte befindert der sich doch bei Pinsel0 und ist im 4 Byte die bits 6 und 7. Ich habe keine Ahnung wie ich dieses denn dann schreiben soll und abfragen soll. ... if (( IOPIN0 &(4 << 6)) && (( IOPIN0 &(4 << 7))) { ; }
Das mag ja schon sein das das im Artikel AVR steht. Aber irgendwie habe ich Anpassungsprobleme von AVR auf ARM? So leid wie mir das tut!
Wie kommst du auf PINSEL? Die sind dazu da um zwischen normalem IO (GPIO) und der übrigen Peripherie (UART, I2C, ...) umzuschalten. Port 0.14 wird so abgefragt:
1 | if (IO0PIN & (1 << 14)) { } |
Um den EINT1 (ext. interrupt 1) auszuwählen der sich mit IO Port 0.14 einen gemeinsamen Pin teilt ist folgendes zu tun:
1 | PINSEL0 = (PINSEL0 & ~(3 << 28)) | (2 << 28); |
Die linke Seite vom OR liefert den aktuellen Wert von PINSEL0 ohne die Bits 28 u. 29 zurück und die rechte Seite schreibt 0b10 an diese Stelle. Wenn man die PINSEL Register nach der Initialisierung nicht mehr anfaßt reicht auch
1 | PINSEL0 |= (2 << 28); |
.
Verstehen tu ich es nicht, da ich bei Port 14 Spannung drauf geben kann, aber nichts passiert. Bei anderen Ports wie zum Beispiel Port 13 funktioniert es. Besten Dank an let. Also prüfen ob ein Eingang kommt: if (IOPIN0 & (1<< 13)) {} oder was auch geht val = 0x00002000; if (IOPIN0 & val) {}
Wie testest du denn den P0.14? Gerade dieser Pin entscheidet ob nach einem Reset der Bootloader gestartet werden soll oder nicht. Wenn da beim Start 0 anliegt, läuft das Programm gar nicht los.
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.