35 #ifndef _AVR_SFR_DEFS_H_
36 #define _AVR_SFR_DEFS_H_ 1
119 #define _SFR_ASM_COMPAT 1
120 #elif !defined(_SFR_ASM_COMPAT)
121 #define _SFR_ASM_COMPAT 0
124 #ifndef __ASSEMBLER__
128 #define _MMIO_BYTE(mem_addr) (*(volatile uint8_t *)(mem_addr))
129 #define _MMIO_WORD(mem_addr) (*(volatile uint16_t *)(mem_addr))
130 #define _MMIO_DWORD(mem_addr) (*(volatile uint32_t *)(mem_addr))
138 # if __AVR_ARCH__ >= 100
139 # define __SFR_OFFSET 0x00
141 # define __SFR_OFFSET 0x20
145 #if (__SFR_OFFSET != 0) && (__SFR_OFFSET != 0x20)
146 #error "__SFR_OFFSET must be 0 or 0x20"
149 #define _SFR_MEM8(mem_addr) (mem_addr)
150 #define _SFR_MEM16(mem_addr) (mem_addr)
151 #define _SFR_MEM32(mem_addr) (mem_addr)
152 #define _SFR_IO8(io_addr) ((io_addr) + __SFR_OFFSET)
153 #define _SFR_IO16(io_addr) ((io_addr) + __SFR_OFFSET)
155 #define _SFR_IO_ADDR(sfr) ((sfr) - __SFR_OFFSET)
156 #define _SFR_MEM_ADDR(sfr) (sfr)
157 #define _SFR_IO_REG_P(sfr) ((sfr) < 0x40 + __SFR_OFFSET)
159 #if (__SFR_OFFSET == 0x20)
161 #define _SFR_ADDR(sfr) _SFR_MEM_ADDR(sfr)
162 #elif !defined(__ASSEMBLER__)
163 #define _SFR_ADDR(sfr) (_SFR_IO_REG_P(sfr) ? (_SFR_IO_ADDR(sfr) + 0x20) : _SFR_MEM_ADDR(sfr))
169 # if __AVR_ARCH__ >= 100
170 # define __SFR_OFFSET 0x00
172 # define __SFR_OFFSET 0x20
176 #define _SFR_MEM8(mem_addr) _MMIO_BYTE(mem_addr)
177 #define _SFR_MEM16(mem_addr) _MMIO_WORD(mem_addr)
178 #define _SFR_MEM32(mem_addr) _MMIO_DWORD(mem_addr)
179 #define _SFR_IO8(io_addr) _MMIO_BYTE((io_addr) + __SFR_OFFSET)
180 #define _SFR_IO16(io_addr) _MMIO_WORD((io_addr) + __SFR_OFFSET)
182 #define _SFR_MEM_ADDR(sfr) ((uint16_t) &(sfr))
183 #define _SFR_IO_ADDR(sfr) (_SFR_MEM_ADDR(sfr) - __SFR_OFFSET)
184 #define _SFR_IO_REG_P(sfr) (_SFR_MEM_ADDR(sfr) < 0x40 + __SFR_OFFSET)
186 #define _SFR_ADDR(sfr) _SFR_MEM_ADDR(sfr)
190 #define _SFR_BYTE(sfr) _MMIO_BYTE(_SFR_ADDR(sfr))
191 #define _SFR_WORD(sfr) _MMIO_WORD(_SFR_ADDR(sfr))
192 #define _SFR_DWORD(sfr) _MMIO_DWORD(_SFR_ADDR(sfr))
208 #define _BV(bit) (1 << (bit))
213 #define _VECTOR(N) __vector_ ## N
216 #ifndef __ASSEMBLER__
234 #define bit_is_set(sfr, bit) (_SFR_BYTE(sfr) & _BV(bit))
245 #define bit_is_clear(sfr, bit) (!(_SFR_BYTE(sfr) & _BV(bit)))
254 #define loop_until_bit_is_set(sfr, bit) do { } while (bit_is_clear(sfr, bit))
263 #define loop_until_bit_is_clear(sfr, bit) do { } while (bit_is_set(sfr, bit))
Automatically generated by Doxygen 1.8.7 on Tue Jul 8 2014. Dash Docset conversion by Matt Kane