7 #ifndef ZRTOS_ARCH_ATMEGA2560_H 8 #define ZRTOS_ARCH_ATMEGA2560_H 14 #if defined(ZRTOS_ARCH__ATMEGA2560) || defined(__DOXYGEN__) 15 #define ZRTOS_ARCH__FOUND 17 #include <util/delay_basic.h> 24 #define ZRTOS_ARCH__BYTE_ORDER ZRTOS_ARCH__BYTE_ORDER_LITTLE_ENDIAN 26 #define ZRTOS_ARCH__CPU_CLOCK_HZ ( ( uint32_t ) F_CPU ) // thiz F_CPU variable set by the environment 28 #define ZRTOS_ARCH__BYTE_ALIGNMENT (1) 30 #define ZRTOS_ARCH__FATAL() ((void(*)(void))0)(); 32 #define ZRTOS_ARCH__SET_STACK_PTR(ptr) \ 33 (SP = (uint16_t)(ptr)) 35 #define ZRTOS_ARCH__GET_STACK_PTR() \ 38 #define ZRTOS_ARCH__IS_INTERRUPTS_DISABLED() \ 41 #define ZRTOS_ARCH__IS_INTERRUPTS_ENABLED() \ 44 #define ZRTOS_ARCH__DISABLE_INTERRUPTS() \ 45 asm volatile ( "cli" :: ); 47 #define ZRTOS_ARCH__ENABLE_INTERRUPTS() \ 48 asm volatile ( "sei" :: ); 62 usAddress = ( uint16_t ) pxCode;
70 #if defined(__AVR_3_BYTE_PC__) 95 #if defined(__AVR_3_BYTE_PC__) 104 #if defined(__AVR_HAVE_RAMPZ__) 120 usAddress = ( uint16_t ) pvParameters;
134 zrtos_arch_stack_t *thiz
153 zrtos_arch_stack_t *thiz
158 zrtos_arch_stack_t *pxTopOfStack = thiz;
159 zrtos_arch_stack_t *pxTopOfStackTmp = pxTopOfStack;
160 uint16_t usAddress = (uint16_t)callback;
161 zrtos_arch_stack_signed_t usValue = 0;
171 *pxTopOfStack-- = usValue++;
174 pxTopOfStackTmp[0] = usAddress & 0x00ff;
175 pxTopOfStackTmp[-1] = (usAddress >> 8) & 0x00ff;
176 pxTopOfStackTmp[-2] = 0;
177 pxTopOfStackTmp[-3] = 0x80;
178 pxTopOfStackTmp[-4] = 0;
179 usAddress = (uint16_t)args;
180 pxTopOfStackTmp[-27] = usAddress & 0x00ff;
181 pxTopOfStackTmp[-28] = (usAddress >> 8) & 0x00ff;
187 # define zrtos_arch__cpu_state_init zrtos_arch__cpu_state_init_a 189 # define zrtos_arch__cpu_state_init zrtos_arch__cpu_state_init_b 192 #define ZRTOS_ARCH__GET_CPU_STATE_BUFFER_LENGTH() 33 193 #define ZRTOS_ARCH__GET_FN_CALL_STACK_LENGTH() 20 195 #define ZRTOS_ARCH__SAVE_CPU_STATE() \ 196 ;__asm__ __volatile__( \ 197 "push __tmp_reg__ \n\t" \ 198 "in __tmp_reg__, __SREG__ \n\t" \ 200 "push __tmp_reg__ \n\t" \ 201 "push __zero_reg__ \n\t" \ 202 "clr __zero_reg__ \n\t" \ 235 #define ZRTOS_ARCH__SAVE_CPU_STATE_EX(ptr) \ 236 ZRTOS_ARCH__SAVE_CPU_STATE(); \ 237 ;__asm__ __volatile__( \ 238 "in __tmp_reg__, __SP_L__ \n\t" \ 239 "sts %0, __tmp_reg__ \n\t" \ 240 "in __tmp_reg__, __SP_H__ \n\t" \ 241 "sts %0 + 1, __tmp_reg__ \n\t" \ 245 #define ZRTOS_ARCH__LOAD_CPU_STATE() \ 246 ;__asm__ __volatile__( \ 277 "pop __zero_reg__ \n\t" \ 278 "pop __tmp_reg__ \n\t" \ 279 "out __SREG__, __tmp_reg__ \n\t" \ 280 "pop __tmp_reg__ \n\t" \ 283 #define ZRTOS_ARCH__LOAD_CPU_STATE_EX(ptr) \ 284 ;__asm__ __volatile__( \ 285 "lds __tmp_reg__, %0 \n\t" \ 286 "out __SP_L__, __tmp_reg__ \n\t" \ 287 "lds __tmp_reg__, %0 + 1 \n\t" \ 288 "out __SP_H__, __tmp_reg__ \n\t" \ 291 ZRTOS_ARCH__LOAD_CPU_STATE(); 293 #define ZRTOS_ARCH__RETURN_FROM_INTERRUPT() \ 294 __asm__ __volatile__("reti"); uint8_t zrtos_arch_stack_t
zrtos_arch_stack_t * zrtos_arch__cpu_state_init_b(zrtos_arch_stack_t *thiz, zrtos_arch_callback_t callback, void *args)
#define ZRTOS_ARCH__CPU_CLOCK_HZ
void zrtos_arch__delay_microseconds(uint16_t us)
void zrtos_arch__delay_milliseconds(uint16_t ms)
zrtos_arch_stack_t * zrtos_arch__cpu_state_init_a(zrtos_arch_stack_t *thiz, zrtos_arch_callback_t callback, void *args)
int8_t zrtos_arch_stack_signed_t
uint16_t zrtos_arch_gpio_value_analog_t
void(* zrtos_arch_callback_t)(void *arg)
zrtos_arch_stack_t * zrtos_arch__cpu_state_init_helper(zrtos_arch_stack_t *pxTopOfStack, zrtos_arch_callback_t pxCode, void *pvParameters)
uint8_t zrtos_arch_gpio_pin_t