Описание библиотеки микросхемы 5023ВС016 процессора "Спутник"
uart.h
См. документацию.
1 
29 #ifndef UART_H_
30 #define UART_H_
31 
32 #include "types.h"
33 #include "ringbuffer.h"
34 
35 #define UART_DR_MASK_DATA ((uint32_t)(0x00FF))
39 typedef struct
40 {
41  __RW uint32_t DR;
42  __RW uint32_t RSR_ECR;
43  uint32_t RESERVED0[4];
44  __RO uint32_t FR;
45  uint32_t RESERVED1[2];
46  __RW uint32_t IBRD;
47  __RW uint32_t FBRD;
48  __RW uint32_t LCR_H;
49  __RW uint32_t CR;
50  __RW uint32_t IFLS;
51  __RW uint32_t IMSC;
52  __RO uint32_t RIS;
53  __RO uint32_t MIS;
54  __WO uint32_t ICR;
55  __RW uint32_t DMACR;
56 }UART_T;
57 
61 #define UART_DR_DATA(x) ((uint32_t)((x) & 0xFF))
62 #define UART_DR_FE ((uint32_t)(1 << 8))
63 #define UART_DR_PE ((uint32_t)(1 << 9))
64 #define UART_DR_BE ((uint32_t)(1 << 10))
65 #define UART_DR_OE ((uint32_t)(1 << 11))
66 //#define UART_DR_MASK_DATA ((uint32_t)(0x00FF))
71 typedef enum
72 {
73  UART_RSR_FE = ((uint32_t)(1 << 0)),
74  UART_RSR_PE = ((uint32_t)(1 << 1)),
75  UART_RSR_BE = ((uint32_t)(1 << 2)),
76  UART_RSR_OE = ((uint32_t)(1 << 3)),
78 
82 typedef enum
83 {
84  UART_FR_BUSY = ((uint32_t)(1 << 3)),
85  UART_FR_RXFE = ((uint32_t)(1 << 4)),
86  UART_FR_TXFF = ((uint32_t)(1 << 5)),
87  UART_FR_RXFF = ((uint32_t)(1 << 6)),
88  UART_FR_TXFE = ((uint32_t)(1 << 7)),
89  UART_FR_RI = ((uint32_t)(1 << 8)),
91 
95 #define UART_IBRD_BAUDDIV_INT(x) ((uint32_t)(x & 0xFFFF))
100 #define UART_FBRD_BAUDDIV_FRAC(x) ((uint32_t)(x & 0x1F))
105 #define UART_LCR_H_BRK ((uint32_t)(1 << 0))
106 #define UART_LCR_H_PEN ((uint32_t)(1 << 1))
107 #define UART_LCR_H_PDIS ((uint32_t)(0 << 1))
108 #define UART_LCR_H_EPS_EVEN ((uint32_t)(1 << 2))
109 #define UART_LCR_H_EPS_ODD ((uint32_t)(0 << 2))
110 #define UART_LCR_H_STP2 ((uint32_t)(1 << 3))
111 #define UART_LCR_H_STP1 ((uint32_t)(0 << 3))
112 #define UART_LCR_H_FEN ((uint32_t)(1 << 4))
113 #define UART_LCR_H_FDIS ((uint32_t)(0 << 4))
115 typedef enum
116 {
117  UART_LCR_H_WLEN5 = ((uint32_t)(0 << 5)),
118  UART_LCR_H_WLEN6 = ((uint32_t)(1 << 5)),
119  UART_LCR_H_WLEN7 = ((uint32_t)(2 << 5)),
120  UART_LCR_H_WLEN8 = ((uint32_t)(3 << 5)),
121 }UART_WLEN;
122 
123 #define UART_LCR_H_SPS_EN ((uint32_t)(1 << 7))
124 #define UART_LCR_H_SPS_DIS ((uint32_t)(0 << 7))
126 /*
127  * @brief Макросы для регистра UARTx_CR
128  */
129 #define UART_CR_UARTEN ((uint32_t)(1 << 0))
130 #define UART_CR_LBE ((uint32_t)(1 << 7))
131 #define UART_CR_TXE ((uint32_t)(1 << 8))
132 #define UART_CR_RXE ((uint32_t)(1 << 9))
133 #define UART_CR_BITMASK ((uint32_t)(0x381))
134 
138 typedef enum
139 {
140  UART_IFLS_1DIV8 = ((uint32_t)(0 << 0)),
141  UART_IFLS_1DIV4 = ((uint32_t)(1 << 0)),
142  UART_IFLS_1DIV2 = ((uint32_t)(2 << 0)),
143  UART_IFLS_3DIV4 = ((uint32_t)(3 << 0)),
144  UART_IFLS_7DIV8 = ((uint32_t)(4 << 0)),
145 }UART_IFLS;
146 
150 typedef enum
151 {
152  UART_IMSC_RXIM = ((uint32_t)(1 << 4)),
153  UART_IMSC_TXIM = ((uint32_t)(1 << 5)),
154  UART_IMSC_RTIM = ((uint32_t)(1 << 6)),
155  UART_IMSC_FEIM = ((uint32_t)(1 << 7)),
156  UART_IMSC_PEIM = ((uint32_t)(1 << 8)),
157  UART_IMSC_BEIM = ((uint32_t)(1 << 9)),
158  UART_IMSC_OEIM = ((uint32_t)(1 << 10)),
159  UART_IMSC_BITMASK = ((uint32_t)(0x7F << 4)),
161 
165 typedef enum
166 {
167  UART_RIS_RXRIS = ((uint32_t)(1 << 4)),
168  UART_RIS_TXRIS = ((uint32_t)(1 << 5)),
169  UART_RIS_RTRIS = ((uint32_t)(1 << 6)),
170  UART_RIS_FERIS = ((uint32_t)(1 << 7)),
171  UART_RIS_PERIS = ((uint32_t)(1 << 8)),
172  UART_RIS_BERIS = ((uint32_t)(1 << 9)),
173  UART_RIS_OERIS = ((uint32_t)(1 << 10)),
174  UART_RIS_BITMASK = ((uint32_t)(0x7F << 4)),
176 
180 typedef enum
181 {
182  UART_MIS_RXMIS = ((uint32_t)(1 << 4)),
183  UART_MIS_TXMIS = ((uint32_t)(1 << 5)),
184  UART_MIS_RTMIS = ((uint32_t)(1 << 6)),
185  UART_MIS_FEMIS = ((uint32_t)(1 << 7)),
186  UART_MIS_PEMIS = ((uint32_t)(1 << 8)),
187  UART_MIS_BEMIS = ((uint32_t)(1 << 9)),
188  UART_MIS_OEMIS = ((uint32_t)(1 << 10)),
189  UART_MIS_BITMASK = ((uint32_t)(0x7F << 4)),
191 
195 typedef enum
196 {
197  UART_ICR_RXIC = ((uint32_t)(1 << 4)),
198  UART_ICR_TXIC = ((uint32_t)(1 << 5)),
199  UART_ICR_RTIC = ((uint32_t)(1 << 6)),
200  UART_ICR_FEIC = ((uint32_t)(1 << 7)),
201  UART_ICR_PEIC = ((uint32_t)(1 << 8)),
202  UART_ICR_BEIC = ((uint32_t)(1 << 9)),
203  UART_ICR_OEIC = ((uint32_t)(1 << 10)),
204  UART_ICR_BITMASK = ((uint32_t)(0x7F << 4)),
206 
210 typedef enum
211 {
212  UART_DMACR_RXDMAE = ((uint32_t)(1 << 0)),
213  UART_DMACR_TXDMAE = ((uint32_t)(1 << 1)),
214  UART_DMACR_DMAONERR = ((uint32_t)(1 << 2)),
215  UART_DMACR_BITMASK = ((uint32_t)(3 << 0)),
216 }UART_DMACR_T;
217 
218 #define UART_DMACR_DMAONERR ((uint32_t)(1 << 2))
219 #define BAUDRATE_921600 (921600)
220 #define BAUDRATE_460800 (460800)
221 #define BAUDRATE_230400 (230400)
222 #define BAUDRATE_115200 (115200)
223 #define BAUDRATE_57600 (57600)
224 #define BAUDRATE_38400 (38400)
225 #define BAUDRATE_19200 (19200)
226 #define BAUDRATE_14400 (14400)
227 #define BAUDRATE_9600 (9600)
228 #define BAUDRATE_2400 (2400)
229 #define BAUDRATE_1200 (1200)
230 #define BAUDRATE_110 (110)
237  void UART_TXEnable(UART_T *pUART);
238 
243  void UART_TXDisable(UART_T *pUART);
244 
249  void UART_RXEnable(UART_T *pUART);
250 
255  void UART_RXDisable(UART_T *pUART);
256 
261  void UART_Enable(UART_T *pUART);
262 
267  void UART_Disable(UART_T *pUART);
268 
274  void UART_SendByte(UART_T *pUART, uint8_t data);
275 
276 
282  uint8_t UART_ReadByte(UART_T *pUART);
283 
297  void UART_IntEnable(UART_T *pUART, UART_INTMASK_T IntMask);
298 
312  void UART_IntDisable(UART_T *pUART, UART_INTMASK_T IntMask);
313 
327  uint32_t UART_GetRawIntStatus(UART_T *pUART, UART_MASKINTSTATUS_T MaskInt);
328 
342  uint32_t UART_GetIntStatus(UART_T *pUART, UART_MASKINTSTATUS_T MaskInt);
343 
357  void UART_ClearIntPending(UART_T *pUART, UART_INTCLEAR_T IntClear);
358 
365  void UART_SetupFIFOS(UART_T *pUART, UART_IFLS rxfifolimit, UART_IFLS txfifolimit);
366 
372  void UART_Config(UART_T *pUART, uint32_t config);
373 
380  void UART_SetDivisor(UART_T *pUART, uint32_t IBRD, uint32_t FBRD);
381 
396 
401 void UART_Init(UART_T *pUART);
402 
407 void UART_DeInit(UART_T *pUART);
408 
415 uint32_t UART_SetBaud(UART_T *pUART, uint32_t baud,const uint32_t sys_freq);
416 
424 uint32_t UART_Send(UART_T *pUART, const void *data, uint32_t numBytes);
425 
433 uint32_t UART_Read(UART_T *pUART, void *data, uint32_t numBytes);
434 
442 uint32_t UART_SendBlocking(UART_T *pUART, const void *data, uint32_t numBytes);
443 
451 uint32_t UART_ReadBlocking(UART_T *pUART, void *data, uint32_t numBytes);
452 
458 void UART_RXIntHandlerRB(UART_T *pUART, RINGBUFF_T *pRB);
459 
465 void UART_TXIntHandlerRB(UART_T *pUART, RINGBUFF_T *pRB);
466 
473 void UART_IRQRBHandler(UART_T *pUART, RINGBUFF_T *pRXRB, RINGBUFF_T *pTXRB);
474 
483 uint32_t UART_SendRB(UART_T *pUART, RINGBUFF_T *pRB, const void *data, uint32_t bytes);
484 
493 uint32_t UART_ReadRB(UART_T *pUART, RINGBUFF_T *pRB, void *data, uint32_t bytes);
494 
495 
496 #endif
Этот файл содержит структуры, макросы и функции необходимые для взаимодействия с кольцевыми буферами...
UART_WLEN
Definition: uart.h:115
UART_STATUS_T
Макросы и типы для регистра FR.
Definition: uart.h:82
Этот файл содержит структуры, макросы и функции необходимые для работы с дополнительными типами...
uint32_t UART_Read(UART_T *pUART, void *data, uint32_t numBytes)
Прием массива байт по UART&#39;у, без ожидания заполнения указанного массива полностью ...
Definition: uart.c:353
#define __RW
Definition: types.h:39
__RW uint32_t IBRD
Definition: uart.h:46
void UART_Enable(UART_T *pUART)
Разрешение работы UART.
Definition: uart.c:303
void UART_RXEnable(UART_T *pUART)
Разрешение работы приемника
Definition: uart.c:312
uint32_t UART_SendBlocking(UART_T *pUART, const void *data, uint32_t numBytes)
Передача массива байт по UART&#39;у, с ожиданием освобождения FIFO передатчика
Definition: uart.c:338
uint32_t UART_GetRawIntStatus(UART_T *pUART, UART_MASKINTSTATUS_T MaskInt)
Получение статуса прерывания
Definition: uart.c:176
void UART_Init(UART_T *pUART)
Инициализация UART.
Definition: uart.c:93
#define __RO
Definition: types.h:37
void UART_IntEnable(UART_T *pUART, UART_INTMASK_T IntMask)
Разрешение прерываний по UART&#39;у
Definition: uart.c:222
void UART_DeInit(UART_T *pUART)
Деинициализация UART.
Definition: uart.c:108
uint32_t UART_ReadBlocking(UART_T *pUART, void *data, uint32_t numBytes)
Прием массива байт по UART&#39;у, с ожиданием заполнения указанного массива полностью ...
Definition: uart.c:368
void UART_TXIntHandlerRB(UART_T *pUART, RINGBUFF_T *pRB)
Обработчик прерывания UART по передаче данных для кольцевых буферов
Definition: uart.c:395
__RO uint32_t MIS
Definition: uart.h:53
#define UART_DMACR_DMAONERR
Definition: uart.h:218
uint32_t UART_SendRB(UART_T *pUART, RINGBUFF_T *pRB, const void *data, uint32_t bytes)
Запись данных в кольцевой буфер и начало передачи
Definition: uart.c:411
#define __WO
Definition: types.h:38
UART_REC_STATUS_T
Макросы и типы для регистра RSR_ECR.
Definition: uart.h:71
__RW uint32_t LCR_H
Definition: uart.h:48
uint32_t UART_GetIntStatus(UART_T *pUART, UART_MASKINTSTATUS_T MaskInt)
Получение статуса маскированного прерывания
Definition: uart.c:145
FlagStatus UART_GetStatus(UART_T *pUART, UART_STATUS_T Stat)
Получение текущего статуса UART контроллера
Definition: uart.c:251
uint32_t UART_SetBaud(UART_T *pUART, uint32_t baud, const uint32_t sys_freq)
Установка целой и дробной частей делителя для получения заданной скорости последовательного обмена ...
Definition: uart.c:456
__RW uint32_t DMACR
Definition: uart.h:55
FlagStatus
Тип для состояний флагов
Definition: types.h:64
uint8_t UART_ReadByte(UART_T *pUART)
Прием одного байта по UART&#39;у
Definition: uart.c:204
uint32_t UART_Send(UART_T *pUART, const void *data, uint32_t numBytes)
Передача массива байт по UART&#39;у, без ожидания освобождения FIFO передатчика
Definition: uart.c:257
__RW uint32_t DR
Definition: uart.h:41
Структура кольцевого буфера
Definition: ringbuffer.h:39
UART_MASKINTSTATUS_T
Макросы и типы для регистра UARTx_MIS.
Definition: uart.h:180
void UART_RXDisable(UART_T *pUART)
запрещение работы приемника
Definition: uart.c:321
__RO uint32_t RIS
Definition: uart.h:52
void UART_IRQRBHandler(UART_T *pUART, RINGBUFF_T *pRXRB, RINGBUFF_T *pTXRB)
Обработчик прерывания UART по приему/передаче данных для кольцевых буферов
Definition: uart.c:439
void UART_TXDisable(UART_T *pUART)
запрещение работы передатчика
Definition: uart.c:293
void UART_SetupFIFOS(UART_T *pUART, UART_IFLS rxfifolimit, UART_IFLS txfifolimit)
Установка порогов прерываний по заполнению буфера приемника/передатчика
Definition: uart.c:126
__RW uint32_t FBRD
Definition: uart.h:47
UART_INTSTATUS_T
Макросы и типы для регистра UARTx_RIS.
Definition: uart.h:165
void UART_IntDisable(UART_T *pUART, UART_INTMASK_T IntMask)
Запрещение прерываний по UART&#39;у
Definition: uart.c:194
UART_DMACR_T
Макросы и типы для регистра UARTx_DMACR.
Definition: uart.h:210
const unsigned int sys_freq
Definition: main.c:31
__WO uint32_t ICR
Definition: uart.h:54
__RW uint32_t CR
Definition: uart.h:49
void UART_Disable(UART_T *pUART)
запрещение работы UART.
Definition: uart.c:275
void UART_SendByte(UART_T *pUART, uint8_t data)
Передача одного байта по UART&#39;у
Definition: uart.c:331
__RW uint32_t IFLS
Definition: uart.h:50
Структура для доступа к регистрам UART.
Definition: uart.h:39
__RO uint32_t FR
Definition: uart.h:44
void UART_RXIntHandlerRB(UART_T *pUART, RINGBUFF_T *pRB)
Обработчик прерывания UART по приему данных для кольцевых буферов
Definition: uart.c:385
uint32_t UART_ReadRB(UART_T *pUART, RINGBUFF_T *pRB, void *data, uint32_t bytes)
Чтение данных из кольцевого буфера после приема
Definition: uart.c:432
__RW uint32_t IMSC
Definition: uart.h:51
UART_IFLS
Тип UART_IFLS для регистра UARTx_IFLS.
Definition: uart.h:138
__RW uint32_t RSR_ECR
Definition: uart.h:42
void UART_Config(UART_T *pUART, uint32_t config)
Установка длины слова данных, числа стоповых бит и контроля четности
Definition: uart.c:232
UART_INTCLEAR_T
Макросы и типы для регистра UARTx_ICR.
Definition: uart.h:195
UART_INTMASK_T
Макросы и типы для регистра UARTx_IMSC.
Definition: uart.h:150
void UART_SetDivisor(UART_T *pUART, uint32_t IBRD, uint32_t FBRD)
Установка делителя скорости передачи данных
Definition: uart.c:157
void UART_ClearIntPending(UART_T *pUART, UART_INTCLEAR_T IntClear)
Сброс флагов прерываний
Definition: uart.c:87