ELIOT1 HAL
Загрузка...
Поиск...
Не найдено
hal_qspi.h
См. документацию.
1
21#ifndef HAL_QSPI_H
22#define HAL_QSPI_H
23
24#ifdef __cplusplus
25extern "C" {
26#endif
27
28#include "hal_common.h"
29
38
42#if defined(QSPI_DRIVER_VERSION_1_6_0)
43typedef enum _qspi_bit_size_t {
44 QSPI_FRAME_BITS_4 = 0x03,
45 QSPI_FRAME_BITS_5 = 0x04,
46 QSPI_FRAME_BITS_6 = 0x05,
47 QSPI_FRAME_BITS_7 = 0x06,
48 QSPI_FRAME_BITS_8 = 0x07,
49 QSPI_FRAME_BITS_9 = 0x08,
50 QSPI_FRAME_BITS_10 = 0x09,
51 QSPI_FRAME_BITS_11 = 0x0A,
52 QSPI_FRAME_BITS_12 = 0x0B,
53 QSPI_FRAME_BITS_13 = 0x0C,
54 QSPI_FRAME_BITS_14 = 0x0D,
55 QSPI_FRAME_BITS_15 = 0x0E,
56 QSPI_FRAME_BITS_16 = 0x0F,
57 QSPI_FRAME_BITS_17 = 0x10,
58 QSPI_FRAME_BITS_18 = 0x11,
59 QSPI_FRAME_BITS_19 = 0x12,
60 QSPI_FRAME_BITS_20 = 0x13,
61 QSPI_FRAME_BITS_21 = 0x14,
62 QSPI_FRAME_BITS_22 = 0x15,
63 QSPI_FRAME_BITS_23 = 0x16,
64 QSPI_FRAME_BITS_24 = 0x17,
65 QSPI_FRAME_BITS_25 = 0x18,
66 QSPI_FRAME_BITS_26 = 0x19,
67 QSPI_FRAME_BITS_27 = 0x1A,
68 QSPI_FRAME_BITS_28 = 0x1B,
69 QSPI_FRAME_BITS_29 = 0x1C,
70 QSPI_FRAME_BITS_30 = 0x1D,
71 QSPI_FRAME_BITS_31 = 0x1E,
72 QSPI_FRAME_BITS_32 = 0x1F
73} qspi_bit_size_t;
74#elif defined(QSPI_DRIVER_VERSION_2_0_0)
75typedef enum _qspi_bit_size_t {
76 QSPI_FRAME_BITS_4 = 0x00,
77 QSPI_FRAME_BITS_8 = 0x01,
78 QSPI_FRAME_BITS_12 = 0x02,
79 QSPI_FRAME_BITS_16 = 0x03,
80 QSPI_FRAME_BITS_20 = 0x04,
81 QSPI_FRAME_BITS_24 = 0x05,
82 QSPI_FRAME_BITS_28 = 0x06,
83 QSPI_FRAME_BITS_32 = 0x07
84} qspi_bit_size_t;
85#else
86 #error "Please define QSPI controller version"
87#endif
88
89#if defined(QSPI_DRIVER_VERSION_1_6_0)
93typedef enum _qspi_format_spi_t {
94 QSPI_FORMAT_MOTOROLA = 0x00,
95 QSPI_FORMAT_TI = 0x02,
96 QSPI_FORMAT_MICROWIRE = 0x03
97} qspi_format_spi_t;
98#endif
99
103typedef struct _qspi_config {
104 uint32_t delay_en;
105 uint32_t cpol;
106 uint32_t cpha;
107 uint32_t msb;
108 uint32_t cont_trans_en;
111 uint32_t slave_select;
112 uint32_t slave_pol;
113 qspi_bit_size_t bit_size;
114 uint32_t mode;
115 uint32_t dma_en;
116 uint32_t inhibit_din;
117 uint32_t inhibit_dout;
118#if defined(QSPI_DRIVER_VERSION_1_6_0)
119 uint32_t xfer_format;
120#endif
122
126typedef struct _qspi_xip_config {
127 uint32_t cmd;
128 uint32_t hpen;
129 uint32_t cpha;
130 uint32_t cpol;
131 uint32_t addr4;
132 uint32_t le32;
133 uint32_t hp_mode;
134 uint32_t dummy_cycles;
135 uint32_t hp_end_dummy;
137
144uint32_t QSPI_GetInstance(QSPI_Type *base);
145
152
159void QSPI_Init(QSPI_Type *base, const qspi_config_t *config);
160
167void QSPI_SetBitSize(QSPI_Type *base, qspi_bit_size_t bit_size);
168
169#if defined(QSPI_DRIVER_VERSION_1_6_0)
176void QSPI_SetFormatSPI(QSPI_Type *base, qspi_format_spi_t xfer_format);
177#endif
178
185void QSPI_SetQMode(QSPI_Type *base, qspi_qmode_t spi_mode);
186
193void QSPI_SetInhibitDin(QSPI_Type *base, bool inhibit_din);
194
201void QSPI_SetInhibitDout(QSPI_Type *base, bool inhibit_dout);
202
208static inline void QSPI_Enable(QSPI_Type *base)
209{
210#if defined(QSPI_DRIVER_VERSION_1_6_0)
211 base->ENABLE = QSPI_ENABLE_ENABLEREQ_Msk;
212
213 while (base->ENABLE != QSPI_ENABLE_ENABLEREQ_Msk)
214 ;
215#elif defined(QSPI_DRIVER_VERSION_2_0_0)
216 base->ENABLE = QSPI_ENABLE_ENABLE_Msk;
217
218 while (base->ENABLE != QSPI_ENABLE_ENABLE_Msk)
219 ;
220#else
221 #error "Please define QSPI controller version"
222#endif
223}
224
230static inline void QSPI_DeInit(QSPI_Type *base)
231{
232 base->ENABLE = 0x0;
233
234 while (base->ENABLE != 0)
235 ;
236}
237
243static inline void QSPI_EnableDMA(QSPI_Type *base)
244{
245 base->CTRL |= QSPI_CTRL_DMA_Msk;
246}
247
253static inline void QSPI_DisableDMA(QSPI_Type *base)
254{
255 base->CTRL &= ~QSPI_CTRL_DMA_Msk;
256}
257
264static inline uint32_t QSPI_GetStatusFlag(QSPI_Type *base)
265{
266 return base->STAT;
267}
268
275static inline void QSPI_SetSlaveSelect(QSPI_Type *base, uint32_t slave_select)
276{
277 base->SS = slave_select;
278}
279
286static inline void QSPI_EnableInterrupt(QSPI_Type *base, uint32_t mask)
287{
288 base->INTR_EN |= mask;
289}
290
297static inline void QSPI_DisableInterrupt(QSPI_Type *base, uint32_t mask)
298{
299 base->INTR_EN &= ~mask;
300}
301
308static inline void QSPI_ClearInterrupt(QSPI_Type *base, uint32_t mask)
309{
310 base->INTR_CLR = mask;
311}
312
319static inline void QSPI_WriteData(QSPI_Type *base, uint32_t data)
320{
321 base->TX_DATA = data;
322}
323
330static inline void QSPI_WriteDataByte(QSPI_Type *base, uint8_t data)
331{
332 *((volatile uint8_t *)(&(base->TX_DATA))) = data;
333}
334
341static inline uint32_t QSPI_ReadData(QSPI_Type *base)
342{
343 return base->RX_DATA;
344}
345
352static inline uint8_t QSPI_ReadDataByte(QSPI_Type *base)
353{
354 return *((volatile uint8_t *)(&(base->RX_DATA)));
355}
356
363static inline uint32_t QSPI_GetTXLVL(QSPI_Type *base)
364{
365 return base->TX_FIFO_LVL;
366}
367
374static inline uint32_t QSPI_GetRXLVL(QSPI_Type *base)
375{
376 return base->RX_FIFO_LVL;
377}
378
379#ifdef __cplusplus
380}
381#endif
382
383#endif /* HAL_QSPI_H */
384
static void QSPI_Enable(QSPI_Type *base)
Включение контроллера QSPI.
Definition hal_qspi.h:208
uint32_t QSPI_GetInstance(QSPI_Type *base)
Получение номера блока QSPI.
static uint32_t QSPI_ReadData(QSPI_Type *base)
Чтение 32-битного слова из Rx FIFO.
Definition hal_qspi.h:341
static uint32_t QSPI_GetStatusFlag(QSPI_Type *base)
Получение значения статусного регистра
Definition hal_qspi.h:264
static uint32_t QSPI_GetTXLVL(QSPI_Type *base)
Чтение уровня заполнения буфера передачи Tx FIFO.
Definition hal_qspi.h:363
static void QSPI_EnableDMA(QSPI_Type *base)
Включение DMA.
Definition hal_qspi.h:243
void QSPI_SetInhibitDin(QSPI_Type *base, bool inhibit_din)
Установка запрета записи в Tx FIFO.
_qspi_qmode
Режим работы контроллера QSPI.
Definition hal_qspi.h:33
static void QSPI_DisableInterrupt(QSPI_Type *base, uint32_t mask)
Отключение прерываний
Definition hal_qspi.h:297
void QSPI_Init(QSPI_Type *base, const qspi_config_t *config)
Инициализация контроллера QSPI.
static void QSPI_WriteDataByte(QSPI_Type *base, uint8_t data)
Передача байта данных в Tx FIFO.
Definition hal_qspi.h:330
static uint32_t QSPI_GetRXLVL(QSPI_Type *base)
Чтение уровня заполнения буфера приема Rx FIFO.
Definition hal_qspi.h:374
static void QSPI_EnableInterrupt(QSPI_Type *base, uint32_t mask)
Включение прерываний
Definition hal_qspi.h:286
void QSPI_SetBitSize(QSPI_Type *base, qspi_bit_size_t bit_size)
Установка количества передаваемых бит
struct _qspi_config qspi_config_t
Количество бит во фрейме
void QSPI_GetDefaultConfig(qspi_config_t *config)
Получение конфигурации QSPI по умолчанию
struct _qspi_xip_config qspi_xip_config_t
Структура параметров конфигурации XIP контроллера QSPI.
static void QSPI_DeInit(QSPI_Type *base)
Деинициализация контроллера QSPI.
Definition hal_qspi.h:230
static uint8_t QSPI_ReadDataByte(QSPI_Type *base)
Чтение байта данных из Rx FIFO.
Definition hal_qspi.h:352
static void QSPI_ClearInterrupt(QSPI_Type *base, uint32_t mask)
Сброс прерываний
Definition hal_qspi.h:308
void QSPI_SetQMode(QSPI_Type *base, qspi_qmode_t spi_mode)
Установка режима SPI.
void QSPI_SetInhibitDout(QSPI_Type *base, bool inhibit_dout)
Установка запрета чтения из Rx FIFO.
static void QSPI_SetSlaveSelect(QSPI_Type *base, uint32_t slave_select)
Переключение ведомого устройства
Definition hal_qspi.h:275
static void QSPI_DisableDMA(QSPI_Type *base)
Выключение DMA.
Definition hal_qspi.h:253
static void QSPI_WriteData(QSPI_Type *base, uint32_t data)
Передача 32-битного слова в Tx FIFO.
Definition hal_qspi.h:319
enum _qspi_qmode qspi_qmode_t
Режим работы контроллера QSPI.
@ QSPI_QuadSPI
Definition hal_qspi.h:36
@ QSPI_DualSPI
Definition hal_qspi.h:35
@ QSPI_NormalSPI
Definition hal_qspi.h:34
Количество бит во фрейме
Definition hal_qspi.h:103
uint32_t inhibit_dout
Definition hal_qspi.h:117
qspi_qmode_t spi_mode
Definition hal_qspi.h:110
uint32_t slave_select
Definition hal_qspi.h:111
uint32_t slave_pol
Definition hal_qspi.h:112
qspi_bit_size_t bit_size
Definition hal_qspi.h:113
uint16_t cont_transfer_ext
Definition hal_qspi.h:109
uint32_t delay_en
Definition hal_qspi.h:104
uint32_t cpha
Definition hal_qspi.h:106
uint32_t mode
Definition hal_qspi.h:114
uint32_t cont_trans_en
Definition hal_qspi.h:108
uint32_t cpol
Definition hal_qspi.h:105
uint32_t dma_en
Definition hal_qspi.h:115
uint32_t inhibit_din
Definition hal_qspi.h:116
uint32_t msb
Definition hal_qspi.h:107
Структура параметров конфигурации XIP контроллера QSPI.
Definition hal_qspi.h:126
uint32_t cpha
Definition hal_qspi.h:129
uint32_t cmd
Definition hal_qspi.h:127
uint32_t addr4
Definition hal_qspi.h:131
uint32_t le32
Definition hal_qspi.h:132
uint32_t dummy_cycles
Definition hal_qspi.h:134
uint32_t hp_end_dummy
Definition hal_qspi.h:135
uint32_t cpol
Definition hal_qspi.h:130
uint32_t hp_mode
Definition hal_qspi.h:133
uint32_t hpen
Definition hal_qspi.h:128