VSF Documented
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 __HAL_DRIVER_NATIONS_N32H76X_N32H78X_USART_H__
19#define __HAL_DRIVER_NATIONS_N32H76X_N32H78X_USART_H__
20
21/*============================ INCLUDES ======================================*/
22
23#include "hal/vsf_hal_cfg.h"
24
25#if VSF_HAL_USE_USART == ENABLED
26
27#include "../../__device.h"
28
29/*\note Refer to template/README.md for usage cases.
30 * For peripheral drivers, blackbox mode is recommended but not required, reimplementation part MUST be open.
31 * For IPCore drivers, class structure, MULTI_CLASS configuration, reimplementation and class APIs should be open to user.
32 * For emulated drivers, **** No reimplementation ****.
33 */
34
35#ifdef __cplusplus
36extern "C" {
37#endif
38
39/*============================ MACROS ========================================*/
40
41// HW
42/*\note hw USART driver can reimplement following types:
43 * To enable reimplementation, please enable macro below:
44 * VSF_USART_CFG_REIMPLEMENT_TYPE_MODE for vsf_usart_mode_t
45 * VSF_USART_CFG_REIMPLEMENT_TYPE_STATUS for vsf_usart_status_t
46 * VSF_USART_CFG_REIMPLEMENT_TYPE_IRQ_MASK for vsf_usart_irq_mask_t
47 * VSF_USART_CFG_REIMPLEMENT_TYPE_CTRL for vsf_usart_ctrl_t
48 * VSF_USART_CFG_REIMPLEMENT_TYPE_CFG for vsf_usart_cfg_t
49 * VSF_USART_CFG_REIMPLEMENT_TYPE_CAPABILITY for vsf_usart_capability_t
50 * Reimplementation is used for optimization hw/IPCore drivers, reimplement the bit mask according to hw registers.
51 * *** DO NOT reimplement these in emulated drivers. ***
52 */
53
54#define VSF_USART_CFG_REIMPLEMENT_TYPE_MODE ENABLED
55#define VSF_USART_CFG_REIMPLEMENT_TYPE_STATUS ENABLED
56#define VSF_USART_CFG_REIMPLEMENT_TYPE_IRQ_MASK ENABLED
57#define VSF_USART_CFG_REIMPLEMENT_TYPE_CTRL ENABLED
58#define VSF_USART_CFG_REIMPLEMENT_TYPE_CFG DISABLED
59#define VSF_USART_CFG_REIMPLEMENT_TYPE_CAPABILITY DISABLED
60// HW end
61
62// TODO: add comments about fifo2req
63
64/*============================ TYPES =========================================*/
65
66// HW/IPCore, not for emulated drivers
67#if VSF_USART_CFG_REIMPLEMENT_TYPE_MODE == ENABLED
68typedef enum vsf_usart_mode_t {
69 // 1..2: TXEN(2)/RXEN(1) in USART_CTRL1
74
75 // 3..4: PCEN(4)/PSEL(3) in USART_CTRL1
77 VSF_USART_ODD_PARITY = (1 << 4) | (1 << 3),
79
80 // 5: WL(5) in USART_CTRL1
83
84 // 6..7: STPB(5:6) in USART_CTRL2, left shifted by 1
85 VSF_USART_0_5_STOPBIT = (1 << 5) << 1,
86 VSF_USART_1_STOPBIT = (0 << 5) << 1,
87 VSF_USART_1_5_STOPBIT = (3 << 5) << 1,
88 VSF_USART_2_STOPBIT = (2 << 5) << 1,
89
90 // 8: CLKEN(8) in USART_CTRL2
93 // 9: CLKPOL(9) in USART_CTRL2
96 // 10: CLKPHA(9) in USART_CTRL2
99 // 11: LBCLK(11) in USART_CTRL2
102#define VSF_USART_SYNC_CLOCK_LAST_BIT_ENABLE VSF_USART_SYNC_CLOCK_LAST_BIT_ENABLE
103#define VSF_USART_SYNC_CLOCK_LAST_BIT_DISABLE VSF_USART_SYNC_CLOCK_LAST_BIT_DISABLE
104#define VSF_USART_SYNC_CLOCK_LAST_BIT_MASK VSF_USART_SYNC_CLOCK_LAST_BIT_ENABLE | VSF_USART_SYNC_CLOCK_LAST_BIT_DISABLE
105
106 // 12|14..19: RXFTCFG(5..7)/TXFTCFG(2..4)/EN(0) in USART_FIFO, left shifted by 12
107 VSF_USART_TX_FIFO_THRESHOLD_NOT_FULL = ((7 << 2) | (1 << 0)) << 12,
108 VSF_USART_TX_FIFO_THRESHOLD_HALF_EMPTY = ((2 << 2) | (1 << 0)) << 12,
109 VSF_USART_TX_FIFO_THRESHOLD_ONE_EIGHTH = ((0 << 2) | (1 << 0)) << 12,
110 VSF_USART_TX_FIFO_THRESHOLD_QUARTER = ((1 << 2) | (1 << 0)) << 12,
111 VSF_USART_TX_FIFO_THRESHOLD_THREE_FOURTH = ((1 << 2) | (1 << 0)) << 12,
112 VSF_USART_TX_FIFO_THRESHOLD_EMPTY = ((5 << 2) | (1 << 0)) << 12,
113
114 VSF_USART_RX_FIFO_THRESHOLD_NOT_EMPTY = ((7 << 5) | (1 << 0)) << 12,
115 VSF_USART_RX_FIFO_THRESHOLD_HALF_FULL = ((2 << 5) | (1 << 0)) << 12,
116 VSF_USART_RX_FIFO_THRESHOLD_ONE_EIGHTH = ((0 << 5) | (1 << 0)) << 12,
117 VSF_USART_RX_FIFO_THRESHOLD_QUARTER = ((1 << 5) | (1 << 0)) << 12,
118 VSF_USART_RX_FIFO_THRESHOLD_THREE_FOURTH = ((1 << 5) | (1 << 0)) << 12,
119 VSF_USART_RX_FIFO_THRESHOLD_FULL = ((5 << 5) | (1 << 0)) << 12,
120
121#define VSF_USART_TX_FIFO_THRESHOLD_MASK ( VSF_USART_TX_FIFO_THRESHOLD_NOT_FULL\
122 | VSF_USART_TX_FIFO_THRESHOLD_HALF_EMPTY\
123 | VSF_USART_TX_FIFO_THRESHOLD_EMPTY\
124 | VSF_USART_TX_FIFO_THRESHOLD_ONE_EIGHTH\
125 | VSF_USART_TX_FIFO_THRESHOLD_QUARTER\
126 | VSF_USART_TX_FIFO_THRESHOLD_THREE_FOURTH)
127#define VSF_USART_RX_FIFO_THRESHOLD_MASK ( VSF_USART_RX_FIFO_THRESHOLD_NOT_EMPTY\
128 | VSF_USART_RX_FIFO_THRESHOLD_HALF_FULL\
129 | VSF_USART_RX_FIFO_THRESHOLD_FULL\
130 | VSF_USART_RX_FIFO_THRESHOLD_ONE_EIGHTH\
131 | VSF_USART_RX_FIFO_THRESHOLD_QUARTER\
132 | VSF_USART_RX_FIFO_THRESHOLD_THREE_FOURTH )
133
134 // 20|22: RTSEN(2)/CTSEN(0) in USART_CTRL3, right shifted by 20
136 VSF_USART_RTS_HWCONTROL = (1 << 2) << 20,
137 VSF_USART_CTS_HWCONTROL = (1 << 0) << 20,
140
141 // 24: HDMEN(4) in USART_CTRL3, right shifted by 20
144
145 // more vendor specified modes can be added here
146
147 // 26: OSPM(26) in USART_CTRL1
151 // 27: SWAP(27) in USART_CTRL1
152 VSF_USART_SWAP = (1 << 27),
153
154
164
182
187
192
193 // not supported, allocate unused bits: 0|13|21|25|28..31
194 // 28..30
199 // 31
202
210#endif
211
212#if VSF_USART_CFG_REIMPLEMENT_TYPE_IRQ_MASK == ENABLED
214 // 3: CTSIEN(1) in USART_CTRL3
216
217 // usart request interrupt
218 // TODO: add DMA support
221
222 // 7: TXDE(7) in USART_CTTL1
224
225 // 8: IDLEIEN(8) in USART_CTRL1
228
229 // 9: RXDNEIE(9) in USART_CTRL1
231
232 // 11: TXCIEN(11) in USART_CTRL1
235
236 // usart error interrupt
237 // 12: PEIEN(12) in USART_CTRL1
239
240 // 15|17: RTOIEN(17)/RTOEN(15) in USART_CTRL2
241 VSF_USART_IRQ_MASK_RX_TIMEOUT = (1 << 15) | (1 << 17),
242
243
244 // more vendor specified irq_masks can be added here
245
265
266 // not supported
267 // 0..2
271
276#endif
277
278#if VSF_USART_CFG_REIMPLEMENT_TYPE_CTRL == ENABLED
279typedef enum vsf_usart_ctrl_t {
280 // 13: SDBRK in USART_CTRL1
282
284
285 // not supported
289#endif
290
295#if VSF_USART_CFG_REIMPLEMENT_TYPE_STATUS == ENABLED
296typedef struct vsf_usart_status_t {
297 union {
298 struct {
299 uint32_t txff : 1; // TXFF(0) in USART_STS
300 uint32_t rxff : 1; // RXFF(1) in USART_STS
301 uint32_t txfe : 1; // TXFE(2) in USART_STS
302 uint32_t rxfe : 1; // RXFE(3) in USART_STS
303 uint32_t rxft : 1; // RXFT(4) in USART_STS
304 uint32_t txft : 1; // TXFT(5) in USART_STS
305 uint32_t idle : 1; // IDLE(6) in USART_STS
306 uint32_t txde : 1; // TXDEF(7) in USART_STS
307 uint32_t trans_complete : 1; // TXC(8) in USART_STS
308 uint32_t rxne : 1; // RXDNE(9) in USART_STS
309 uint32_t cts_level : 1; // CTSF(10) in USART_STS
310 uint32_t __dummy1 : 1;
311 uint32_t parity_err : 1; // PEF(12) in USART_STS
312 uint32_t overrun_err : 1; // OREF(13) in USART_STS
313 uint32_t noise_err : 1; // NEF(14) in USART_STS
314 uint32_t frame_err : 1; // FEF(15) in USART_STS
315 uint32_t rx_timeouted : 1; // RTOF(16) in USART_STS
316 uint32_t __dummy2 : 16;
317 };
319 };
321#endif
322
327#if VSF_USART_CFG_REIMPLEMENT_TYPE_CFG == ENABLED
329typedef void vsf_usart_isr_handler_t(void *target_ptr,
330 vsf_usart_t *usart_ptr,
332typedef struct vsf_usart_isr_t {
334 void *target_ptr;
337typedef struct vsf_usart_cfg_t {
342
343 // more vendor specified cfg can be added here
345#endif
346
347#if VSF_USART_CFG_REIMPLEMENT_TYPE_CAPABILITY == ENABLED
348typedef struct vsf_usart_capability_t {
350
353
356
359
363
364 // more vendor specified capability can be added here
366#endif
367// HW/IPCore end
368
369/*============================ GLOBAL VARIABLES ==============================*/
370/*============================ PROTOTYPES ====================================*/
371
372#ifdef __cplusplus
373}
374#endif
375
376#endif // VSF_HAL_USE_USART
377#endif // __HAL_DRIVER_NATIONS_N32H76X_N32H78X_USART_H__
378/* EOF */
vsf_usart_mode_t
Definition uart.h:32
vsf_usart_irq_mask_t
Definition uart.h:106
@ VSF_USART_HALF_DUPLEX_DISABLE
Definition usart.h:108
@ VSF_USART_OVERSAMPLE_16
Definition usart.h:148
@ VSF_USART_SYNC_CLOCK_PHASE_1_EDGE
Definition usart.h:122
@ VSF_USART_10_BIT_LENGTH
Definition usart.h:132
@ VSF_USART_RTS_HWCONTROL
Definition usart.h:101
@ VSF_USART_SWAP
Definition usart.h:142
@ VSF_USART_FORCE_0_PARITY
Definition usart.h:186
@ __VSF_HW_USART_NOT_SUPPORT_MASK
Definition usart.h:201
@ VSF_USART_OVERSAMPLE_MASK
Definition usart.h:149
@ VSF_USART_1_STOPBIT
Definition usart.h:89
@ VSF_USART_FORCE_1_PARITY
Definition usart.h:187
@ VSF_USART_2_STOPBIT
Definition usart.h:91
@ VSF_USART_CTS_HWCONTROL
Definition usart.h:102
@ VSF_USART_RTS_CTS_HWCONTROL
Definition usart.h:103
@ VSF_USART_HALF_DUPLEX_ENABLE
Definition usart.h:107
@ VSF_USART_OVERSAMPLE_8
Definition usart.h:147
@ VSF_USART_0_5_STOPBIT
Definition usart.h:88
@ VSF_USART_NO_HWCONTROL
Definition usart.h:100
@ VSF_USART_1_5_STOPBIT
Definition usart.h:90
@ VSF_USART_IRQ_MASK_OVERFLOW_ERR
Definition usart.h:249
@ VSF_USART_IRQ_MASK_CTS
Definition usart.h:217
@ VSF_USART_IRQ_MASK_BREAK_ERR
Definition usart.h:248
@ VSF_USART_IRQ_MASK_PARITY_ERR
Definition usart.h:226
@ __VSF_HW_USART_NOT_SUPPORT_IRQ_MASK
Definition usart.h:251
@ __VSF_HW_USART_IRQ_MASK
Definition usart.h:230
@ VSF_USART_IRQ_MASK_FRAME_ERR
Definition usart.h:247
vsf_usart_ctrl_t
Definition usart.h:256
@ VSF_USART_CTRL_CLEAR_BREAK
Definition usart.h:260
@ VSF_USART_CTRL_SEND_BREAK
Definition usart.h:257
@ __VSF_HW_USART_SUPPORT_CMD_MASK
Definition usart.h:262
@ VSF_USART_CTRL_SET_BREAK
Definition usart.h:259
#define VSF_USART_SYNC_CLOCK_LAST_BIT_DISABLE
Definition usart.h:128
struct vsf_usart_cfg_t vsf_usart_cfg_t
struct vsf_usart_capability_t vsf_usart_capability_t
@ VSF_USART_TX_FIFO_THRESHOLD_EMPTY
Definition usart.h:112
@ VSF_USART_SYNC_CLOCK_ENABLE
Definition usart.h:91
@ VSF_USART_EVEN_PARITY
Definition usart.h:78
@ VSF_USART_RX_FIFO_THRESHOLD_NOT_EMPTY
Definition usart.h:114
@ VSF_USART_ODD_PARITY
Definition usart.h:77
@ VSF_USART_SYNC_CLOCK_PHASE_1_EDGE
Definition usart.h:97
@ VSF_USART_NO_PARITY
Definition usart.h:76
@ __VSF_HW_USART_CTRL3_SHIFT_MASK
Definition usart.h:185
@ __VSF_HW_USART_CTRL1_MASK
Definition usart.h:155
@ VSF_USART_RX_FIFO_THRESHOLD_HALF_FULL
Definition usart.h:115
@ VSF_USART_RX_ENABLE
Definition usart.h:72
@ __VSF_HW_USART_FIFO_SHIFT_BITS
Definition usart.h:191
@ __VSF_HW_USART_FIFO_MASK
Definition usart.h:188
@ VSF_USART_TX_FIFO_THRESHOLD_ONE_EIGHTH
Definition usart.h:109
@ VSF_USART_TX_FIFO_THRESHOLD_NOT_FULL
Definition usart.h:107
@ __VSF_HW_USART_CTRL3_SHIFT_BITS
Definition usart.h:186
@ VSF_USART_TX_ENABLE
Definition usart.h:70
@ VSF_USART_SYNC_CLOCK_POLARITY_HIGH
Definition usart.h:95
@ VSF_USART_9_BIT_LENGTH
Definition usart.h:81
@ __VSF_HW_USART_CTRL2_MASK
Definition usart.h:165
@ VSF_USART_SYNC_CLOCK_POLARITY_LOW
Definition usart.h:94
@ VSF_USART_RX_DISABLE
Definition usart.h:73
@ __VSF_HW_USART_FIFO_SHIFT_MASK
Definition usart.h:190
@ VSF_USART_RX_FIFO_THRESHOLD_THREE_FOURTH
Definition usart.h:118
@ __VSF_HW_USART_CTRL2_SHIFT_BITS
Definition usart.h:181
@ __VSF_HW_USART_CTRL2_SHIFT_MASK
Definition usart.h:177
@ VSF_USART_SYNC_CLOCK_DISABLE
Definition usart.h:92
@ VSF_USART_RX_FIFO_THRESHOLD_ONE_EIGHTH
Definition usart.h:116
@ VSF_USART_SYNC_CLOCK_PHASE_2_EDGE
Definition usart.h:98
@ __VSF_HW_USART_CTRL3_MASK
Definition usart.h:183
@ VSF_USART_RX_FIFO_THRESHOLD_QUARTER
Definition usart.h:117
@ VSF_USART_TX_DISABLE
Definition usart.h:71
@ VSF_USART_TX_FIFO_THRESHOLD_QUARTER
Definition usart.h:110
@ VSF_USART_RX_FIFO_THRESHOLD_FULL
Definition usart.h:119
@ VSF_USART_TX_FIFO_THRESHOLD_THREE_FOURTH
Definition usart.h:111
@ VSF_USART_TX_FIFO_THRESHOLD_HALF_EMPTY
Definition usart.h:108
#define VSF_USART_RX_FIFO_THRESHOLD_MASK
Definition usart.h:127
struct vsf_usart_isr_t vsf_usart_isr_t
#define VSF_USART_TX_FIFO_THRESHOLD_MASK
Definition usart.h:121
@ __VSF_HW_USART_CTRL3_IRQ_MASK
Definition usart.h:264
@ __VSF_HW_USART_CTRL2_IRQ_MASK
Definition usart.h:263
@ __VSF_HW_USART_CTRL1_IRQ_MASK
Definition usart.h:255
#define VSF_USART_SYNC_CLOCK_LAST_BIT_ENABLE
Definition usart.h:102
#define VSF_USART_IRQ_MASK_TX_IDLE
Definition usart.h:234
#define VSF_USART_IRQ_MASK_RX_IDLE
Definition usart.h:227
void vsf_usart_isr_handler_t(void *target_ptr, vsf_usart_t *usart_ptr, vsf_usart_irq_mask_t irq_mask)
Definition usart.h:329
vsf_usart_mode_t
Definition usart.h:42
@ VSF_USART_8_BIT_LENGTH
Definition usart.h:43
@ VSF_USART_7_BIT_LENGTH
Definition usart.h:44
@ VSF_USART_5_BIT_LENGTH
Definition usart.h:46
@ VSF_USART_6_BIT_LENGTH
Definition usart.h:45
vsf_usart_irq_mask_t
Definition usart.h:86
@ VSF_USART_IRQ_MASK_TX_CPL
Definition usart.h:90
@ VSF_USART_IRQ_MASK_TX
Definition usart.h:88
@ VSF_USART_IRQ_MASK_RX
Definition usart.h:87
@ VSF_USART_IRQ_MASK_RX_TIMEOUT
Definition usart.h:98
@ VSF_USART_IRQ_MASK_RX_CPL
Definition usart.h:89
struct vsf_usart_status_t vsf_usart_status_t
vsf_arch_prio_t
Definition cortex_a_generic.h:88
const i_spi_t vsf_spi_irq_mask_t irq_mask
Definition spi_interface.h:38
unsigned uint32_t
Definition stdint.h:9
unsigned char uint8_t
Definition stdint.h:5
USART capability structure Defines the hardware capabilities and limitations of the USART interface.
Definition vsf_template_usart.h:764
uint8_t max_data_bits
Maximum data bits per frame.
Definition vsf_template_usart.h:776
uint8_t support_set_and_clear_break
Support set and clear break.
Definition vsf_template_usart.h:781
vsf_usart_irq_mask_t irq_mask
Definition usart.h:349
uint8_t support_rx_timeout
Support receive timeout.
Definition vsf_template_usart.h:779
uint8_t rxfifo_depth
RX FIFO depth in data frames (0 means no FIFO)
Definition vsf_template_usart.h:774
uint8_t support_send_break
Support send break.
Definition vsf_template_usart.h:780
uint8_t txfifo_depth
TX FIFO depth in data frames (0 means no FIFO)
Definition vsf_template_usart.h:773
uint8_t min_data_bits
Minimum data bits per frame.
Definition vsf_template_usart.h:777
uint32_t min_baudrate
Minimum supported baudrate (bps)
Definition vsf_template_usart.h:771
uint32_t max_baudrate
Maximum supported baudrate (bps)
Definition vsf_template_usart.h:770
USART configuration structure Contains all parameters needed to initialize and configure a USART inst...
Definition vsf_template_usart.h:660
uint32_t mode
USART working mode.
Definition vsf_template_usart.h:661
uint32_t baudrate
Baudrate in Hz.
Definition vsf_template_usart.h:662
uint32_t rx_timeout
RX timeout in microseconds.
Definition vsf_template_usart.h:663
vsf_usart_isr_t isr
Interrupt configuration.
Definition vsf_template_usart.h:667
USART interrupt configuration structure Contains all necessary information for configuring USART inte...
Definition vsf_template_usart.h:646
vsf_usart_isr_handler_t * handler_fn
Interrupt handler function pointer.
Definition vsf_template_usart.h:647
vsf_arch_prio_t prio
Interrupt priority.
Definition vsf_template_usart.h:649
void * target_ptr
User target pointer.
Definition vsf_template_usart.h:648
USART status information structure Contains the current status of USART operations and FIFO threshold...
Definition uart.h:156
uint32_t noise_err
Definition usart.h:270
uint32_t __dummy2
Definition usart.h:282
uint32_t trans_complete
Definition usart.h:274
uint32_t cts_level
Definition usart.h:278
uint32_t overrun_err
Definition usart.h:271
uint32_t idle
Definition usart.h:272
uint32_t __dummy1
Definition usart.h:280
uint32_t value
Definition usart.h:284
uint32_t txff
Definition vsf_pl011_uart.h:140
uint32_t txde
Definition usart.h:306
uint32_t frame_err
Definition usart.h:269
uint32_t rx_timeouted
Definition usart.h:279
uint32_t txft
Definition usart.h:304
uint32_t rxne
Definition usart.h:308
uint32_t rxfe
Definition vsf_pl011_uart.h:139
uint32_t rxft
Definition usart.h:303
uint32_t parity_err
Definition usart.h:268
uint32_t txfe
Definition vsf_pl011_uart.h:142
uint32_t rxff
Definition vsf_pl011_uart.h:141
USART instance structure Used for USART Multi Class support.
Definition vsf_template_usart.h:810
vsf_usart_irq_mask_t
Definition usart.h:176
void vsf_usart_isr_handler_t(void *target_ptr, vsf_usart_t *usart_ptr, vsf_usart_irq_mask_t irq_mask)
Definition usart.h:245
vsf_usart_ctrl_t
USART control commands Defines the available control operations for USART instances.
Definition vsf_template_usart.h:680
Generated from commit: vsfteam/vsf@cfd571b