Common implementations and headers for AVR-8 family based micro-controllers. More...
Common implementations and headers for AVR-8 family based micro-controllers.
Basic definitions for the AVR-8 common module
When ever you want to do something hardware related, that is accessing MCUs registers directly, just include this file. It will then make sure that the MCU specific headers are included.
Definition in file cpu.h.
|static uint8_t||avr8_get_state (void)|
|Atomically read the state (avr8_state) More...|
|static void||avr8_enter_isr (void)|
|Run this code on entering interrupt routines. |
|static int||avr8_is_uart_tx_pending (void)|
|Check if TX on any present UART device is still pending. More...|
|Run this code on exiting interrupt routines. |
|Initialization of the CPU. |
|static void||cpu_print_last_instruction (void)|
|Print the last instruction's address. |
|Initializes avrlibc stdio. |
|Print reset cause. |
|Global variable containing the current state of the MCU. More...|
|In ISR. |
|TX pending for UART 0. |
|TX pending for UART 1. |
|#define||AVR8_STATE_FLAG_UART_TX(x) (0x01U << x)|
|TX pending for UART x. |
Atomically read the state (avr8_state)
This function guarantees that the read is not optimized out, not reordered and done atomically. This does not mean that by the time return value is processed that it still reflects the value currently stored in avr8_state.
Using ASM rather than C11 atomics has less overhead, as not every access to the state has to be performed atomically: Those done from ISR will not be interrupted (no support for nested interrupts) and barriers at the begin and end of the ISRs make sure the access takes place before IRQ context is left.
Global variable containing the current state of the MCU.
|IRQ||This bit is set when in IRQ context|
|unused||This bits are currently not used|
|TX1||This bit is set when on UART1 TX is pending|
|TX0||This bit is set when on UART0 TX is pending|