embeddedlibrary
reusable software modules for embedded systems
spi.h
1 
13 #ifndef _SPI_H_
14 #define _SPI_H_
15 
16 #include "hal_spi.h"
17 
18 #ifndef SPI_MAX_SIZE
19 #define SPI_MAX_SIZE 8
20 #endif
21 
22 #ifndef SPI_MAX_TRANSACTIONS
23 #define SPI_MAX_TRANSACTIONS 4
24 #endif
25 
27 
28 typedef struct spi_settings_t {
29  uint8_t channel;
30  uint32_t bit_rate;
31  uint8_t mode;
39 
41 
43  uint8_t writeLength;
44  uint8_t readLength;
45  uint8_t readDelay;
46  struct {
47  volatile uint8_t blocking : 1;
48  volatile uint8_t finished : 1;
49  volatile uint8_t channel : 3;
50  volatile uint8_t unused : 3;
51  } flags;
52  void (*callback)(struct spi_transaction *);
53  void (*cs_control)(uint8_t);
54  uint8_t data[SPI_MAX_SIZE];
55 };
56 
59 
64 void SPI_Init(spi_settings_t* spi_settings);
65 
72 void SPI_Transact(spi_transaction_t * transaction);
73 
78 void SPI_ISR(uint8_t channel);
79 
80 /******************************************
81  * HAL Functions
82  *****************************************/
87 void hal_SPI_Init(spi_settings_t* settings);
88 
93 void hal_SPI_Enable(uint8_t channel);
94 
99 void hal_SPI_Disable(uint8_t channel);
100 
106 uint8_t hal_SPI_SpaceAvailable(uint8_t channel);
107 
113 uint8_t hal_SPI_DataAvailable(uint8_t channel);
114 
119 void hal_SPI_ClearRxIF(uint8_t channel);
120 
125 void hal_SPI_ClearTxIF(uint8_t channel);
126 
131 void hal_SPI_EnableRxInterrupt(uint8_t channel);
132 
137 void hal_SPI_EnableTxInterrupt(uint8_t channel);
138 
143 void hal_SPI_DisableRxInterrupt(uint8_t channel);
144 
149 void hal_SPI_DisableTxInterrupt(uint8_t channel);
150 
155 uint8_t hal_SPI_TxIntStatus(uint8_t channel);
156 
161 uint8_t hal_SPI_RxIntStatus(uint8_t channel);
162 
167 uint8_t hal_SPI_IsTxIntEnabled(uint8_t channel);
168 
174 uint8_t hal_SPI_RxByte(uint8_t channel);
175 
181 void hal_SPI_TxByte(uint8_t channel, uint8_t b);
182 
184 #endif // _SPI_H_
uint8_t readLength
read length
Definition: spi.h:44
uint8_t hal_SPI_RxByte(uint8_t channel)
Definition: hal_spi.c:260
uint8_t readDelay
read delay
Definition: spi.h:45
volatile uint8_t unused
unused
Definition: spi.h:50
void hal_SPI_ClearRxIF(uint8_t channel)
Definition: hal_spi.c:275
void(* cs_control)(uint8_t)
cs_control
Definition: spi.h:53
spi settings structure
Definition: spi.h:28
uint8_t data[SPI_MAX_SIZE]
data (write data followed by read data)
Definition: spi.h:54
void hal_SPI_Enable(uint8_t channel)
Definition: hal_spi.c:82
void hal_SPI_DisableRxInterrupt(uint8_t channel)
Definition: hal_spi.c:158
void SPI_Transact(spi_transaction_t *transaction)
Definition: spi.c:148
void(* callback)(struct spi_transaction *)
callback function
Definition: spi.h:52
struct spi_settings_t spi_settings_t
spi settings structure
uint8_t hal_SPI_DataAvailable(uint8_t channel)
Definition: hal_spi.c:328
uint8_t channel
channel number of module to be configured
Definition: spi.h:29
spi settings structure
Definition: hal_spi.h:23
uint8_t hal_SPI_RxIntStatus(uint8_t channel)
Definition: hal_spi.c:226
uint8_t hal_SPI_IsTxIntEnabled(uint8_t channel)
Definition: hal_spi.c:211
uint8_t hal_SPI_SpaceAvailable(uint8_t channel)
Definition: hal_spi.c:313
volatile uint8_t channel
channel setting
Definition: spi.h:49
void SPI_Init(spi_settings_t *spi_settings)
Definition: spi.c:97
#define SPI_MAX_SIZE
max length
Definition: spi.h:19
uint8_t writeLength
write length
Definition: spi.h:43
void hal_SPI_EnableRxInterrupt(uint8_t channel)
Definition: hal_spi.c:120
uint8_t hal_SPI_TxIntStatus(uint8_t channel)
Definition: hal_spi.c:196
uint32_t bit_rate
Definition: spi.h:30
uint8_t mode
depends on processor clock settings and SPI peripheral
Definition: spi.h:32
void SPI_ISR(uint8_t channel)
Definition: spi.c:293
void hal_SPI_TxByte(uint8_t channel, uint8_t b)
Definition: hal_spi.c:241
volatile uint8_t blocking
blocking flag
Definition: spi.h:47
void hal_SPI_ClearTxIF(uint8_t channel)
Definition: hal_spi.c:294
hal_spi_settings_t hal_settings
processor specific settings
Definition: spi.h:37
void hal_SPI_DisableTxInterrupt(uint8_t channel)
Definition: hal_spi.c:177
spi transaction structure
Definition: spi.h:42
void hal_SPI_EnableTxInterrupt(uint8_t channel)
Definition: hal_spi.c:139
void hal_SPI_Disable(uint8_t channel)
Definition: hal_spi.c:101
volatile uint8_t finished
transaction finished flag
Definition: spi.h:48
void hal_SPI_Init(spi_settings_t *settings)
Definition: hal_spi.c:6