summaryrefslogtreecommitdiff
path: root/bsp/Vango/v85xxp/libraries/VangoV85xxP_standard_peripheral/Include/lib_u32k.h
blob: 546d390a861dcde4f37b169ad182dec12c1d471f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
/**
  ******************************************************************************
  * @file    lib_u32k.h 
  * @author  Application Team
  * @version V1.1.0
  * @date    2019-10-28
  * @brief   UART 32K library.
  ******************************************************************************
  * @attention
  *
  ******************************************************************************
  */
#ifndef __LIB_U32K_H
#define __LIB_U32K_H

#ifdef __cplusplus
 extern "C" {
#endif

#include "target.h"
   
typedef struct
{
  uint32_t Debsel;
  uint32_t Parity;
  uint32_t FirstBit;
  uint32_t AutoCal;
  uint32_t Baudrate;
  uint32_t LineSel;
} U32K_InitType;

/**************  Bits definition for U32Kx_CTRL0 register    ******************/
#define U32K_CTRL0_PMODE_EVEN         (0x0U << U32K_CTRL0_PMODE_Pos)           /*!< 0x00000000 */
#define U32K_CTRL0_PMODE_ODD          (0x1U << U32K_CTRL0_PMODE_Pos)           /*!< 0x00000010 */
#define U32K_CTRL0_PMODE_0            (0x2U << U32K_CTRL0_PMODE_Pos)           /*!< 0x00000020 */
#define U32K_CTRL0_PMODE_1            (0x3U << U32K_CTRL0_PMODE_Pos)           /*!< 0x00000030 */
#define U32K_CTRL0_DEBSEL_0           (0x0U << U32K_CTRL0_DEBSEL_Pos)          /*!< 0x00000000 */
#define U32K_CTRL0_DEBSEL_1           (0x1U << U32K_CTRL0_DEBSEL_Pos)          /*!< 0x00000040 */
#define U32K_CTRL0_DEBSEL_2           (0x2U << U32K_CTRL0_DEBSEL_Pos)          /*!< 0x00000080 */
#define U32K_CTRL0_DEBSEL_3           (0x3U << U32K_CTRL0_DEBSEL_Pos)          /*!< 0x000000C0 */

/**************  Bits definition for U32Kx_CTRL1 register    ******************/
#define U32K_CTRL1_RXSEL_RX0          (0x0U << U32K_CTRL1_RXSEL_Pos)           /*!< 0x00000000 */
#define U32K_CTRL1_RXSEL_RX1          (0x1U << U32K_CTRL1_RXSEL_Pos)           /*!< 0x00000010 */
#define U32K_CTRL1_RXSEL_RX2          (0x2U << U32K_CTRL1_RXSEL_Pos)           /*!< 0x00000020 */
#define U32K_CTRL1_RXSEL_RX3          (0x3U << U32K_CTRL1_RXSEL_Pos)           /*!< 0x00000030 */
//Debsel
#define U32K_DEBSEL_0   (0x0U << U32K_CTRL0_DEBSEL_Pos)
#define U32K_DEBSEL_1   (0x1U << U32K_CTRL0_DEBSEL_Pos)
#define U32K_DEBSEL_2   (0x2U << U32K_CTRL0_DEBSEL_Pos)
#define U32K_DEBSEL_3   (0x3U << U32K_CTRL0_DEBSEL_Pos)
//Parity
#define U32K_PARITY_EVEN    (0x1U << U32K_CTRL0_PMODE_Pos)
#define U32K_PARITY_ODD     (0x3U << U32K_CTRL0_PMODE_Pos)
#define U32K_PARITY_0       (0x5U << U32K_CTRL0_PMODE_Pos)
#define U32K_PARITY_1       (0x7U << U32K_CTRL0_PMODE_Pos)
#define U32K_PARITY_NONE    (0x0U << U32K_CTRL0_PMODE_Pos)
//FirstBit
#define U32K_FIRSTBIT_LSB   0
#define U32K_FIRSTBIT_MSB   (0x1U << U32K_CTRL0_MSB_Pos)
//AutoCal
#define U32K_AUTOCAL_ON     0
#define U32K_AUTOCAL_OFF    (0x1U << U32K_CTRL0_ACOFF_Pos)
//Line
#define U32K_LINE_RX0       (0x0U << U32K_CTRL1_RXSEL_Pos)
#define U32K_LINE_RX1       (0x1U << U32K_CTRL1_RXSEL_Pos)
#define U32K_LINE_RX2       (0x2U << U32K_CTRL1_RXSEL_Pos)
#define U32K_LINE_RX3       (0x3U << U32K_CTRL1_RXSEL_Pos)

//INT
#define U32K_INT_RXOV       (0x1U << U32K_CTRL1_RXOVIE_Pos)
#define U32K_INT_RXPE       (0x1U << U32K_CTRL1_RXPEIE_Pos)
#define U32K_INT_RX         (0x1U << U32K_CTRL1_RXIE_Pos)
#define U32K_INT_Msk        (U32K_INT_RXOV \
                            |U32K_INT_RXPE \
                            |U32K_INT_RX)

