Hallo, ich versuche mich mit ARM7 und Crossworks. Bin noch am Anfang. LED an/aus geht schon :-) Möchte jetzt einen Taster abfragen, ohne Interupt. Wenn ich das Register FIO2PIN als gesamtes Register abfrage geht es, aber wie kann ich ein einzelner Pin abfragen? Bei WinAVR ist das ja z.B.: if (bit_is_clear(PIND,3)) Danke im Voraus.
Nee, leider nicht, FIO2PIN2 ist nur das 3.Byte von FIO2PIN. Na, sind keine Crossworker da? :-)
> Register FIO2PIN als gesamtes Register abfrage geht es
Was spricht gegen die Standard-C Lösung?
1 | if( FIO2PIN & ( 1 << FIO2PIN2) ) { |
2 | .. pin ist auf 1 |
3 | }
|
4 | |
5 | if( !( FIO2PIN & ( 1 << FIO2PIN2 ) ) ) { |
6 | .. pin ist auf 0 |
7 | }
|
Schon mal auf deinem AVR nachgesehen, was bit_is_clear macht bzw. wie es implementiert ist. Genauso wie oben, nur als Makro verpackt.
1 | #define bit_is_clear( port, pin ) ( ! ((port) & ( 1 << (pin) ) ) )
|
2 | |
3 | |
4 | ...
|
5 | |
6 | if( bit_is_clear( FIO2PIN, FIO2PIN2 ) ) |
7 | ...
|
Ja, danke! Wieder ein Stück weiter :-) Hat soweit geklappt. Nur zur Richtigstellung für andere: Mit FIO2PIN ist der gesamte Port gemeint. FIO2PIN2 ist das 3.Byte diese Ports gemeint. (wenn ich das richtig verstanden habe) So funktioniert es jedenfalls:
1 | #include <targets/LPC2478.h> |
2 | |
3 | #define LED (1<<18) |
4 | #define Taste (1<<19) |
5 | |
6 | int main (void) |
7 | { |
8 | IO1DIR |= LED; |
9 | FIO2DIR &= 1<<19; |
10 | IO1SET = LED; |
11 | for(;;) |
12 | { |
13 | if( FIO2PIN & ( Taste) ) |
14 | { |
15 | IO1SET = LED; |
16 | } |
17 | |
18 | if( !( FIO2PIN & (Taste) ) ) |
19 | { |
20 | IO1CLR = LED; |
21 | } |
22 | } |
23 | } |
Ich benutze das Olimex LPC2478_STK
Crossworks Gast schrieb: > Mit FIO2PIN ist der gesamte Port gemeint. > FIO2PIN2 ist das 3.Byte diese Ports gemeint. > (wenn ich das richtig verstanden habe) Du meinst vermutlich "das 3.Bit" (nicht Byte).
Peter schrieb: > Crossworks Gast schrieb: >> Mit FIO2PIN ist der gesamte Port gemeint. >> FIO2PIN2 ist das 3.Byte diese Ports gemeint. >> (wenn ich das richtig verstanden habe) > > Du meinst vermutlich "das 3.Bit" (nicht Byte). Bin nicht sicher. Ich kenn den µC und die zugehörige Entwicklungsumgebung nicht. Es könnte allerdings wirklich das 3. Byte sein. Sieh dir seine Pin-Nummern an: 18, 19 Die sind schon ziemlich hoch.
Peter schrieb: > Crossworks Gast schrieb: >> Mit FIO2PIN ist der gesamte Port gemeint. >> FIO2PIN2 ist das 3.Byte diese Ports gemeint. >> (wenn ich das richtig verstanden habe) > > Du meinst vermutlich "das 3.Bit" (nicht Byte). Nein, es handelt sich wirklich im das dritte Byte. Die Ausgabe von FIOxPIN kann mit FIOxMASK maskiert werden, dadurch erhältst du nur genau die Pins, die du auch haben möchtest. Näheres dazu findest du im Datenblatt auf Seite 206. Beispiel: FIO2MASK = 0x0F0F0F0F realer Pinzustand = 0xFFFFFFFF Das FIO2PIN-Register bringt jetzt als Ausgabe F0F0F0F0.
Frank Bär schrieb: > Peter schrieb: >> Crossworks Gast schrieb: >>> Mit FIO2PIN ist der gesamte Port gemeint. >>> FIO2PIN2 ist das 3.Byte diese Ports gemeint. >>> (wenn ich das richtig verstanden habe) >> >> Du meinst vermutlich "das 3.Bit" (nicht Byte). > > > Nein, es handelt sich wirklich im das dritte Byte. Du musst verzeihen. Wir sind hier nur 8-Bit Ports gewohnt :-)
Hier ein kleiner Auszug aus dem Datenblatt FIOxPIN2 Fast GPIO Port x Pin value register 2. Bit 0 in FIOxPIN2 register corresponds to pin Px.16 ... bit 7 to pin Px.23. Und so gibt es für jedes Byte des 32bit-Ports FIOxPIN0 FIOxPIN1 FIOxPIN2 FIOxPIN3 Und dann gibt es noch für 16Bit FIOxPINL (Lower half-word register) FIOxPINH (Upper half-word register) Beim Debuggen kann man beim Tastendruck auch jeweils das entsprechene Bit in diesen Registern toggeln sehen.
Karl heinz Buchegger schrieb: > Frank Bär schrieb: >> Peter schrieb: >>> Crossworks Gast schrieb: >>>> Mit FIO2PIN ist der gesamte Port gemeint. >>>> FIO2PIN2 ist das 3.Byte diese Ports gemeint. >>>> (wenn ich das richtig verstanden habe) >>> >>> Du meinst vermutlich "das 3.Bit" (nicht Byte). >> >> >> Nein, es handelt sich wirklich im das dritte Byte. > > Du musst verzeihen. > Wir sind hier nur 8-Bit Ports gewohnt :-) Ich beisse mir derzeit die Zähne an einem 2468 aus, 8Bit-Ports wären mir da auch lieber :(
Ja, der Umstieg von AVR auf ARM ist schon erstmal heftig. Die 2 Millionen Register, die da mehr vorhanden sind, wollen erst einmal verstanden sein:-) Aber wenn es soweit ist, hat mal vieeeeel mehr Möglichkeiten...
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.