gast schrieb:
> hallo,
> ich finde nicht wo _SFR_IO8 definiert ist.
Das ist in sfr_defs.h, welches seinerseits von io.h includiert wird
Dort steht
1 | #define _SFR_IO8(io_addr) ((io_addr) + __SFR_OFFSET)
|
und __SFR_OFFSET wiederrum ist kurz davor:
1 | #ifndef __SFR_OFFSET
|
2 | /* Define as 0 before including this file for compatibility with old asm
|
3 | sources that don't subtract __SFR_OFFSET from symbolic I/O addresses. */
|
4 | # if __AVR_ARCH__ >= 100
|
5 | # define __SFR_OFFSET 0x00
|
6 | # else
|
7 | # define __SFR_OFFSET 0x20
|
8 | # endif
|
9 | #endif
|
> Wie erreicht mann dann diese
> Port über IN/OUT Instruktionen?
Das ist nichts worüber du dir als C-Programmierer Gedanken machen musst.
Erledigt der Compiler für dich. Die Sache ist nämlich nicht so einfach.
Einige der SpecialFunctionRegisters können über OUT/IN angesprochen
werden, andere wieder sind nur über die Speicheradresse erreichbar. Der
Compiler weiß darüber Bescheid und wählt jeweils den richtigen
Zugriffsweg aus.