//INT Status
#define U32K_INTSTS_RXOV       (0x1U << U32K_STS_RXOV_Pos)
#define U32K_INTSTS_RXPE       (0x1U << U32K_STS_RXPE_Pos)
#define U32K_INTSTS_RX         (0x1U << U32K_STS_RXIF_Pos)
#define U32K_INTSTS_Msk        (U32K_INTSTS_RXOV \
                               |U32K_INTSTS_RXPE \
                               |U32K_INTSTS_RX)

//WKUMode
#define U32K_WKUMOD_RX  0                                // Wake-up when receive data
#define U32K_WKUMOD_PC  (0x1U << U32K_CTRL0_WKUMODE_Pos) // Wake-up when receive data and parity/stop bit correct 
                   

/****************************** U32K Instances ********************************/
#define IS_U32K_ALL_INSTANCE(INSTANCE) (((INSTANCE) == U32K0) || \
                                        ((INSTANCE) == U32K1))

/* Private macros ------------------------------------------------------------*/
#define IS_U32K_DEBSEL(__DEBSEL__)  (((__DEBSEL__) == U32K_DEBSEL_0) ||\
                                     ((__DEBSEL__) == U32K_DEBSEL_1) ||\
                                     ((__DEBSEL__) == U32K_DEBSEL_2) ||\
                                     ((__DEBSEL__) == U32K_DEBSEL_3))

#define IS_U32K_PARITY(__PARITY__)  (((__PARITY__) == U32K_PARITY_EVEN) ||\
                                     ((__PARITY__) == U32K_PARITY_ODD)  ||\
                                     ((__PARITY__) == U32K_PARITY_0)    ||\
                                     ((__PARITY__) == U32K_PARITY_1)    ||\
                                     ((__PARITY__) == U32K_PARITY_NONE))

#define IS_U32K_WORDLEN(__WORDLEN__)  (((__WORDLEN__) == U32K_WORDLEN_8B) || ((__WORDLEN__) == U32K_WORDLEN_9B))
  
#define IS_U32K_FIRSTBIT(__FIRSTBIT__)  (((__FIRSTBIT__) == U32K_FIRSTBIT_LSB) || ((__FIRSTBIT__) == U32K_FIRSTBIT_MSB))

#define IS_U32K_AUTOCAL(__AUTOCAL__)  (((__AUTOCAL__) == U32K_AUTOCAL_ON) || ((__AUTOCAL__) == U32K_AUTOCAL_OFF))

#define IS_U32K_LINE(__LINE__)  (((__LINE__) == U32K_LINE_RX0) ||\
                                 ((__LINE__) == U32K_LINE_RX1) ||\
                                 ((__LINE__) == U32K_LINE_RX2) ||\
                                 ((__LINE__) == U32K_LINE_RX3))

#define IS_U32K_BAUDRATE(__BAUDRATE__)  ((300UL <= (__BAUDRATE__)) &&\
                                        ((__BAUDRATE__) <= 14400UL))

#define IS_U32K_INT(__INT__)  ((((__INT__) & U32K_INT_Msk) != 0U) &&\
                               (((__INT__) & ~U32K_INT_Msk) == 0U))

#define IS_U32K_INTFLAGR(__INTFLAGR__)  (((__INTFLAGR__) == U32K_INTSTS_RXOV) ||\
                                         ((__INTFLAGR__) == U32K_INTSTS_RXPE) ||\
                                         ((__INTFLAGR__) == U32K_INTSTS_RX))

#define IS_U32K_INTFLAGC(__INTFLAGC__)  ((((__INTFLAGC__) & U32K_INTSTS_Msk) != 0U) &&\
                                         (((__INTFLAGC__) & ~U32K_INTSTS_Msk) == 0U))

#define IS_U32K_WKUMODE(__WKUMODE__)  (((__WKUMODE__) == U32K_WKUMOD_RX) || ((__WKUMODE__) == U32K_WKUMOD_PC))

/* Exported Functions ------------------------------------------------------- */
/* U32K Exported Functions Group1: 
                                   (De)Initialization  -----------------------*/
void U32K_DeInit(U32K_Type *U32Kx);
void U32K_Init(U32K_Type *U32Kx, U32K_InitType *InitStruct);
void U32K_StructInit(U32K_InitType *InitStruct);
/* U32K Exported Functions Group2: 
                                   Interrupt (flag) configure  ---------------*/
void U32K_INTConfig(U32K_Type *U32Kx, uint32_t INTMask, uint8_t NewState);
uint8_t U32K_GetINTStatus(U32K_Type *U32Kx, uint32_t INTMask);
void U32K_ClearINTStatus(U32K_Type *U32Kx, uint32_t INTMask);
/* U32K Exported Functions Group3: 
                                   Receive datas -----------------------------*/
uint8_t U32K_ReceiveData(U32K_Type *U32Kx);
/* U32K Exported Functions Group4: 
                                   MISC Configuration -------- ---------------*/
void U32K_BaudrateConfig(U32K_Type *U32Kx, uint32_t BaudRate);
void U32K_Cmd(U32K_Type *U32Kx, uint32_t NewState);
void U32K_LineConfig(U32K_Type *U32Kx, uint32_t Line);
void U32K_WKUModeConfig(U32K_Type *U32Kx, uint32_t WKUMode);
                           
#ifdef __cplusplus
}
#endif
     
#endif  /* __LIB_U32K_H */

/*********************************** END OF FILE ******************************/