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_ARTERY_AT32F402_405_USART_H__
19#define __HAL_DRIVER_ARTERY_AT32F402_405_USART_H__
20
21/*============================ INCLUDES ======================================*/
22
23#include "hal/vsf_hal_cfg.h"
24
25#if VSF_HAL_USE_USART == ENABLED
26
27// HW/IPCore
32// HW/IPCore end
33
34/*\note Refer to template/README.md for usage cases.
35 * For peripheral drivers, blackbox mode is recommended but not required, reimplementation part MUST be open.
36 * For IPCore drivers, class structure, MULTI_CLASS configuration, reimplementation and class APIs should be open to user.
37 * For emulated drivers, **** No reimplementation ****.
38 */
39
40/*\note Includes CAN ONLY be put here. */
41/*\note If current header is for a peripheral driver(hw driver), and inherit from an IPCore driver, include IPCore header here. */
42
43#ifdef __cplusplus
44extern "C" {
45#endif
46
47/*============================ MACROS ========================================*/
48
49// HW
50/*\note hw USART driver can reimplement following types:
51 * To enable reimplementation, please enable macro below:
52 * VSF_USART_CFG_REIMPLEMENT_TYPE_MODE for vsf_usart_mode_t
53 * VSF_USART_CFG_REIMPLEMENT_TYPE_STATUS for vsf_usart_status_t
54 * VSF_USART_CFG_REIMPLEMENT_TYPE_IRQ_MASK for vsf_usart_irq_mask_t
55 * VSF_USART_CFG_REIMPLEMENT_TYPE_CTRL for vsf_usart_ctrl_t
56 * VSF_USART_CFG_REIMPLEMENT_TYPE_CFG for vsf_usart_cfg_t
57 * VSF_USART_CFG_REIMPLEMENT_TYPE_CAPABILITY for vsf_usart_capability_t
58 * Reimplementation is used for optimization hw/IPCore drivers, reimplement the bit mask according to hw registers.
59 * *** DO NOT reimplement these in emulated drivers. ***
60 */
61
62#define VSF_USART_CFG_REIMPLEMENT_TYPE_MODE ENABLED
63#define VSF_USART_CFG_REIMPLEMENT_TYPE_IRQ_MASK ENABLED
64#define VSF_USART_CFG_REIMPLEMENT_TYPE_CTRL ENABLED
65// HW end
66
67// TODO: add comments about fifo2req
68
69/*============================ TYPES =========================================*/
70
71// HW/IPCore, not for emulated drivers
72#if VSF_USART_CFG_REIMPLEMENT_TYPE_MODE == ENABLED
73typedef enum vsf_usart_mode_t {
74 // 1: SLBEN(3) in USART_CTRL3, shift right by 2
77#define VSF_USART_HALF_DUPLEX_ENABLE VSF_USART_HALF_DUPLEX_ENABLE
78
79 // 2..3: REN(2)/TEN(3) in USART_CTRL1
84#define VSF_USART_TX_DISABLE VSF_USART_TX_DISABLE
85#define VSF_USART_RX_DISABLE VSF_USART_RX_DISABLE
86
87 // 6..7: RTSEN(8)/CTSEN(9) in USART_CTRL3, shift right by 2
89 VSF_USART_RTS_HWCONTROL = (1 << 8) >> 2,
90 VSF_USART_CTS_HWCONTROL = (1 << 9) >> 2,
96
97 // 9..10: PSEL(9)/PEN(10) in USART_CTRL1
99 VSF_USART_ODD_PARITY = (1 << 10) | (1 << 9),
100 VSF_USART_EVEN_PARITY = (1 << 10) | (0 << 9),
101
102 // 12|28: DBN0(12)/DBN1(28) in USART_CTRL1
103 VSF_USART_7_BIT_LENGTH = (0 << 12) | (1 << 28),
104 VSF_USART_8_BIT_LENGTH = (0 << 12) | (0 << 28),
105#define VSF_USART_7_BIT_LENGTH VSF_USART_7_BIT_LENGTH
106 // if parity is enabled, the MSB of the 9-bit data will be over-written by parity bit
107 // so VSF_USART_9_BIT_LENGTH is not fully supported
108// VSF_USART_9_BIT_LENGTH = (1 << 12) | (0 << 28),
109//#define VSF_USART_9_BIT_LENGTH VSF_USART_9_BIT_LENGTH
110
111 // 17..18: STOP(12..13) in USART_CTRL2, shift left by 5
112 VSF_USART_0_5_STOPBIT = (1 << 12) << 5,
113 VSF_USART_1_STOPBIT = (0 << 12) << 5,
114 VSF_USART_1_5_STOPBIT = (3 << 12) << 5,
115 VSF_USART_2_STOPBIT = (2 << 12) << 5,
116#define VSF_USART_0_5_STOPBIT VSF_USART_0_5_STOPBIT
117#define VSF_USART_1_5_STOPBIT VSF_USART_1_5_STOPBIT
118#define VSF_USART_2_STOPBIT VSF_USART_2_STOPBIT
119
120 // 16: CLKEN(11) in USART_CTRL2, shift left by 5
123 // 14..15: CLKPHA(9)/CLKPOL(10) in USART_CTRL2, shift left by 5
128 // 13: LBCP(8) in USART_CTRL2, shift left by 5
131#define VSF_USART_SYNC_CLOCK_ENABLE VSF_USART_SYNC_CLOCK_ENABLE
132#define VSF_USART_SYNC_CLOCK_DISABLE VSF_USART_SYNC_CLOCK_DISABLE
133#define VSF_USART_SYNC_CLOCK_POLARITY_LOW VSF_USART_SYNC_CLOCK_POLARITY_LOW
134#define VSF_USART_SYNC_CLOCK_POLARITY_HIGH VSF_USART_SYNC_CLOCK_POLARITY_HIGH
135#define VSF_USART_SYNC_CLOCK_PHASE_1_EDGE VSF_USART_SYNC_CLOCK_PHASE_1_EDGE
136#define VSF_USART_SYNC_CLOCK_PHASE_2_EDGE VSF_USART_SYNC_CLOCK_PHASE_2_EDGE
137#define VSF_USART_SYNC_CLOCK_LAST_BIT_ENABLE VSF_USART_SYNC_CLOCK_LAST_BIT_ENABLE
138#define VSF_USART_SYNC_CLOCK_LAST_BIT_DISABLE VSF_USART_SYNC_CLOCK_LAST_BIT_DISABLE
139#define VSF_USART_SYNC_CLOCK_LAST_BIT_MASK VSF_USART_SYNC_CLOCK_LAST_BIT_ENABLE | VSF_USART_SYNC_CLOCK_LAST_BIT_DISABLE
140
141 // more vendor specified modes can be added here
142
143 // 20: TRPSWAP(15) in USART_CTRL2, shift left by 10
144 VSF_USART_SWAP = (1 << 15) << 5,
146 // 21..22: RXREV(16)/TXREV(17) in USART_CTRL2, shift left by 10
147 VSF_USART_TX_INV = (1 << 17) << 5,
148 VSF_USART_RX_INV = (1 << 16) << 5,
151
159
176
180
181 // not supported, allocate unused bits: 23..27 | 29..31
182 // 23..25
187 // 26..27
189#define VSF_USART_TX_FIFO_THRESHOLD_EMPTY VSF_USART_TX_FIFO_THRESHOLD_EMPTY
192#define VSF_USART_TX_FIFO_THRESHOLD_NOT_FULL VSF_USART_TX_FIFO_THRESHOLD_NOT_FULL
193 // 29..30
199 // 31
202
210#endif
211
212#if VSF_USART_CFG_REIMPLEMENT_TYPE_IRQ_MASK == ENABLED
214 // TODO: add dma support
217
218 // usart fifo interrupt
219 // 7: TDBE(7) in USART_STS | TDBEIEN(7) in USART_CTRL1
221 // 6: TDC(6) in USART_STS | TDCIEN(6) in USART_CTRL1
223#define VSF_USART_IRQ_MASK_TX_IDLE VSF_USART_IRQ_MASK_TX_IDLE
224 // 5: RDBF(5) in USART_STS | RDBFIEN(5) in USART_CTRL1
226 // 11: RTODF(11) in USART_STS | RTODIE(26) in USART_CTRL1
228 // 4: IDLEF(4) in USART_STS | IDLEIEN(4) in USART_CTRL1
231
232 // 9: CTSCF(9) in USART_STS | CTSCFIEN(10) in USART_CTRL3
234
235 // Error interrupt
236 // 1: FERR(1) in USART_STS | ERRIEN(0) in USART_CTRL3
238 // 2: NERR(2) in USART_STS | ERRIEN(0) in USART_CTRL3
240 // 3: ROERR(3) in USART_STS | ERRIEN(0) in USART_CTRL3
242 // 0: PERR(0) in USART_STS | PERRIEN(8) in USART_CTRL1
244 // 8: BFF(8) in USART_STS | BFIEN(6) in USART_CTRL2
246
247 // more vendor specified irq_masks can be added here
248
254#endif
255
256#if VSF_USART_CFG_REIMPLEMENT_TYPE_CTRL == ENABLED
257// By default, the template contains two control commands:
258// - send BREAK signal (self-clearing)
259// - set and clear BREAK signal
260// The driver needs to select and implement according to the hardware support situation.
261typedef enum vsf_usart_ctrl_t {
262 // 0: SBF in USART_CTRL1
265
266 // more vendor specified command can be added here
267
269
270 // not supported
274#endif
275// HW/IPCore end
276
277/*============================ GLOBAL VARIABLES ==============================*/
278/*============================ PROTOTYPES ====================================*/
279
280#ifdef __cplusplus
281}
282#endif
283
284#endif // VSF_HAL_USE_USART
285#endif // __HAL_DRIVER_ARTERY_AT32F402_405_USART_H__
286/* EOF */
vsf_usart_mode_t
Definition uart.h:32
vsf_usart_irq_mask_t
Definition uart.h:106
#define VSF_USART_CTS_HWCONTROL
Definition usart.h:94
#define VSF_USART_HALF_DUPLEX_ENABLE
Definition usart.h:77
@ VSF_USART_HALF_DUPLEX_DISABLE
Definition usart.h:76
@ __VSF_HW_USART_CTRL1_MASK
Definition usart.h:152
@ __VSF_HW_USART_CTRL3_SHIFT_BITS
Definition usart.h:179
@ __VSF_HW_USART_CTRL2_MASK
Definition usart.h:160
@ __VSF_HW_USART_CTRL2_SHIFT_BITS
Definition usart.h:175
@ __VSF_HW_USART_CTRL3_MASK
Definition usart.h:177
@ VSF_USART_NO_HWCONTROL
Definition usart.h:88
#define VSF_USART_RTS_CTS_HWCONTROL
Definition usart.h:95
@ VSF_USART_IRQ_MASK_NOISE_ERR
Definition usart.h:239
@ VSF_USART_IRQ_MASK_RX_OVERFLOW_ERR
Definition usart.h:241
@ __VSF_HW_USART_IRQ_MASK_CTRL1
Definition usart.h:249
@ VSF_USART_IRQ_MASK_FRAME_ERR
Definition usart.h:237
#define VSF_USART_RTS_HWCONTROL
Definition usart.h:93
#define VSF_USART_RX_INV
Definition usart.h:150
vsf_usart_ctrl_t
Definition usart.h:261
#define VSF_USART_TX_INV
Definition usart.h:149
#define VSF_USART_IRQ_MASK_TX_IDLE
Definition usart.h:223
#define VSF_USART_IRQ_MASK_RX_IDLE
Definition usart.h:230
@ 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_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_RTS_CTS_HWCONTROL
Definition usart.h:103
@ VSF_USART_0_5_STOPBIT
Definition usart.h:88
@ VSF_USART_1_5_STOPBIT
Definition usart.h:90
@ 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_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_DISABLE
Definition usart.h:98
@ VSF_USART_8_BIT_LENGTH
Definition usart.h:81
@ VSF_USART_EVEN_PARITY
Definition usart.h:78
@ VSF_USART_ODD_PARITY
Definition usart.h:77
@ VSF_USART_NO_PARITY
Definition usart.h:76
@ VSF_USART_RX_ENABLE
Definition usart.h:71
@ VSF_USART_TX_ENABLE
Definition usart.h:68
#define VSF_USART_9_BIT_LENGTH
Definition usart.h:83
#define VSF_USART_SYNC_CLOCK_POLARITY_HIGH
Definition usart.h:103
#define VSF_USART_RX_FIFO_THRESHOLD_HALF_FULL
Definition usart.h:133
#define VSF_USART_SYNC_CLOCK_PHASE_2_EDGE
Definition usart.h:108
#define VSF_USART_TX_FIFO_THRESHOLD_EMPTY
Definition usart.h:128
#define VSF_USART_TX_DISABLE
Definition usart.h:70
#define VSF_USART_RX_FIFO_THRESHOLD_FULL
Definition usart.h:141
#define VSF_USART_RX_FIFO_THRESHOLD_NOT_EMPTY
Definition usart.h:131
#define VSF_USART_SYNC_CLOCK_LAST_BIT_ENABLE
Definition usart.h:112
#define VSF_USART_SYNC_CLOCK_PHASE_1_EDGE
Definition usart.h:106
#define VSF_USART_SYNC_CLOCK_ENABLE
Definition usart.h:96
#define VSF_USART_RX_DISABLE
Definition usart.h:73
#define VSF_USART_SYNC_CLOCK_LAST_BIT_DISABLE
Definition usart.h:113
#define VSF_USART_TX_FIFO_THRESHOLD_HALF_EMPTY
Definition usart.h:120
#define VSF_USART_TX_FIFO_THRESHOLD_NOT_FULL
Definition usart.h:118
#define VSF_USART_SYNC_CLOCK_POLARITY_LOW
Definition usart.h:101
vsf_usart_mode_t
Definition usart.h:42
@ 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
Generated from commit: vsfteam/vsf@7d3fc53