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=0xff oder eben Pin-Weise, oder einzelne Pins anwählen:

Code:
DDRx |= (1<<Px2) | (1 << Px3);
Besser ist hier aber
Code:
DDRx |= (1<<Px2);
DDRx |=  (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.

Die normalen Operationen wie Port-Pin Lesen, Schreiben, als IN/OUT schalten werden jeweils als eine Instruktion umgesetzt.

Nicht atomar ist ein Toggle:

Code:
PORTx ^= (1 << Pxn);
https://www.roboternetz.de/wissen/in...ers_.28SFRs.29