2.4.2.1 Direct Pin Configuration
The GPIO basic functionality is controlled using the three registers that reside in the extended I/O Register space. This space does not allow bit manipulation instructions, and the configuration update for one pin is done using the Read-Modify-Write instructions. The hardware Read-Modify-Write functionality ensures a safe and correct change of the drive values and/or input and sense configuration, but it is translated into three assembler instructions. The following code snippet shows the PA7 pin configuration as output:
C Code Example:
PORTA.DIR |= 0x80;
Assembler Code:
;Load PORTA.DIR address into Z-pointer
LDI R30, 0x00;
LDI R31, 0x04;
LDI R24, Z ;Read content of PORTA.DIR register
ORI R24, 0x80 ;Logic or with 0x80
ST Z, R24 ;Store result into PORTA.DIR register
To speed up the access and to offer more flexibility, the new AVR Dx microcontrollers offer a new subset of registers that allow the update of the GPIO configuration for multiple pins in one instruction:
| Register (Note) | Description |
|---|---|
| PORTx.DIRSET | Writing a ‘1’ to any bit in this bit field will set
the corresponding bit in PORTx.DIR, which will configure the
corresponding pin as an output pin and enable the output driver |
| PORTx.DIRCLR | Writing a ‘1’ to any bit in this bit field will
clear the corresponding bit in PORTx.DIR, which will configure the
corresponding pin as an input-only pin and disable the output
driver |
| PORTx.DIRTGL | Writing a ‘1’ to any bit in this bit field will
toggle the corresponding bit in PORTx.DIR |
| PORTx.OUTSET | Writing a ‘1’ to any bit in this bit field will set
the corresponding bit in PORTx.OUT, which will configure the
corresponding pin to be driven high |
| PORTx.OUTCLR | Writing a ‘1’ to any bit in this bit field will
clear the corresponding bit in PORTx.OUT, which will configure the
corresponding pin to be driven low |
| PORTx.OUTTGL | Writing a ‘1’ to any bit in this bit field will
toggle the corresponding bit in PORTx.OUT |
0’ to any bit
position in the registers has no effect.Using the direct pin configuration feature, the code for the configuration of the PA7 pin as output becomes:
C Code:
PORTA.DIRSET = 0x80;
Assembler Code:
;Load PORTA.DIRSET address into Z-pointer
LDI R30, 0x01;
LDI R31, 0x04;
LDI R24, 0x80 ;Load mask
ST Z, R24 ;Write to the PORTA.DIRSET register
