VSF Documented
vsf_hal_distbus_usart.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright(C)2009-2022 by VSF Team *
3 * *
4 * Licensed under the Apache License, Version 2.0 (the "License"); *
5 * you may not use this file except in compliance with the License. *
6 * You may obtain a copy of the License at *
7 * *
8 * http://www.apache.org/licenses/LICENSE-2.0 *
9 * *
10 * Unless required by applicable law or agreed to in writing, software *
11 * distributed under the License is distributed on an "AS IS" BASIS, *
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
13 * See the License for the specific language governing permissions and *
14 * limitations under the License. *
15 * *
16 ****************************************************************************/
17
18#ifndef __VSF_HAL_DISTBUS_USART_H__
19#define __VSF_HAL_DISTBUS_USART_H__
20
21/*============================ INCLUDES ======================================*/
22
23#include "hal/vsf_hal_cfg.h"
24
25#if VSF_HAL_USE_USART == ENABLED && VSF_HAL_DISTBUS_USE_USART == ENABLED
26
27// for stream
28#include "service/vsf_service.h"
29
30#if defined(__VSF_HAL_DISTBUS_USART_CLASS_IMPLEMENT)
31# define __VSF_CLASS_IMPLEMENT__
32#elif defined(__VSF_HAL_DISTBUS_USART_CLASS_INHERIT__)
33# define __VSF_CLASS_INHERIT__
34#endif
35
36#include "utilities/ooc_class.h"
37
38#ifdef __cplusplus
39extern "C" {
40#endif
41
42/*============================ MACROS ========================================*/
43
44#ifndef VSF_HAL_DISTBUS_USART_CFG_MULTI_CLASS
45# define VSF_HAL_DISTBUS_USART_CFG_MULTI_CLASS VSF_USART_CFG_MULTI_CLASS
46#endif
47
48#ifndef VSF_HAL_DISTBUS_USART_CFG_FIFO_SIZE
49# define VSF_HAL_DISTBUS_USART_CFG_FIFO_SIZE 1024
50#endif
51
52#ifdef VSF_HAL_DISTBUS_AS_REAL_DRIVER
53# define VSF_USART_CFG_REIMPLEMENT_TYPE_MODE ENABLED
54# define VSF_USART_CFG_REIMPLEMENT_TYPE_IRQ_MASK ENABLED
55#endif
56#define VSF_USART_CFG_DEC_FIFO_TO_REQUEST
57
58/*============================ MACROFIED FUNCTIONS ===========================*/
59/*============================ TYPES =========================================*/
60
61#if defined(__VSF_HAL_DISTBUS_USART_CLASS_IMPLEMENT) || defined(__VSF_HAL_DISTBUS_USART_CLASS_INHERIT__)
62enum {
63 // commands to slave
64 VSF_HAL_DISTBUS_USART_CMD_INIT = 0,
65 VSF_HAL_DISTBUS_USART_CMD_ENABLE,
66 VSF_HAL_DISTBUS_USART_CMD_DISABLE,
67 VSF_HAL_DISTBUS_USART_CMD_IRQ_ENABLE,
68 VSF_HAL_DISTBUS_USART_CMD_IRQ_DISABLE,
69 VSF_HAL_DISTBUS_USART_CMD_TX,
70
71 // commands to host
72 VSF_HAL_DISTBUS_USART_CMD_TXED_COUNT,
73 VSF_HAL_DISTBUS_USART_CMD_RX,
74 VSF_HAL_DISTBUS_USART_CMD_ISR,
75
76 VSF_HAL_DISTBUS_USART_CMD_ADDR_RANGE,
77};
78
79typedef struct vsf_hal_distbus_usart_init_t {
80 uint32_t mode;
81 uint32_t baudrate;
82 uint32_t rx_timeout;
83} VSF_CAL_PACKED vsf_hal_distbus_usart_init_t;
84
85typedef struct vsf_hal_distbus_usart_isr_t {
87} VSF_CAL_PACKED vsf_hal_distbus_usart_isr_t;
88
89typedef struct vsf_hal_distbus_usart_txed_cnt_t {
90 uint32_t count;
91} VSF_CAL_PACKED vsf_hal_distbus_usart_txed_cnt_t;
92#endif
93
94typedef enum VSF_MCONNECT(VSF_HAL_DISTBUS_PREFIX, usart_mode_t) {
95 // parity: 3 bits
101
102 // stopbit: 2 bits
107
108 // bit length: 3 bits
115
116 // hwcontrol: 2 bits
121
122 // enable: 4 bits
127
128 // sync_clock: 2 bit
131
132 // half_duplex: 2 bit
135
136 // threshold: 6 bits
143
144#ifdef VSF_HAL_DISTBUS_AS_REAL_DRIVER
148
151
154#else
159
164
170
177
182
185
188
192
196
206#endif
208
209typedef enum VSF_MCONNECT(VSF_HAL_DISTBUS_PREFIX, usart_irq_mask_t) {
218
225
226#ifdef VSF_HAL_DISTBUS_AS_REAL_DRIVER
227# define VSF_USART_IRQ_MASK_TX_IDLE VSF_USART_IRQ_MASK_TX_IDLE
228# define VSF_USART_IRQ_MASK_RX_IDLE VSF_USART_IRQ_MASK_RX_IDLE
229# define VSF_USART_IRQ_MASK_RX_TIMEOUT VSF_USART_IRQ_MASK_RX_TIMEOUT
230# define VSF_USART_IRQ_MASK_CTS VSF_USART_IRQ_MASK_CTS
231# define VSF_USART_IRQ_MASK_FRAME_ERR VSF_USART_IRQ_MASK_FRAME_ERR
232# define VSF_USART_IRQ_MASK_BREAK_ERR VSF_USART_IRQ_MASK_BREAK_ERR
233# define VSF_USART_IRQ_MASK_PARITY_ERR VSF_USART_IRQ_MASK_PARITY_ERR
234# define VSF_USART_IRQ_MASK_RX_OVERFLOW_ERR VSF_USART_IRQ_MASK_RX_OVERFLOW_ERR
235# define VSF_USART_IRQ_MASK_TX_OVERFLOW_ERR VSF_USART_IRQ_MASK_TX_OVERFLOW_ERR
236#else
243
253#endif
254} VSF_MCONNECT(VSF_HAL_DISTBUS_PREFIX, usart_irq_mask_t);
255
256/*============================ INCLUDES ======================================*/
257
258#ifdef VSF_HAL_DISTBUS_AS_REAL_DRIVER
260#endif
261
262/*============================ TYPES =========================================*/
263
265#if VSF_HAL_DISTBUS_USART_CFG_MULTI_CLASS == ENABLED
266 public_member(
267 implement(vsf_usart_t)
268 )
269#endif
270 protected_member(
271 vsf_distbus_service_t service;
272 struct {
274 void *target;
275 uint32_t enabled_mask;
276 uint32_t triggered_mask;
277 uint16_t no;
278 } irq;
280 private_member(
281 vsf_distbus_t *distbus;
282 struct {
283 struct {
284 vsf_mem_stream_t stream;
286 } rx;
287 struct {
288 vsf_mem_stream_t stream;
290 bool is_pending;
291 } tx;
292 } fifo;
293 struct {
294 struct {
295 uint8_t *buffer;
297 } tx;
298 struct {
299 uint8_t *buffer;
301 } rx;
302 } dma;
304};
305
306/*============================ GLOBAL VARIABLES ==============================*/
307/*============================ INCLUDES ======================================*/
308/*============================ PROTOTYPES ====================================*/
309
311
312#ifdef __cplusplus
313}
314#endif
315
316#undef __VSF_HAL_DISTBUS_USART_CLASS_IMPLEMENT
317#undef __VSF_HAL_DISTBUS_USART_CLASS_INHERIT__
318
319#endif
320#endif
321/* EOF */
322
@ VSF_USART_HALF_DUPLEX_DISABLE
Definition uart.h:72
@ VSF_USART_8_BIT_LENGTH
Definition uart.h:34
@ VSF_USART_EVEN_PARITY
Definition uart.h:46
@ VSF_USART_ODD_PARITY
Definition uart.h:45
@ VSF_USART_NO_PARITY
Definition uart.h:44
@ VSF_USART_RX_ENABLE
Definition uart.h:66
@ VSF_USART_TX_ENABLE
Definition uart.h:63
@ VSF_USART_1_STOPBIT
Definition uart.h:40
@ VSF_USART_NO_HWCONTROL
Definition uart.h:58
@ VSF_USART_IRQ_MASK_TX_CPL
Definition uart.h:125
@ VSF_USART_IRQ_MASK_TX
Definition uart.h:109
@ VSF_USART_IRQ_MASK_RX
Definition uart.h:108
@ VSF_USART_IRQ_MASK_RX_CPL
Definition uart.h:124
@ VSF_USART_BIT_LENGTH_MASK
Definition uart.h:106
@ VSF_USART_ENABLE_MASK
Definition uart.h:119
@ VSF_USART_PARITY_MASK
Definition uart.h:97
@ VSF_USART_MODE_ALL_BITS_MASK
Definition uart.h:122
@ VSF_USART_HWCONTROL_MASK
Definition uart.h:112
@ VSF_USART_STOPBIT_MASK
Definition uart.h:102
@ VSF_USART_IRQ_MASK_ERR
Definition uart.h:145
@ VSF_USART_IRQ_ALL_BITS_MASK
Definition uart.h:150
#define VSF_USART_7_BIT_LENGTH
Definition usart.h:105
#define VSF_USART_CTS_HWCONTROL
Definition usart.h:94
#define VSF_USART_SYNC_CLOCK_DISABLE
Definition usart.h:132
#define VSF_USART_HALF_DUPLEX_ENABLE
Definition usart.h:77
#define VSF_USART_1_5_STOPBIT
Definition usart.h:117
#define VSF_USART_TX_FIFO_THRESHOLD_EMPTY
Definition usart.h:189
#define VSF_USART_TX_DISABLE
Definition usart.h:84
#define VSF_USART_RX_FIFO_THRESHOLD_FULL
Definition usart.h:198
#define VSF_USART_RTS_CTS_HWCONTROL
Definition usart.h:95
#define VSF_USART_RTS_HWCONTROL
Definition usart.h:93
#define VSF_USART_RX_FIFO_THRESHOLD_NOT_EMPTY
Definition usart.h:195
#define VSF_USART_0_5_STOPBIT
Definition usart.h:116
#define VSF_USART_SYNC_CLOCK_ENABLE
Definition usart.h:131
#define VSF_USART_2_STOPBIT
Definition usart.h:118
#define VSF_USART_IRQ_MASK_TX_IDLE
Definition usart.h:223
#define VSF_USART_RX_DISABLE
Definition usart.h:85
#define VSF_USART_IRQ_MASK_RX_IDLE
Definition usart.h:230
#define VSF_USART_TX_FIFO_THRESHOLD_NOT_FULL
Definition usart.h:192
#define VSF_USART_RX_FIFO_THRESHOLD_MASK
Definition usart.h:149
#define VSF_USART_TX_FIFO_THRESHOLD_MASK
Definition usart.h:143
Definition vsf_distbus.h:87
Definition vsf_distbus.h:122
Definition vsf_hal_distbus_usart.h:264
Definition vsf_mem_stream.h:88
#define VSF_HAL_DISTBUS_PREFIX
Definition driver.h:35
#define VSF_HAL_DISTBUS_ENUM(__ELEMENT)
Definition driver.h:34
#define vsf_class(__name)
Definition ooc_class.h:48
const i_spi_t vsf_spi_irq_mask_t irq_mask
Definition spi_interface.h:38
unsigned short uint16_t
Definition stdint.h:7
unsigned uint32_t
Definition stdint.h:9
unsigned char uint8_t
Definition stdint.h:5
USART instance structure Used for USART Multi Class support.
Definition vsf_template_usart.h:1008
#define VSF_HAL_DISTBUS_USART_CFG_FIFO_SIZE
Definition vsf_hal_distbus_usart.h:49
uint32_t vsf_hal_distbus_usart_register_service(vsf_distbus_t *distbus, vsf_hal_distbus_usart_t *usart, void *info, uint32_t infolen)
Definition vsf_hal_distbus_usart.c:152
enum VSF_MCONNECT(VSF_HAL_DISTBUS_PREFIX, usart_mode_t)
Definition vsf_hal_distbus_usart.h:94
uint32_t size
Definition vsf_memfs.h:50
__bfs_node_fifo_t fifo
Definition vsf_msg_tree.h:247
struct vk_romfs_header_t VSF_CAL_PACKED
#define VSF_USART_IRQ_MASK_RX_TIMEOUT
Definition vsf_template_usart.h:574
#define VSF_USART_IRQ_MASK_FRAME_ERR
Definition vsf_template_usart.h:628
#define VSF_USART_IRQ_MASK_CTS
Definition vsf_template_usart.h:590
#define VSF_USART_5_BIT_LENGTH
Definition vsf_template_usart.h:349
#define VSF_USART_9_BIT_LENGTH
Definition vsf_template_usart.h:355
#define VSF_USART_FORCE_1_PARITY
Definition vsf_template_usart.h:325
#define VSF_USART_RX_FIFO_THRESHOLD_HALF_FULL
Definition vsf_template_usart.h:432
#define VSF_USART_10_BIT_LENGTH
Definition vsf_template_usart.h:357
#define VSF_USART_IRQ_MASK_RX_OVERFLOW_ERR
Definition vsf_template_usart.h:662
#define VSF_USART_IRQ_MASK_BREAK_ERR
Definition vsf_template_usart.h:630
#define VSF_USART_FORCE_0_PARITY
Definition vsf_template_usart.h:323
#define VSF_USART_IRQ_MASK_PARITY_ERR
Definition vsf_template_usart.h:646
#define VSF_USART_TX_FIFO_THRESHOLD_HALF_EMPTY
Definition vsf_template_usart.h:417
void vsf_usart_isr_handler_t(void *target_ptr, vsf_usart_t *usart_ptr, vsf_usart_irq_mask_t irq_mask)
USART interrupt handler function type declaration.
Definition vsf_template_usart.h:817
#define VSF_USART_IRQ_MASK_NOISE_ERR
@ VSF_USART_HALF_DUPLEX_MASK
Definition vsf_template_usart.h:517
@ VSF_USART_SYNC_CLOCK_MASK
Definition vsf_template_usart.h:514
#define VSF_USART_6_BIT_LENGTH
Definition vsf_template_usart.h:351
#define VSF_USART_IRQ_MASK_TX_OVERFLOW_ERR
Definition vsf_template_usart.h:674
Generated from commit: vsfteam/vsf@8634e61