Worin liegt der Unterschied /Nutzen zwischen (1<<) oder 1 Beispiel: #define PORT_ISC1_bm (1<<1) /* Input/Sense Configuration bit 1 mask. */ #define PORT_ISC1_bp 1 /* Input/Sense Configuration bit 1 position. */
In C ist das ziemlich wurscht. In Assembler gibt es aber einen Mix von Befehlen, wobei die einen die Bitnummer haben wollen und die anderen die Bitmaske. Daher hat Atmel die Include Files so gestaltet, dass beides, Bitnummer und Bitmaske aus derselben Angabe erzeugbar ist. Aus der Bitnummer kann man sich leicht automatisch die Maske erzeugen. Aber umgekehrt aus der Maske die Bitnummer zu erhalten, ist nicht so einfach möglich. Ergo: Atmel hat sich dafür entschieden, die Bitnummer in Definements zu benutzen.
Danke für die Antwort Wenn ich nun als Beispiel das PINnCTRL Register einstellen möchte, und zwar so das es auch nach einer Woche noch lesbar ist. Gehe ich dann so vor? // PINnCTRL – Pin n Configuration register // OSC Einstellen // OSC [2:0] 011 PULLUP Widerstand // ISC Einstellen // ISC [2:0] 010 FALLING Sense falling edge // PORT_ISC1_bm (1<<1) 0x00000010 // Slew Rate PORT_SRLEN_bm 0x80 0b1000000 PORTC.PIN0CTRL |= PORT_ISC1_bm | PORT_OPC1_bm | PORT_OPC0_bm | PORT_SRLEN_bm;
Wie die Bitmasken definiert sind, brauchst Du nicht als Kommentar hinschrieben. Die Makros sind ja gerade dafür da, dass man das nicht wissen muss. Ich würde in den Kommentar schreiben, was die Bits bewirken bzw. was im Endeffekt eingestellt wird. Für die Bitgruppen gibt es beim Xmega übrigens eigene Defines, damit wird es fast selbsterklärend:
1 | // Configure Pin 0 (besser: wofür ist der Pin, mit was ist er verbunden)
|
2 | // - Enable slew rate limit
|
3 | // - Enable pullup
|
4 | // - Sense falling edge
|
5 | PORTC.PIN0CTRL = PORT_SRLEN_bm | PORT_OPC_PULLUP_gc | PORT_ISC_FALLING_gc; |
Simon schrieb: > und zwar so das es auch nach einer Woche noch lesbar ist. Wenn du dich mit 'PORT_ISC1_bm' anfreunden kannst... Ich würde '1 << PORT_ISC1_bp' nehmen.
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.