Hallo, wenn ich bei den herkömmlichen 8bit-AVRs etwas parallel auf einen Port ausgeben (also z.B. mehrere LEDs ansteuern) möchte, mache ich das ja z.B. so: PORTC = 0x03; Da die Portstruktur bei den ARM Cortex-M3 etwas komplexer ist, ist mir bisher nur die Möglichkeit über das BSRR in den Sinn gekommen. (Ausgänge auf Push-Pull geschaltet.) Der Lower Teil des Registers also zum Setzen auf „1“ und der Higher Teil des Registers zum Rücksetzen auf „1“ Also würde ich das so machen. GPIOC->BSRR = 0xFFFC0003 Das funktioniert auch soweit. Würdet ihr das auch so machen und gibt’s eventuell auch noch eine andere oder einfachere Variante mehrere Output-Pins (LEDs) gleichzeitig anzusteuern.
Hallo Lars, verstehe ich das richtig, du Setzt und Rücksetzt die Pins, spirch Toggeln indem du GPIOC->BSRR = 0xFFFC0003 in einer Zeile schreibst? Das funktioniert? Ich arbeite mit dem STM32, da kann ich Pegel Setzen bzw. Rücksetzen, indem entweder high- bzw. low-halfword setze. Hast Du das so gemeint, oder geht das wirklich in einer Zeile? Gruß kyrel
Das BSRR ist der richtige Weg. Beachte, das die unteren 16 Bits Vorrang vor den oberen 16 Bits haben, d.h. wenn du Bits 4..11 auf einen bestimmten Wert setzen willst ohne die übrigens Bits zu ändern: port->BSRR = 0x0FF00000 | (value & 0x0FF0);
kyrel schrieb: > verstehe ich das richtig, du Setzt und Rücksetzt die Pins, spirch > Toggeln indem du Nein. Er setzt Pins 2..15 auf 0 und Pins 0..1 auf 1. > indem entweder high- bzw. low-halfword setze. "Entweder oder" muss nicht sein. Auch port->BSRR = 0x00010001; setzt Pin 0 auf 1.
Apropos Cortex-M3: Das BSRR Register bezieht sich auf dem STM32. Mit dem Cortex-M3 Core hat das nichts zu tun, die Ports wurden von ST designed, nicht vom ARM.
Du kannst einfach das output data register nehmen. Also GPIOC->ODR = 0x0003
ahh richtig, nur der "Kern" ist ja von ARM, restliches designen ja die Firmen... danke für den kleinen Schubser :) Gruß kyrel
Ich habe noch mal ein wenig experimentiert. Danke auch für die vielen Hinweise. Ich denke die Nutzung des vorgeschlagenen ODR-Registers eignet sich wirklich am besten um mehrere Port-Pins anzusteuern. :)
Lars schrieb: > Hinweise. Ich denke die Nutzung des vorgeschlagenen ODR-Registers eignet > sich wirklich am besten um mehrere Port-Pins anzusteuern. :) Nur wenn du wirklich alle 16 Pins manipulieren willst. Wenn es weniger sind, dann ist BSRR besser geeignet.
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.