48 # error "no robot platform defined"
51 #ifdef __AVR_ATmega644__
52 #define _NIBOBURGER_MEGAxx4_
55 #ifdef __AVR_ATmega324__
56 #define _NIBOBURGER_MEGAxx4_
59 #ifdef __AVR_ATmega164__
60 #define _NIBOBURGER_MEGAxx4_
65 #include <avr/interrupt.h>
70 #define LOBYTE(x) (uint8_t)((uint16_t)x)
71 #define HIBYTE(x) (uint8_t)(((uint16_t)x)>>8)
72 #define MAKE_WORD(hi,lo) ((hi*0x100)+lo)
74 #define enable_interrupts() sei()
75 #define disable_interrupts() cli()
78 #define _PPCAT(a,b) a##b
79 #define _PPCAT3(a,b,c) a##b##c
82 #define activate_output_bit(NAME) _PPCAT(NAME,_DDR)|=_BV(_PPCAT(NAME,_BIT))
83 #define deactivate_output_bit(NAME) _PPCAT(NAME,_DDR)&=~(unsigned char)_BV(_PPCAT(NAME,_BIT))
84 #define set_output_bit(NAME) _PPCAT(NAME,_PORT)|=_BV(_PPCAT(NAME,_BIT))
85 #define clear_output_bit(NAME) _PPCAT(NAME,_PORT)&=~(unsigned char)_BV(_PPCAT(NAME,_BIT))
86 #define toggle_output_bit(NAME) _PPCAT(NAME,_PORT)^=_BV(_PPCAT(NAME,_BIT))
87 #define set_output_bitval(NAME, VAL) _PPCAT(NAME,_PORT)=(_PPCAT(NAME,_PORT)&~(unsigned char)_BV(_PPCAT(NAME,_BIT)))|((VAL)?_BV(_PPCAT(NAME,_BIT)):0)
89 #define get_input_bit(NAME) (_PPCAT(NAME,_PIN)&_BV(_PPCAT(NAME,_BIT)))
90 #define get_output_bit(NAME) (_PPCAT(NAME,_PORT)&_BV(_PPCAT(NAME,_BIT)))
93 #define activate_output_groupbit(NAME,BIT) _PPCAT(NAME,_DDR)|=_BV(_PPCAT3(NAME,_BIT_,BIT))
94 #define deactivate_output_groupbit(NAME,BIT) _PPCAT(NAME,_DDR)&=~(unsigned char)_BV(_PPCAT3(NAME,_BIT_,BIT))
95 #define set_output_groupbit(NAME,BIT) _PPCAT(NAME,_PORT)|=_BV(_PPCAT3(NAME,_BIT_,BIT))
96 #define clear_output_groupbit(NAME,BIT) _PPCAT(NAME,_PORT)&=~(unsigned char)_BV(_PPCAT3(NAME,_BIT_,BIT))
97 #define toggle_output_groupbit(NAME,BIT) _PPCAT(NAME,_PORT)^=_BV(_PPCAT3(NAME,_BIT_,BIT))
98 #define set_output_groupbitval(NAME,BIT,VAL) _PPCAT(NAME,_PORT)=(_PPCAT(NAME,_PORT)&~(unsigned char)_BV(_PPCAT3(NAME,_BIT_,BIT)))|((VAL)?_BV(_PPCAT3(NAME,_BIT_,BIT)):0)
100 #define get_input_groupbit(NAME,BIT) (_PPCAT(NAME,_PIN)&_BV(_PPCAT3(NAME,_BIT_,BIT)))
101 #define get_output_groupbit(NAME,BIT) (_PPCAT(NAME,_PORT)&_BV(_PPCAT3(NAME,_BIT_,BIT)))
103 #define activate_output_group(NAME) _PPCAT(NAME,_DDR)|=_PPCAT(NAME,_MASK)
104 #define deactivate_output_group(NAME) _PPCAT(NAME,_DDR)&=~(unsigned char)_PPCAT(NAME,_MASK)
105 #define set_output_group(NAME) _PPCAT(NAME,_PORT)|=_PPCAT(NAME,_MASK)
106 #define clear_output_group(NAME) _PPCAT(NAME,_PORT)&=~(unsigned char)_PPCAT(NAME,_MASK)
109 #define ATOMIC_C90_BEGIN() {uint8_t _sreg_bak__ = SREG; cli(); {
110 #define ATOMIC_C90_END() } SREG = _sreg_bak__;}
Zuordnung der physikalischen Pins zu symbolischen Namen.