7 #ifndef ZRTOS_VFS_MODULE_AVR_UART_H 8 #define ZRTOS_VFS_MODULE_AVR_UART_H 15 #include <avr/interrupt.h> 21 #if defined(__AVR_AT90S2313__) \ 22 || defined(__AVR_AT90S4414__) \ 23 || defined(__AVR_AT90S4434__) \ 24 || defined(__AVR_AT90S8515__) \ 25 || defined(__AVR_AT90S8535__) \ 26 || defined(__AVR_ATmega103__) 29 #define UART0_RECEIVE_INTERRUPT UART_RX_vect 30 #define UART0_TRANSMIT_INTERRUPT UART_UDRE_vect 31 #define UART0_STATUS USR 32 #define UART0_CONTROL UCR 33 #define UART0_DATA UDR 34 #define UART0_UDRIE UDRIE 35 #elif defined(__AVR_AT90S2333__) \ 36 || defined(__AVR_AT90S4433__) 39 #define UART0_RECEIVE_INTERRUPT UART_RX_vect 40 #define UART0_TRANSMIT_INTERRUPT UART_UDRE_vect 41 #define UART0_STATUS UCSRA 42 #define UART0_CONTROL UCSRB 43 #define UART0_DATA UDR 44 #define UART0_UDRIE UDRIE 45 #elif defined(__AVR_ATmega8__) \ 46 || defined(__AVR_ATmega16__) \ 47 || defined(__AVR_ATmega32__) \ 48 || defined(__AVR_ATmega323__) 51 #define UART0_RECEIVE_INTERRUPT USART_RXC_vect 52 #define UART0_TRANSMIT_INTERRUPT USART_UDRE_vect 53 #define UART0_STATUS UCSRA 54 #define UART0_CONTROL UCSRB 55 #define UART0_DATA UDR 56 #define UART0_UDRIE UDRIE 57 #elif defined(__AVR_ATmega8U2__) \ 58 || defined(__AVR_ATmega16U2__) \ 59 || defined(__AVR_ATmega16U4__) \ 60 || defined(__AVR_ATmega32U2__) \ 61 || defined(__AVR_ATmega32U4__) \ 62 || defined(__AVR_ATmega32U6__) 65 #define UART1_RECEIVE_INTERRUPT USART1_RX_vect 66 #define UART1_TRANSMIT_INTERRUPT USART1_UDRE_vect 67 #define UART1_STATUS UCSR1A 68 #define UART1_CONTROL UCSR1B 69 #define UART1_DATA UDR1 70 #define UART1_UDRIE UDRIE1 71 #elif defined(__AVR_ATmega8515__) \ 72 || defined(__AVR_ATmega8535__) 75 #define UART0_RECEIVE_INTERRUPT USART_RX_vect 76 #define UART0_TRANSMIT_INTERRUPT USART_UDRE_vect 77 #define UART0_STATUS UCSRA 78 #define UART0_CONTROL UCSRB 79 #define UART0_DATA UDR 80 #define UART0_UDRIE UDRIE 81 #elif defined(__AVR_ATmega163__) 84 #define UART0_RECEIVE_INTERRUPT UART_RX_vect 85 #define UART0_TRANSMIT_INTERRUPT UART_UDRE_vect 86 #define UART0_STATUS UCSRA 87 #define UART0_CONTROL UCSRB 88 #define UART0_DATA UDR 89 #define UART0_UDRIE UDRIE 90 #elif defined(__AVR_ATmega162__) 94 #define UART0_RECEIVE_INTERRUPT USART0_RXC_vect 95 #define UART1_RECEIVE_INTERRUPT USART1_RXC_vect 96 #define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect 97 #define UART1_TRANSMIT_INTERRUPT USART1_UDRE_vect 98 #define UART0_STATUS UCSR0A 99 #define UART0_CONTROL UCSR0B 100 #define UART0_DATA UDR0 101 #define UART0_UDRIE UDRIE0 102 #define UART1_STATUS UCSR1A 103 #define UART1_CONTROL UCSR1B 104 #define UART1_DATA UDR1 105 #define UART1_UDRIE UDRIE1 106 #elif defined(__AVR_ATmega64__) \ 107 || defined(__AVR_ATmega128__) 109 #define ATMEGA_USART0 110 #define ATMEGA_USART1 111 #define UART0_RECEIVE_INTERRUPT USART0_RX_vect 112 #define UART1_RECEIVE_INTERRUPT USART1_RX_vect 113 #define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect 114 #define UART1_TRANSMIT_INTERRUPT USART1_UDRE_vect 115 #define UART0_STATUS UCSR0A 116 #define UART0_CONTROL UCSR0B 117 #define UART0_DATA UDR0 118 #define UART0_UDRIE UDRIE0 119 #define UART1_STATUS UCSR1A 120 #define UART1_CONTROL UCSR1B 121 #define UART1_DATA UDR1 122 #define UART1_UDRIE UDRIE1 123 #elif defined(__AVR_ATmega161__) 125 #error "AVR ATmega161 currently not supported by this libaray !" 126 #elif defined(__AVR_ATmega169__) 129 #define UART0_RECEIVE_INTERRUPT USART0_RX_vect 130 #define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect 131 #define UART0_STATUS UCSRA 132 #define UART0_CONTROL UCSRB 133 #define UART0_DATA UDR 134 #define UART0_UDRIE UDRIE 135 #elif defined(__AVR_ATmega48__) \ 136 || defined(__AVR_ATmega88__) \ 137 || defined(__AVR_ATmega168__) \ 138 || defined(__AVR_ATmega48P__) \ 139 || defined(__AVR_ATmega88P__) \ 140 || defined(__AVR_ATmega168P__) \ 141 || defined(__AVR_ATmega328P__) 144 #define ATMEGA_USART0 145 #define UART0_RECEIVE_INTERRUPT USART_RX_vect 146 #define UART0_TRANSMIT_INTERRUPT USART_UDRE_vect 147 #define UART0_STATUS UCSR0A 148 #define UART0_CONTROL UCSR0B 149 #define UART0_DATA UDR0 150 #define UART0_UDRIE UDRIE0 151 #elif defined(__AVR_ATtiny2313__) \ 152 || defined(__AVR_ATtiny2313A__) \ 153 || defined(__AVR_ATtiny4313__) 155 #define UART0_RECEIVE_INTERRUPT USART_RX_vect 156 #define UART0_TRANSMIT_INTERRUPT USART_UDRE_vect 157 #define UART0_STATUS UCSRA 158 #define UART0_CONTROL UCSRB 159 #define UART0_DATA UDR 160 #define UART0_UDRIE UDRIE 161 #elif defined(__AVR_ATmega329__) \ 162 || defined(__AVR_ATmega649__) \ 163 || defined(__AVR_ATmega325__) \ 164 || defined(__AVR_ATmega3250__) \ 165 || defined(__AVR_ATmega645__) \ 166 || defined(__AVR_ATmega6450__) 168 #define ATMEGA_USART0 169 #define UART0_RECEIVE_INTERRUPT USART0_RX_vect 170 #define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect 171 #define UART0_STATUS UCSR0A 172 #define UART0_CONTROL UCSR0B 173 #define UART0_DATA UDR0 174 #define UART0_UDRIE UDRIE0 175 #elif defined(__AVR_ATmega3290__) \ 176 || defined(__AVR_ATmega6490__) 179 #define ATMEGA_USART0 180 #define UART0_RECEIVE_INTERRUPT USART_RX_vect 181 #define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect 182 #define UART0_STATUS UCSR0A 183 #define UART0_CONTROL UCSR0B 184 #define UART0_DATA UDR0 185 #define UART0_UDRIE UDRIE0 186 #elif defined(__AVR_ATmega2560__) \ 187 || defined(__AVR_ATmega1280__) \ 188 || defined(__AVR_ATmega640__) 190 #define ATMEGA_USART0 191 #define ATMEGA_USART1 192 #define ATMEGA_USART2 193 #define ATMEGA_USART3 194 #define UART0_RECEIVE_INTERRUPT USART0_RX_vect 195 #define UART1_RECEIVE_INTERRUPT USART1_RX_vect 196 #define UART2_RECEIVE_INTERRUPT USART2_RX_vect 197 #define UART3_RECEIVE_INTERRUPT USART3_RX_vect 198 #define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect 199 #define UART1_TRANSMIT_INTERRUPT USART1_UDRE_vect 200 #define UART2_TRANSMIT_INTERRUPT USART2_UDRE_vect 201 #define UART3_TRANSMIT_INTERRUPT USART3_UDRE_vect 202 #define UART0_STATUS UCSR0A 203 #define UART0_CONTROL UCSR0B 204 #define UART0_DATA UDR0 205 #define UART0_UDRIE UDRIE0 206 #define UART1_STATUS UCSR1A 207 #define UART1_CONTROL UCSR1B 208 #define UART1_DATA UDR1 209 #define UART1_UDRIE UDRIE1 210 #define UART2_STATUS UCSR2A 211 #define UART2_CONTROL UCSR2B 212 #define UART2_DATA UDR2 213 #define UART2_UDRIE UDRIE2 214 #define UART3_STATUS UCSR3A 215 #define UART3_CONTROL UCSR3B 216 #define UART3_DATA UDR3 217 #define UART3_UDRIE UDRIE3 218 #elif defined(__AVR_ATmega644__) 220 #define ATMEGA_USART0 221 #define UART0_RECEIVE_INTERRUPT USART0_RX_vect 222 #define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect 223 #define UART0_STATUS UCSR0A 224 #define UART0_CONTROL UCSR0B 225 #define UART0_DATA UDR0 226 #define UART0_UDRIE UDRIE0 227 #elif defined(__AVR_ATmega164P__) \ 228 || defined(__AVR_ATmega324P__) \ 229 || defined(__AVR_ATmega644P__) \ 230 || defined(__AVR_ATmega644PA__) \ 231 || defined(__AVR_ATmega1284P__) 233 #define ATMEGA_USART0 234 #define ATMEGA_USART1 235 #define UART0_RECEIVE_INTERRUPT USART0_RX_vect 236 #define UART1_RECEIVE_INTERRUPT USART1_RX_vect 237 #define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect 238 #define UART1_TRANSMIT_INTERRUPT USART1_UDRE_vect 239 #define UART0_STATUS UCSR0A 240 #define UART0_CONTROL UCSR0B 241 #define UART0_DATA UDR0 242 #define UART0_UDRIE UDRIE0 243 #define UART1_STATUS UCSR1A 244 #define UART1_CONTROL UCSR1B 245 #define UART1_DATA UDR1 246 #define UART1_UDRIE UDRIE1 247 #elif defined(__AVR_ATtiny814__) 250 #define UART0_RECEIVE_INTERRUPT USART0_RXC_vect 251 #define UART0_TRANSMIT_INTERRUPT USART0_DRE_vect 252 #define USART0_BAUD_RATE(_br_) (uint16_t)((float)(F_CPU * 64 / (16 * (float)(_br_)) + 0.5)) 253 #error "AVR ATtiny814 currently not supported by this libaray !" 255 #error "no UART definition for MCU available" 263 #define UART_BAUD_SELECT(baudRate,xtalCpu) (((xtalCpu)+8UL*(baudRate))/(16UL*(baudRate))-1UL) 269 #define UART_BAUD_SELECT_DOUBLE_SPEED(baudRate,xtalCpu) ((((xtalCpu)+4UL*(baudRate))/(8UL*(baudRate))-1)|0x8000) 271 #ifdef ZRTOS_VFS_MODULE_UART__CFG_ENABLE_DOUBLE_SPEED 272 #define ZRTOS_VFS_MODULE_AVR_UART__IS_DOUBLE_SPEED(baudrate)\ 273 (((baudrate) & 0x8000) != 0) 275 #define ZRTOS_VFS_MODULE_AVR_UART__IS_DOUBLE_SPEED(baudrate)\ 282 #ifdef ZRTOS_VFS_MODULE_UART__CFG_ENABLE_DOUBLE_SPEED 284 if(baudrate & ZRTOS_VFS_MODULE_UART_BAUDRATE__DOUBLE_SPEED){
286 (baudrate & ZRTOS_VFS_MODULE_UART_BAUDRATE__MASK
#define UART_BAUD_SELECT_DOUBLE_SPEED(baudRate, xtalCpu)
UART Baudrate Expression for ATmega double speed mode.
zrtos_vfs_module_uart_callback_t on_send
zrtos_cbuffer_t * zrtos_vfs_module_uart_inode__get_cbuffer_in(zrtos_vfs_module_uart_inode_t *thiz)
zrtos_error_t zrtos_cbuffer__put(zrtos_cbuffer_t *thiz, uint8_t val)
zrtos_error_t zrtos_error_count__add(zrtos_error_count_t *thiz, zrtos_error_t err)
zrtos_error_t zrtos_cbuffer__get(zrtos_cbuffer_t *thiz, uint8_t *out)
bool zrtos_error__is_error(zrtos_error_t thiz)
void zrtos_vfs_module_avr_uart__on_receive_interrupt(zrtos_vfs_module_uart_inode_t *thiz, uint8_t data, zrtos_error_t err)
zrtos_error_count_t rx_error_count
bool zrtos_error__is_success(zrtos_error_t thiz)
zrtos_vfs_module_uart_callback_t on_recv
#define UART_BAUD_SELECT(baudRate, xtalCpu)
UART Baudrate Expression.
zrtos_vfs_module_uart_baudrate_t
uint16_t zrtos_vfs_module_avr_uart__baud_select(zrtos_vfs_module_uart_baudrate_t baudrate)
bool zrtos_vfs_module_avr_uart__on_transmit_interrupt(zrtos_vfs_module_uart_inode_t *thiz, uint8_t *data)
zrtos_error_count_t tx_error_count
zrtos_cbuffer_t * zrtos_vfs_module_uart_inode__get_cbuffer_out(zrtos_vfs_module_uart_inode_t *thiz)