agileRTOS (zrtos)  Version 0.8.0 (ghostbuster)
uart2.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2024 ykat UG (haftungsbeschraenkt) - All Rights Reserved
3  *
4  * Permission for non-commercial use is hereby granted,
5  * free of charge, without warranty of any kind.
6  */
7 #ifndef ZRTOS_VFS_MODULE_AVR_UART_UART2_H
8 #define ZRTOS_VFS_MODULE_AVR_UART_UART2_H
9 #ifdef __cplusplus
10 extern "C" {
11 #endif
12 
15 
17 
18 ISR(UART2_RECEIVE_INTERRUPT){
20  zrtos_vfs_module_avr_uart2
21  ,UART2_DATA
22  ,(
23  (UART2_STATUS & (_BV(FE2)|_BV(DOR2)|_BV(UPE2))) == 0
26  )
27  );
28 }
29 
30 ISR(UART2_TRANSMIT_INTERRUPT,ISR_NOBLOCK){
31  uint8_t tmp;
33  zrtos_vfs_module_avr_uart2
34  ,&tmp
35  )){
36  UART2_DATA = tmp;
37  }else{
38  UART2_CONTROL &= ~_BV(UART2_UDRIE);
39  }
40 }
41 
43  uint16_t baudrate;
44  zrtos_vfs_module_avr_uart2 = ZRTOS_CAST(
47  thiz
48  )
49  );
50 
52  zrtos_vfs_module_avr_uart2->baudrate
53  );
54 
55  //Set baud rate
57  UART2_STATUS = _BV(U2X2); //Enable 2x speed
58  baudrate &= ~0x8000;
59  }else{
60  UART2_STATUS = 0;
61  //UART2_STATUS &= ~_BV(U2X2);
62  }
63  UBRR2H = (uint8_t) (baudrate>>8);
64  UBRR2L = (uint8_t) baudrate;
65 
66  /* Enable USART receiver and transmitter and receive complete interrupt */
67  UART2_CONTROL = _BV(RXCIE2)|_BV(RXEN2)|_BV(TXEN2);
68  //UART2_CONTROL = _BV(RXCIE2)|_BV(TXEN2);
69 
70  /* Set frame format: asynchronous, 8data, no parity, 1stop bit */
71 #ifdef URSEL2
72  UCSR2C = _BV(URSEL2)|_BV(UCSZ21)|_BV(UCSZ20);
73 #else
74  UCSR2C = _BV(UCSZ21)|_BV(UCSZ20);
75 #endif
76 
77  return ZRTOS_ERROR__SUCCESS;
78 }
79 
81  UART2_CONTROL &= ~_BV(UART2_UDRIE);
82  return ZRTOS_ERROR__SUCCESS;
83 }
84 
86  zrtos_vfs_file_t *thiz
87  ,char *path
88  ,void *buf
89  ,size_t len
90  ,zrtos_vfs_offset_t offset
91  ,size_t *out
92 ){
94  thiz
95  ,path
96  ,buf
97  ,len
98  ,offset
99  ,out
100  );
101  if(zrtos_error__is_success(ret)){
102  UART2_CONTROL |= _BV(UART2_UDRIE);
103  }
104  return ret;
105 }
106 
107 ZRTOS_VFS_PLUGIN__INIT(avr_uart2,
118 );
119 
120 #ifdef __cplusplus
121 }
122 #endif
123 #endif
#define ZRTOS_CAST(type, value)
Definition: cast.h:18
zrtos_vfs_module_uart_baudrate_t baudrate
Definition: uart/uart.h:207
size_t zrtos_vfs_offset_t
Definition: vfs_plugin.h:49
ISR(UART2_RECEIVE_INTERRUPT)
Definition: uart2.h:18
#define ZRTOS_VFS_PLUGIN__0_ON_OPEN_DEFAULT()
Definition: vfs_plugin.h:148
zrtos_error_t zrtos_vfs_module_avr_uart2__on_write(zrtos_vfs_file_t *thiz, char *path, void *buf, size_t len, zrtos_vfs_offset_t offset, size_t *out)
Definition: uart2.h:85
zrtos_error_t zrtos_vfs_module_uart__on_read(zrtos_vfs_file_t *thiz, char *path, void *buf, size_t len, zrtos_vfs_offset_t offset, size_t *out)
Definition: uart/uart.h:295
zrtos_error_t zrtos_vfs_module_avr_uart2__on_umount(zrtos_vfs_dentry_t *thiz)
Definition: uart2.h:80
zrtos_error_t zrtos_vfs_module_avr_uart2__on_mount(zrtos_vfs_dentry_t *thiz)
Definition: uart2.h:42
#define ZRTOS_VFS_PLUGIN__8_ON_SEEK_DEFAULT()
Definition: vfs_plugin.h:294
#define ZRTOS_VFS_PLUGIN__1_ON_CLOSE_DEFAULT()
Definition: vfs_plugin.h:165
zrtos_error_t zrtos_vfs_module_uart__on_can_write(zrtos_vfs_file_t *thiz)
Definition: uart/uart.h:352
#define ZRTOS_VFS_PLUGIN__3_ON_UMOUNT(callback)
Definition: vfs_plugin.h:198
ZRTOS_VFS_PLUGIN__INIT(avr_uart2, ZRTOS_VFS_PLUGIN__0_ON_OPEN_DEFAULT() ZRTOS_VFS_PLUGIN__1_ON_CLOSE_DEFAULT() ZRTOS_VFS_PLUGIN__2_ON_MOUNT(zrtos_vfs_module_avr_uart2__on_mount) ZRTOS_VFS_PLUGIN__3_ON_UMOUNT(zrtos_vfs_module_avr_uart2__on_umount) ZRTOS_VFS_PLUGIN__4_ON_READ(zrtos_vfs_module_uart__on_read) ZRTOS_VFS_PLUGIN__5_ON_WRITE(zrtos_vfs_module_avr_uart2__on_write) ZRTOS_VFS_PLUGIN__6_ON_CAN_READ(zrtos_vfs_module_uart__on_can_read) ZRTOS_VFS_PLUGIN__7_ON_CAN_WRITE(zrtos_vfs_module_uart__on_can_write) ZRTOS_VFS_PLUGIN__8_ON_SEEK_DEFAULT() ZRTOS_VFS_PLUGIN__9_ON_IOCTL(zrtos_vfs_module_uart__on_ioctl))
zrtos_vfs_module_uart_inode_t * zrtos_vfs_module_avr_uart2
Definition: uart2.h:16
void zrtos_vfs_module_avr_uart__on_receive_interrupt(zrtos_vfs_module_uart_inode_t *thiz, uint8_t data, zrtos_error_t err)
#define ZRTOS_VFS_PLUGIN__2_ON_MOUNT(callback)
Definition: vfs_plugin.h:181
zrtos_error_t zrtos_vfs_module_uart__on_can_read(zrtos_vfs_file_t *thiz)
Definition: uart/uart.h:340
#define ZRTOS_VFS_PLUGIN__4_ON_READ(callback)
Definition: vfs_plugin.h:215
#define ZRTOS_VFS_PLUGIN__6_ON_CAN_READ(callback)
Definition: vfs_plugin.h:259
#define ZRTOS_VFS_MODULE_AVR_UART__IS_DOUBLE_SPEED(baudrate)
#define ZRTOS_VFS_PLUGIN__5_ON_WRITE(callback)
Definition: vfs_plugin.h:237
bool zrtos_error__is_success(zrtos_error_t thiz)
Definition: error.h:152
zrtos_error_t zrtos_vfs_module_uart__on_write(zrtos_vfs_file_t *thiz, char *path, void *buf, size_t len, zrtos_vfs_offset_t offset, size_t *out)
Definition: uart/uart.h:317
#define ZRTOS_VFS_PLUGIN__9_ON_IOCTL(callback)
Definition: vfs_plugin.h:318
Successful program execution status.
Definition: error.h:22
void * zrtos_vfs_dentry__get_inode_data(zrtos_vfs_dentry_t *thiz)
Definition: vfs_dentry.h:196
uint16_t zrtos_vfs_module_avr_uart__baud_select(zrtos_vfs_module_uart_baudrate_t baudrate)
#define ZRTOS_VFS_PLUGIN__7_ON_CAN_WRITE(callback)
Definition: vfs_plugin.h:276
I/O error.
Definition: error.h:29
bool zrtos_vfs_module_avr_uart__on_transmit_interrupt(zrtos_vfs_module_uart_inode_t *thiz, uint8_t *data)
static uint8_t
Definition: mcp2515.h:159
zrtos_error_t zrtos_vfs_module_uart__on_ioctl(zrtos_vfs_file_t *thiz, char *path, int request, va_list args)
Definition: uart/uart.h:364
zrtos_error_t
Definition: error.h:20