Описание библиотеки микросхемы 5023ВС016 процессора "Спутник"
spi.h
См. документацию.
1 
29 #ifndef SPI_H
30 #define SPI_H
31 #include "types.h"
32 #include "system.h"
33 
34 
38 typedef struct
39 {
40  __RW uint32_t CR0;
41  __RW uint32_t CR1;
42  __RW uint32_t DR;
43  __RO uint32_t SR;
44  __RW uint32_t CPSR;
45  __RW uint32_t IMSC;
46  __RO uint32_t RIS;
47  __RO uint32_t MIS;
48  __WO uint32_t ICR;
49  __RW uint32_t DMACR;
50 }SPI_T;
51 
55 #define SPI_CR0_DSS(x) ((uint32_t)((x) & 0x0F))
56 #define SPI_CR0_SCR(x) ((uint32_t)((x & 0xFF) << 8))
58 typedef enum
59 {
60  SPI_BITS_4 = ((uint32_t)(3 << 0)),
61  SPI_BITS_5 = ((uint32_t)(4 << 0)),
62  SPI_BITS_6 = ((uint32_t)(5 << 0)),
63  SPI_BITS_7 = ((uint32_t)(6 << 0)),
64  SPI_BITS_8 = ((uint32_t)(7 << 0)),
65  SPI_BITS_9 = ((uint32_t)(8 << 0)),
66  SPI_BITS_10 = ((uint32_t)(9 << 0)),
67  SPI_BITS_11 = ((uint32_t)(10 << 0)),
68  SPI_BITS_12 = ((uint32_t)(11 << 0)),
69  SPI_BITS_13 = ((uint32_t)(12 << 0)),
70  SPI_BITS_14 = ((uint32_t)(13 << 0)),
71  SPI_BITS_15 = ((uint32_t)(14 << 0)),
72  SPI_BITS_16 = ((uint32_t)(15 << 0)),
73 }SPI_BITS_T;
74 
75 typedef enum
76 {
77  SPI_FRF_SPI = ((uint32_t)(0 << 4)),
78  SPI_FRF_TI = ((uint32_t)(1 << 4)),
79  SPI_FRF_MICROWIRE = ((uint32_t)(2 << 4)),
81 
82 typedef enum {
83  SPI_CLOCK_SPH0_SPO0 = ((uint32_t)(0 << 6)),
84  SPI_CLOCK_SPH0_SPO1 = ((uint32_t)(1 << 6)),
85  SPI_CLOCK_SPH1_SPO0 = ((uint32_t)(2 << 6)),
86  SPI_CLOCK_SPH1_SPO1 = ((uint32_t)(3 << 6)),
92 
96 #define SPI_CR1_LBM_EN ((uint32_t)(1 << 0))
97 #define SPI_CR1_SSE_EN ((uint32_t)(1 << 1))
98 #define SPI_CR1_SOD_DIS ((uint32_t)(1 << 3))
99 #define SPI_CR1_BITMASK ((uint32_t)(0x0F))
100 
101 typedef enum
102 {
103  SPI_MODE_MS_MASTER = ((uint32_t)(0 << 2)),
104  SPI_MODE_MS_SLAVE = ((uint32_t)(1 << 2)),
105 }SPI_MODE_T;
106 
110 #define SPI_DR_DATA(x) ((uint32_t)((x) & 0xFFFF))
115 typedef enum
116 {
117  SPI_SR_TFE = ((uint32_t)(1 << 0)),
118  SPI_SR_TNF = ((uint32_t)(1 << 1)),
119  SPI_SR_RNE = ((uint32_t)(1 << 2)),
120  SPI_SR_RFF = ((uint32_t)(1 << 3)),
121  SPI_SR_BSY = ((uint32_t)(1 << 4)),
122 }SPI_STATUS_T;
123 
127 #define SPI_CPSR_CPSDVSR(x) (x & 0xFF)
132 typedef enum
133 {
134  SPI_IMSC_RORIM = ((uint32_t)(1 << 0)),
135  SPI_IMSC_RTIM = ((uint32_t)(1 << 1)),
136  SPI_IMSC_RXIM = ((uint32_t)(1 << 2)),
137  SPI_IMSC_TXIM = ((uint32_t)(1 << 3)),
138  SPI_IMSC_BITMASK = ((uint32_t)(0xF << 0)),
140 
144 typedef enum
145 {
146  SPI_RIS_RORRIS = ((uint32_t)(1 << 0)),
147  SPI_RIS_RTRIS = ((uint32_t)(1 << 1)),
148  SPI_RIS_RXRIS = ((uint32_t)(1 << 2)),
149  SPI_RIS_TXRIS = ((uint32_t)(1 << 3)),
151 
155 typedef enum
156 {
157  SPI_MIS_RORMIS = ((uint32_t)(1 << 0)),
158  SPI_MIS_RTMIS = ((uint32_t)(1 << 1)),
159  SPI_MIS_RXMIS = ((uint32_t)(1 << 2)),
160  SPI_MIS_TXMIS = ((uint32_t)(1 << 3)),
162 
166 typedef enum
167 {
168  SPI_ICR_RORIC = ((uint32_t)(1 << 0)),
169  SPI_ICR_RTIC = ((uint32_t)(1 << 1)),
170  SPI_ICR_BITMASK = ((uint32_t)(3 << 0)),
172 
176 typedef enum
177 {
178  SPI_DMACR_RXDMAE = ((uint32_t)(1 << 0)),
179  SPI_DMACR_TXDMAE = ((uint32_t)(1 << 1)),
180  SPI_DMACR_BITMASK = ((uint32_t)(3 << 0)),
181 }SPI_DMACR_T;
182 
186 typedef struct
187 {
189  SPI_CLOCK_MODE_T clockMode;
191 }SPI_CONFIG_T;
192 
196 typedef struct
197 {
198  void *tx_data;
199  uint32_t tx_cnt;
200  void *rx_data;
201  uint32_t rx_cnt;
202  uint32_t length;
204 
206 #define SPI_Enable(gl_spi_t) (((SPI_T *)gl_spi_t)->CR1 |= SPI_CR1_SSE_EN)
207 
209 #define SPI_Disable(gl_spi_t) (((SPI_T *)gl_spi_t)->CR1 &= (~SPI_CR1_SSE_EN) & SPI_CR1_BITMASK)
210 
212 #define SPI_LoopBackEnable(gl_spi_t) (((SPI_T *)gl_spi_t)->CR1 |= SPI_CR1_LBM_EN)
213 
215 #define SPI_DMA_Enable(gl_spi_t) (((SPI_T *)gl_spi_t)->DMACR |= SPI_DMACR_BITMASK)
216 
218 #define SPI_DMA_Disable(gl_spi_t) (((SPI_T *)gl_spi_t)->DMACR &= ~SPI_DMACR_BITMASK)
219 
221 #define SPI_TXInt_Enable(gl_spi_t) (((SPI_T *)gl_spi_t)->IMSC |= SPI_IMSC_TXIM)
222 
224 #define SPI_TXInt_Disable(gl_spi_t) (((SPI_T *)gl_spi_t)->IMSC &= (~SPI_IMSC_TXIM) & SPI_IMSC_BITMASK)
225 
227 #define SPI_RXInt_Enable(gl_spi_t) (((SPI_T *)gl_spi_t)->IMSC |= SPI_IMSC_RXIM)
228 
230 #define SPI_RXInt_Disable(gl_spi_t) (((SPI_T *)gl_spi_t)->IMSC &= (~SPI_IMSC_RXIM) & SPI_IMSC_BITMASK)
231 
237 #define SPI_ClearIntPending(gl_spi_t,gl_spi_intclr) (((SPI_T *)gl_spi_t)->ICR = (SPI_INTCLEAR_T)gl_spi_intclr)
238 
244 void SPI_DeInit(SPI_T *pSPI);
245 
251 void SPI_Init(SPI_T *pSPI);
252 
259 
277 void SPI_SetFormat(SPI_T *pSPI, uint32_t pbits, uint32_t pframeFormat, uint32_t pclockMode);
278 
288 void SPI_Set_Mode(SPI_T *pSPI, uint32_t pmode);
289 
297 void SPI_SetClockRate(SPI_T *pSPI, uint32_t clk_rate, uint32_t prescale);
298 
305 void SPI_SetBitRate(SPI_T *pSPI, uint32_t bitRate);
306 
312 inline uint8_t SPI_GetDataSize(SPI_T *pSPI);
313 
320 void SPI_SendFrame(SPI_T *pSPI, uint16_t tx_data);
321 
327 uint16_t SPI_ReceiveFrame(SPI_T *pSPI);
328 
335 void SPI_Write1BFifo(SPI_T *pSPI, SPI_DATA_SETUP_T *xf_setup);
342 void SPI_Read1BFifo(SPI_T *pSPI, SPI_DATA_SETUP_T *xf_setup);
343 
350 void SPI_Write2BFifo(SPI_T *pSPI, SPI_DATA_SETUP_T *xf_setup);
357 void SPI_Read2BFifo(SPI_T *pSPI, SPI_DATA_SETUP_T *xf_setup);
358 
366 uint32_t SPI_WriteFrames_Blocking(SPI_T *pSPI, uint8_t *buffer, uint32_t buffer_len);
367 
375 uint32_t SPI_ReadFrames_Blocking(SPI_T *pSPI, uint8_t *buffer, uint32_t buffer_len);
376 
384 
392 
398 void SPI_Int_FlushData(SPI_T *pSPI);
399 
413 
426 
439 
440 
441 #endif /* SPI_H */
void SPI_DeInit(SPI_T *pSPI)
Сброс SPI.
Definition: spi.c:41
__RO uint32_t RIS
Definition: spi.h:46
uint16_t SPI_ReceiveFrame(SPI_T *pSPI)
Прием слова данных по интерфейсу SPI.
Definition: spi.c:186
CTRL_T SPI_GetCtrlNum(SPI_T *pSPI)
Возвращает номер модуля для использования в функциях включения/выключения SPI.
Definition: spi.c:66
SPI_RAWINTSTATUS_T
Тип для регистра RIS.
Definition: spi.h:144
uint32_t SPI_WriteFrames_Blocking(SPI_T *pSPI, uint8_t *buffer, uint32_t buffer_len)
Запись методом постоянного опроса.
Definition: spi.c:339
__WO uint32_t ICR
Definition: spi.h:48
Этот файл содержит структуры, макросы и функции необходимые для работы с дополнительными типами...
void SPI_Write2BFifo(SPI_T *pSPI, SPI_DATA_SETUP_T *xf_setup)
Запись двух байт в буфер SPI.
Definition: spi.c:237
Definition: spi.h:60
SPI_CLOCK_MODE_T clockMode
Definition: spi.h:189
#define __RW
Definition: types.h:39
Definition: spi.h:63
enum FlagStatus IntStatus
SPI_STATUS_T
Тип для регистра SR.
Definition: spi.h:115
Status SPI_Int_RWFrames8Bits(SPI_T *pSPI, SPI_DATA_SETUP_T *xf_setup)
Чтение/запись 8 бит данных при помощи прерываний.
Definition: spi.c:482
void SPI_SetFormat(SPI_T *pSPI, uint32_t pbits, uint32_t pframeFormat, uint32_t pclockMode)
Установка формата информационного кадра
Definition: spi.c:97
CTRL_T
Номера модулей в регистрах PWR_CLK_CTRL и PWR_RST_CTRL Расшифровка битовых полей для регистров PWR_CT...
Definition: system.h:635
#define __RO
Definition: types.h:37
uint32_t rx_cnt
Definition: spi.h:201
#define __WO
Definition: types.h:38
IntStatus SPI_GetRawIntStatus(SPI_T *pSPI, SPI_RAWINTSTATUS_T pRawInt)
Получение статуса прерывания.
Definition: spi.c:610
SPI_BITS_T bits
Definition: spi.h:188
Структура для доступа к регистрам SPI.
Definition: spi.h:38
SPI_MODE_T
Definition: spi.h:101
SPI_INTCLEAR_T
Тип для регистра ICR.
Definition: spi.h:166
__RW uint32_t IMSC
Definition: spi.h:45
__RW uint32_t CPSR
Definition: spi.h:44
Definition: spi.h:62
FlagStatus SPI_GetStatus(SPI_T *pSPI, SPI_STATUS_T pStat)
Получение текущего статуса контроллера SPI.
Definition: spi.c:578
__RW uint32_t CR0
Definition: spi.h:40
Структура настройки SPI.
Definition: spi.h:186
SPI_CLOCK_MODE_T
Definition: spi.h:82
__RW uint32_t DR
Definition: spi.h:42
void * tx_data
Definition: spi.h:198
FlagStatus
Тип для состояний флагов
Definition: types.h:64
SPI_FRAME_FORMAT_T frameFormat
Definition: spi.h:190
uint8_t SPI_GetDataSize(SPI_T *pSPI)
Получение числа бит в одном слове данных.
Definition: spi.c:165
__RO uint32_t MIS
Definition: spi.h:47
SPI_FRAME_FORMAT_T
Definition: spi.h:75
SPI_BITS_T
Definition: spi.h:58
Status SPI_Int_RWFrames16Bits(SPI_T *pSPI, SPI_DATA_SETUP_T *xf_setup)
Чтение/запись 16 бит данных при помощи прерываний.
Definition: spi.c:516
void SPI_Read2BFifo(SPI_T *pSPI, SPI_DATA_SETUP_T *xf_setup)
Чтение двух байт из буфера SPI.
Definition: spi.c:256
void SPI_Read1BFifo(SPI_T *pSPI, SPI_DATA_SETUP_T *xf_setup)
Чтение одного байта из буфера SPI.
Definition: spi.c:217
SPI_DMACR_T
Тип для регистра DMACR.
Definition: spi.h:176
uint32_t length
Definition: spi.h:202
IntStatus SPI_GetIntStatus(SPI_T *pSPI, SPI_MASKINTSTATUS_T pMaskInt)
Получение статуса маскированного прерывания.
Definition: spi.c:594
uint32_t SPI_ReadFrames_Blocking(SPI_T *pSPI, uint8_t *buffer, uint32_t buffer_len)
Чтение методом постоянного опроса.
Definition: spi.c:411
Структура для работы с буфером SPI.
Definition: spi.h:196
SPI_MASKINTSTATUS_T
Тип для регистра MIS.
Definition: spi.h:155
__RO uint32_t SR
Definition: spi.h:43
uint32_t tx_cnt
Definition: spi.h:199
void SPI_SendFrame(SPI_T *pSPI, uint16_t tx_data)
Отправка слова данных по интерфейсу SPI.
Definition: spi.c:176
Этот файл содержит структуры, макросы и функции необходимые для взаимодействия с регистрами общего на...
__RW uint32_t DMACR
Definition: spi.h:49
void SPI_Set_Mode(SPI_T *pSPI, uint32_t pmode)
Установка режима работы (ведущий или ведомый).
Definition: spi.c:111
void SPI_SetBitRate(SPI_T *pSPI, uint32_t bitRate)
Установка частоты тактового сигнала для интерфейса SPI.
Definition: spi.c:137
void SPI_Init(SPI_T *pSPI)
Инициализация SPI.
Definition: spi.c:54
Definition: spi.h:64
Definition: spi.h:65
void SPI_SetClockRate(SPI_T *pSPI, uint32_t clk_rate, uint32_t prescale)
Установка скорости последовательного обмена: FSSPCLKOUT=FSSPCLK/(CPSDVR*(1+SCR))
Definition: spi.c:123
void SPI_Int_FlushData(SPI_T *pSPI)
Очистка буфера приемника и сброс флагов прерываний.
Definition: spi.c:549
Definition: spi.h:61
Definition: spi.h:78
Status
Тип для статуса операции
Definition: types.h:76
SPI_INTMASK_T
Тип для регистра IMSC.
Definition: spi.h:132
void * rx_data
Definition: spi.h:200
__RW uint32_t CR1
Definition: spi.h:41
void SPI_Write1BFifo(SPI_T *pSPI, SPI_DATA_SETUP_T *xf_setup)
Запись одного байта в буфер SPI.
Definition: spi.c:197