embedded-software
reusable software modules for embedded systems
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
spi.h
Go to the documentation of this file.
1 
15 #ifndef _SPI_H_
16 #define _SPI_H_
17 
18 #include <stdint.h>
19 
20 #include "project_settings.h"
21 
22 #include "hal_spi.h"
23 
24 #ifndef SPI_MAX_SIZE
25 #define SPI_MAX_SIZE 8
26 #endif
27 
28 #ifndef SPI_MAX_TRANSACTIONS
29 #define SPI_MAX_TRANSACTIONS 4
30 #endif
31 
33 typedef struct spi_settings_t {
34  uint8_t channel;
35  uint32_t bit_rate;
36  uint8_t mode;
44 
47  uint8_t writeLength;
48  uint8_t readLength;
49  uint8_t readDelay;
50  struct {
51  volatile uint8_t blocking : 1;
52  volatile uint8_t finished : 1;
53  volatile uint8_t channel : 3;
54  volatile uint8_t overrun : 1;
55  volatile uint8_t unused : 2;
56  } flags;
57  void (*callback)(struct spi_transaction *);
58  void (*cs_control)(uint8_t);
59  uint8_t data[SPI_MAX_SIZE];
60 };
61 
64 
82 void SPI_Init(spi_settings_t* spi_settings);
83 
121 int8_t SPI_Transact(spi_transaction_t * transaction);
122 
127 void SPI_ISR(uint8_t channel);
128 
129 /******************************************
130  * HAL Functions
131  * The following functions can be implemented in hal_spi.c or as
132  * #define's in hal_spi.h
133  *****************************************/
134 
142 #ifndef hal_SPI_Init
143 void hal_SPI_Init(spi_settings_t* settings);
144 #endif
145 
150 #ifndef hal_SPI_Enable
151 void hal_SPI_Enable(uint8_t channel);
152 #endif
153 
158 #ifndef hal_SPI_Disable
159 void hal_SPI_Disable(uint8_t channel);
160 #endif
161 
168 #ifndef hal_SPI_SpaceAvailable
169 uint8_t hal_SPI_SpaceAvailable(uint8_t channel);
170 #endif
171 
178 #ifndef hal_SPI_DataAvailable
179 uint8_t hal_SPI_DataAvailable(uint8_t channel);
180 #endif
181 
186 #ifndef hal_SPI_ClearRxIF
187 void hal_SPI_ClearRxIF(uint8_t channel);
188 #endif
189 
194 #ifndef hal_SPI_ClearTxIF
195 void hal_SPI_ClearTxIF(uint8_t channel);
196 #endif
197 
202 #ifndef hal_SPI_EnableRxInterrupt
203 void hal_SPI_EnableRxInterrupt(uint8_t channel);
204 #endif
205 
210 #ifndef hal_SPI_EnableTxInterrupt
211 void hal_SPI_EnableTxInterrupt(uint8_t channel);
212 #endif
213 
218 #ifndef hal_SPI_DisableRxInterrupt
219 void hal_SPI_DisableRxInterrupt(uint8_t channel);
220 #endif
221 
226 #ifndef hal_SPI_DisableTxInterrupt
227 void hal_SPI_DisableTxInterrupt(uint8_t channel);
228 #endif
229 
234 #ifndef hal_SPI_TxIntStatus
235 uint8_t hal_SPI_TxIntStatus(uint8_t channel);
236 #endif
237 
242 #ifndef hal_SPI_RxIntStatus
243 uint8_t hal_SPI_RxIntStatus(uint8_t channel);
244 #endif
245 
250 #ifndef hal_SPI_IsTxIntEnabled
251 uint8_t hal_SPI_IsTxIntEnabled(uint8_t channel);
252 #endif
253 
259 #ifndef hal_SPI_RxByte
260 uint8_t hal_SPI_RxByte(uint8_t channel);
261 #endif
262 
268 #ifndef hal_SPI_TxByte
269 void hal_SPI_TxByte(uint8_t channel, uint8_t b);
270 #endif
271 
275 #ifndef hal_SPI_OverrunError
276 uint8_t hal_SPI_OverrunError(uint8_t channel);
277 #endif
278 
280 #endif // _SPI_H_
uint8_t readLength
read length
Definition: spi.h:48
uint8_t hal_SPI_RxByte(uint8_t channel)
Definition: hal_spi.c:261
uint8_t readDelay
read delay
Definition: spi.h:49
volatile uint8_t unused
unused
Definition: spi.h:55
struct spi_transaction::@22 flags
void hal_SPI_ClearRxIF(uint8_t channel)
Definition: hal_spi.c:276
spi settings structure
Definition: spi.h:33
uint8_t data[SPI_MAX_SIZE]
data (write data followed by read data)
Definition: spi.h:59
void hal_SPI_Enable(uint8_t channel)
Definition: hal_spi.c:83
void hal_SPI_DisableRxInterrupt(uint8_t channel)
Definition: hal_spi.c:159
struct spi_settings_t spi_settings_t
spi settings structure
int8_t SPI_Transact(spi_transaction_t *transaction)
send a SPI transaction
Definition: spi.c:139
uint8_t hal_SPI_DataAvailable(uint8_t channel)
Definition: hal_spi.c:329
uint8_t channel
channel number of module to be configured
Definition: spi.h:34
spi settings structure
Definition: hal_spi.h:28
uint8_t hal_SPI_RxIntStatus(uint8_t channel)
Definition: hal_spi.c:227
uint8_t hal_SPI_IsTxIntEnabled(uint8_t channel)
Definition: hal_spi.c:212
uint8_t hal_SPI_SpaceAvailable(uint8_t channel)
Definition: hal_spi.c:314
volatile uint8_t channel
channel setting
Definition: spi.h:53
void SPI_Init(spi_settings_t *spi_settings)
initialize a SPI channel
Definition: spi.c:96
#define SPI_MAX_SIZE
max length
Definition: spi.h:25
uint8_t writeLength
write length
Definition: spi.h:47
void hal_SPI_EnableRxInterrupt(uint8_t channel)
Definition: hal_spi.c:121
uint8_t hal_SPI_OverrunError(uint8_t channel)
Definition: hal_spi.c:344
uint8_t hal_SPI_TxIntStatus(uint8_t channel)
Definition: hal_spi.c:197
uint32_t bit_rate
Definition: spi.h:35
void(* cs_control)(uint8_t)
cs_control
Definition: spi.h:58
volatile uint8_t overrun
overrun error occured
Definition: spi.h:54
uint8_t mode
depends on processor clock settings and SPI peripheral
Definition: spi.h:37
void SPI_ISR(uint8_t channel)
Interrupt service routine to be called from the HAL.
Definition: spi.c:321
void hal_SPI_TxByte(uint8_t channel, uint8_t b)
Definition: hal_spi.c:242
volatile uint8_t blocking
blocking flag
Definition: spi.h:51
void(* callback)(struct spi_transaction *)
callback function
Definition: spi.h:57
void hal_SPI_ClearTxIF(uint8_t channel)
Definition: hal_spi.c:295
hal_spi_settings_t hal_settings
processor specific settings
Definition: spi.h:42
void hal_SPI_DisableTxInterrupt(uint8_t channel)
Definition: hal_spi.c:178
spi transaction structure
Definition: spi.h:46
void hal_SPI_EnableTxInterrupt(uint8_t channel)
Definition: hal_spi.c:140
void hal_SPI_Disable(uint8_t channel)
Definition: hal_spi.c:102
volatile uint8_t finished
transaction finished flag
Definition: spi.h:52
void hal_SPI_Init(spi_settings_t *settings)
Definition: hal_spi.c:14