Forum: Mikrocontroller und Digitale Elektronik STM32 C und ASM


von Mathias D. (darkfirefighter)


Lesenswert?

Hallo zusammen,

ich würde gerne zum Verständniss einen kurzen Teil in meinem C Programm 
mit Inline Assembler schreiben. Leider finde ich hierzu keinerlei 
Beispiele und hoffe, dass jemand von euch evtl eins kennt. Also z.b. 
einfach nur einen Pin zu setzen. Mit C mache ich das ja mit
GPIOE->BSRR = GPIO_Pin_4; nur wie würde das mit ASM gehen? Kann ich dann 
auch die einzelnen bits im Register direkt ansprechen? Also z.b. BS4 = 1
Ich arbeite mit der µVision 4 IDE von Keil

Gruß
Mathias

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Hilfe zur Selbsthilfe:

Übersetze das und schaue Dir das Listing an.

von Simon R. (Firma: Safety Control GmbH) (simon_r)


Lesenswert?

Du kannst bestimmt bei deiner IDE bzw. dem C-Compiler die 
Listing-Ausgabe aktivieren. Dadurch wird der vom C-Compiler generierte 
Assembler-Code mit den dazu gehörenden C-Kommandos als Kommentar 
ausgegeben.
Dann musst du nur noch deinen C-Code compilieren und siehst, was der 
Compiler daraus gemacht hat.

Beim IAR-WorkBench findet man die Einstellung bei den
Projekteinstellungen->C/C++ Compiler.->List
[x] Output list file
    [x] Assembler mnemonics
[x] Output assembler file
    [x] Include source.

Wird beim Keil wohl ähnlich sein.

Das Ansprechen von einzelnen Bits in Registern findest du im Datenblatt 
unter dem Stichwort Bitbanding. Wenn du aber mehrere Bits im Register 
bearbeiten möchtest, könnte das Lesen/Ändern/Zurückschreiben des ganzen 
Registers schneller sein.

Grus
   Simon

von Mathias D. (darkfirefighter)


Lesenswert?

Ok Danke für den Tipp, werde es mir mal anschauen

von (prx) A. K. (prx)


Lesenswert?

Simon R. schrieb:

> unter dem Stichwort Bitbanding. Wenn du aber mehrere Bits im Register
> bearbeiten möchtest, könnte das Lesen/Ändern/Zurückschreiben des ganzen
> Registers schneller sein.

Nicht beim STM32. Der hat eine sehr elegante Methode, mehrere Bits 
beliebig zu verändern ohne die übrigen anzufassen.

von Simon R. (Firma: Safety Control GmbH) (simon_r)


Lesenswert?

A. K. schrieb:
> Nicht beim STM32. Der hat eine sehr elegante Methode, mehrere Bits
> beliebig zu verändern ohne die übrigen anzufassen.

Und wie heißt die Methode bzw. wo finde ich eine Beschreibung dazu?
Das könnte ich gut brauchen.

Gruß
  Simon

von (prx) A. K. (prx)


Lesenswert?

Nach BSRR schreiben. Einsen in den oberen 16 Bits löschen Portbits, 
Einsen in den unteren setzen sie. Setzen gewinnt. Wenn man also in die 
oberen 16 Bits die Bitmaske schreibt, kann man mit den unteren 16 Bits 
den gewünschten Zustand dieser Bits schreiben ohne den Rest zu 
beeinflussen.

von Simon R. (Firma: Safety Control GmbH) (simon_r)


Lesenswert?

Danke A. K.,
ach-ja das mit dem BSRR kannte ich schon.
Sowas gibt's aber nicht bei allen Peripherals.
Dachte schon es gibt noch 'ne Alternative zum Bitbanding.

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
Noch kein Account? Hier anmelden.