Sollte wohl heissen DDRA &= ~(1<<PA2)
inp() und outp() konnten auch nicht mehr tun, als ein AVR kann... Die von die angegebenen C-Kommandow werden jeweils in eine Maschinen-Instruktion übersetzt, also sbi bzw cli.
DDRx kannst du entweder komplett auf Ausgang stellen (DDRx=0xffoder eben Pin-Weise, oder einzelne Pins anwählen:
Besser ist hier aberCode:DDRx |= (1<<Px2) | (1 << Px3);
letzteres wird zu 2 atomaren Instruktionen (sbi), während ersteres also Load-Modify-Store Sequenz ungesetzt werden muss (in, or, out), die nicht atomar ist.Code:DDRx |= (1<<Px2); DDRx |= (1 << Px3);
Die normalen Operationen wie Port-Pin Lesen, Schreiben, als IN/OUT schalten werden jeweils als eine Instruktion umgesetzt.
Nicht atomar ist ein Toggle:
https://www.roboternetz.de/wissen/in...ers_.28SFRs.29Code:PORTx ^= (1 << Pxn);
Lesezeichen