BLE5.2 1.0
开发文档说明
xc_drv_spi.h
浏览该文件的文档.
1
25#ifndef _XC_DRV_SPI_H_
26#define _XC_DRV_SPI_H_
27
28/*-----------------------------------------------------------------------------------
29 INCLUDE HEADE FILES
30 ------------------------------------------------------------------------------------*/
31#include <stdbool.h>
32#include <stdio.h>
33
34#include "xc6xxx.h"
35
36/*------------------------------------------------------------------------------------
37 Macros
38 -------------------------------------------------------------------------------------*/
39#define SPI_WAIT_TIMEOUT 65535
40
41// temporary macros -- alex revised
42
43#define SSI_CTRL0_FRF_MOTOROLA (0x1UL)
44#define SSI_CTRL0_FRF_TI (0x0UL)
45
46/* SPI_Mode SPI Mode */
47#define SPI_MODE_SLAVE (0x00000000U)
48#define SPI_MODE_MASTER (0x00000001U)
49
50/* SPI_data_size */
51#define SSI_CTRL0_DFS_LEN_16BIT ((uint16_t)0x0fUL)
52#define SSI_CTRL0_DFS_LEN_8BIT ((uint16_t)0x07UL)
53
54/* SPI_data_direction */
55#define SSI_CTRL0_TMOD_WR (0x0UL)
56#define SSI_CTRL0_TMOD_W (0x1UL)
57#define SSI_CTRL0_TMOD_R (0x2UL)
58
59/* SPI_BaudRate_Prescaler */
60#define SSI_BAUD_DIV_2 (0x02UL)
61#define SSI_BAUD_DIV_4 (0x04UL)
62#define SSI_BAUD_DIV_6 (0x06UL)
63#define SSI_BAUD_DIV_8 (0x08UL)
64#define SSI_BAUD_DIV_10 (0x0aUL)
65#define SSI_BAUD_DIV_12 (0x0cUL)
66
67/* SPI_Clock_Polarity */
68#define SSI_CTRL0_SCPOL_HIGH (0x1UL)
69#define SSI_CTRL0_SCPOL_LOW (0x0UL)
70
71/* SPI_Clock_Phase */
72#define SSI_CTRL0_SCPHA_LEAD (0x0UL)
73#define SSI_CTRL0_SCPHA_TRAIL (0x1UL)
74
75/* SPI_MSB_transmission */
76#define SPI_FirstBit_MSB ((uint16_t)0x0000)
77
78#define SSI_TXFTL_FIFO_0 (0x00UL)
79#define SSI_TXFTL_FIFO_1 (0x01UL)
80#define SSI_TXFTL_FIFO_2 (0x02UL)
81#define SSI_TXFTL_FIFO_3 (0x03UL)
82#define SSI_TXFTL_FIFO_4 (0x04UL)
83#define SSI_TXFTL_FIFO_5 (0x05UL)
84#define SSI_TXFTL_FIFO_6 (0x06UL)
85#define SSI_TXFTL_FIFO_7 (0x07UL)
86
87#define SSI_RXFTL_FIFO_0 (0x00UL)
88#define SSI_RXFTL_FIFO_1 (0x01UL)
89#define SSI_RXFTL_FIFO_2 (0x02UL)
90#define SSI_RXFTL_FIFO_3 (0x03UL)
91#define SSI_RXFTL_FIFO_4 (0x04UL)
92#define SSI_RXFTL_FIFO_5 (0x05UL)
93#define SSI_RXFTL_FIFO_6 (0x06UL)
94#define SSI_RXFTL_FIFO_7 (0x07UL)
95
96#define SSI_IE_TXEIE_ENABLE (0x1UL << SSI_TXEIE_POS)
97#define SSI_IE_TXEIE_DISABLE (0x0UL << SSI_TXEIE_POS)
98
99#define SSI_IE_TXOIE_ENABLE (0x1UL << SSI_TXOIE_POS)
100#define SSI_IE_TXOIE_DISABLE (0x0UL << SSI_TXOIE_POS)
101
102#define SSI_IE_RXUIE_ENABLE (0x1UL << SSI_RXUIE_POS)
103#define SSI_IE_RXUIE_DISABLE (0x0UL << SSI_RXUIE_POS)
104
105#define SSI_IE_RXOIE_ENABLE (0x1UL << SSI_RXOIE_POS)
106#define SSI_IE_RXOIE_DISABLE (0x0UL << SSI_RXOIE_POS)
107
108#define SSI_IE_RXFIE_ENABLE (0x1UL << SSI_RXFIE_POS)
109#define SSI_IE_RXFIE_DISABLE (0x0UL << SSI_RXFIE_POS)
110
111#define SSI_IS_TXEIS_SET (0x1UL << SSI_TXEIS_POS)
112#define SSI_IS_TXEIS_RESET (0x0UL << SSI_TXEIS_POS)
113
114#define SSI_IS_TXOIS_SET (0x1UL << SSI_TXOIS_POS)
115#define SSI_IS_TXOIS_RESET (0x0UL << SSI_TXOIS_POS)
116
117#define SSI_IS_RXUIS_SET (0x1UL << SSI_RXUIS_POS)
118#define SSI_IS_RXUIS_RESET (0x0UL << SSI_RXUIS_POS)
119
120#define SSI_IS_RXOIS_SET (0x1UL << SSI_RXOIS_POS)
121#define SSI_IS_RXOIS_RESET (0x0UL << SSI_RXOIS_POS)
122
123#define SSI_IS_RXFIS_SET (0x1UL << SSI_RXFIS_POS)
124#define SSI_IS_RXFIS_RESET (0x0UL << SSI_RXFIS_POS)
125/*------------------------------------------------------------------------------------
126 TypeDef
127 -------------------------------------------------------------------------------------*/
128
129typedef struct
130{
131 uint16_t Mode;
132 uint32_t Direction;
133 uint32_t DataSize;
134 uint32_t CLKPolarity;
135 uint32_t CLKPhase;
136 uint32_t NSS;
138 uint32_t FirstBit;
140
141/*------------------------------------------------------------------------------------
142 Global Variables
143 -------------------------------------------------------------------------------------*/
144typedef void (*timer_handler_callback)(void *context);
145
146/*------------------------------------------------------------------------------------
147 Exported Functions
148 -------------------------------------------------------------------------------------*/
149
150void xc_spi_init(uint8_t reg_idx, SPI_InitCfg_t *init_cfg);
151void xc_spi_rxftl_fifo_set(uint8_t reg_idx, uint8_t val);
152void xc_spi_txftl_fifo_set(uint8_t reg_idx, uint8_t val);
153
154void xc_spi_enable_it(uint8_t reg_idx, uint8_t val);
155void xc_spi_disable_it(uint8_t reg_idx, uint8_t val);
156
157void xc_spi_flash_power_down(uint8_t reg_idx);
158void xc_spi_flash_wake_up(uint8_t reg_idx);
159uint8_t xc_spi_flash_wait_busy(uint8_t reg_idx);
160eXC_RESULT xc_spi_flash_erase_sector(uint8_t reg_idx, uint32_t Dst_Addr);
161void xc_spi_flash_erase_page(uint8_t reg_idx, uint32_t Dst_Addr);
162void xc_spi_flash_write_page(uint8_t reg_idx, uint32_t WriteAddr,
163 uint8_t *pBuffer);
164void xc_spi_flash_read_page(uint8_t reg_idx, uint32_t ReadAddr, uint8_t *pBuffer);
165eXC_RESULT xc_spi_flash_write(uint8_t reg_idx, uint32_t writeAddr, uint8_t *buff,
166 uint16_t size);
167eXC_RESULT xc_spi_flash_read(uint8_t reg_idx, uint32_t readAddr, uint8_t *buff,
168 uint16_t size);
169void xc_spi_flash_read_128bit_uid(uint8_t reg_idx, uint8_t *buff);
170eXC_RESULT xc_spi_flash_rdid(uint8_t reg_idx, uint8_t *buff);
171void xc_spi_write_and_read_data(uint8_t reg_idx, uint8_t *w_data, uint16_t w_size,
172 uint8_t *r_data, uint16_t r_size);
173
174#endif // _XC_DRV_AOTIMER_H_
uint32_t BaudRatePrescaler
Definition xc_drv_spi.h:137
uint32_t CLKPolarity
Definition xc_drv_spi.h:134
uint32_t FirstBit
Definition xc_drv_spi.h:138
uint32_t DataSize
Definition xc_drv_spi.h:133
uint16_t Mode
Definition xc_drv_spi.h:131
uint32_t Direction
Definition xc_drv_spi.h:132
uint32_t CLKPhase
Definition xc_drv_spi.h:135
uint32_t NSS
Definition xc_drv_spi.h:136
uint8_t xc_spi_flash_wait_busy(uint8_t reg_idx)
void xc_spi_rxftl_fifo_set(uint8_t reg_idx, uint8_t val)
Definition xc_drv_spi.c:123
void xc_spi_disable_it(uint8_t reg_idx, uint8_t val)
Definition xc_drv_spi.c:135
void xc_spi_flash_power_down(uint8_t reg_idx)
Definition xc_drv_spi.c:137
void xc_spi_flash_read_128bit_uid(uint8_t reg_idx, uint8_t *buff)
Definition xc_drv_spi.c:474
void xc_spi_enable_it(uint8_t reg_idx, uint8_t val)
Definition xc_drv_spi.c:133
void xc_spi_init(uint8_t reg_idx, SPI_InitCfg_t *init_cfg)
Definition xc_drv_spi.c:50
eXC_RESULT xc_spi_flash_write(uint8_t reg_idx, uint32_t writeAddr, uint8_t *buff, uint16_t size)
Definition xc_drv_spi.c:301
eXC_RESULT xc_spi_flash_read(uint8_t reg_idx, uint32_t readAddr, uint8_t *buff, uint16_t size)
Definition xc_drv_spi.c:400
void xc_spi_flash_wake_up(uint8_t reg_idx)
Definition xc_drv_spi.c:148
eXC_RESULT xc_spi_flash_rdid(uint8_t reg_idx, uint8_t *buff)
Definition xc_drv_spi.c:498
void(* timer_handler_callback)(void *context)
Definition xc_drv_spi.h:144
void xc_spi_txftl_fifo_set(uint8_t reg_idx, uint8_t val)
Definition xc_drv_spi.c:128
eXC_RESULT xc_spi_flash_erase_sector(uint8_t reg_idx, uint32_t Dst_Addr)
Definition xc_drv_spi.c:187
void xc_spi_flash_erase_page(uint8_t reg_idx, uint32_t Dst_Addr)
Definition xc_drv_spi.c:212
void xc_spi_flash_write_page(uint8_t reg_idx, uint32_t WriteAddr, uint8_t *pBuffer)
Definition xc_drv_spi.c:235
void xc_spi_write_and_read_data(uint8_t reg_idx, uint8_t *w_data, uint16_t w_size, uint8_t *r_data, uint16_t r_size)
Only applicable Master & Slave communication
Definition xc_drv_spi.c:648
void xc_spi_flash_read_page(uint8_t reg_idx, uint32_t ReadAddr, uint8_t *pBuffer)
Definition xc_drv_spi.c:265