STM32 C und ASM

OP #1830838
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
(Firma: Safety Control GmbH) #1830981
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
#1831014
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren