Hanna
Sourcecode Batteriemanagementsystem
spi_master.h
gehe zur Dokumentation dieser Datei
1 
46 #ifndef _SPI_MASTER_H_
47 #define _SPI_MASTER_H_
48 
49 #include "compiler.h"
50 #include "port_driver.h"
51 
52 #ifndef _USART_H_
53 
63  STATUS_OK = 0,
64  ERR_IO_ERROR = -1,
65  ERR_FLUSHED = -2,
66  ERR_TIMEOUT = -3,
67  ERR_BAD_DATA = -4,
68  ERR_PROTOCOL = -5,
73  ERR_BUSY = -10,
75  ERR_NO_TIMER = -12,
78 
89 };
90 
91 
92 
93 typedef enum status_code status_code_t;
94 #endif
95 
106 int8_t spi_xmega_set_baud_div(SPI_t *spi, uint32_t baudrate, uint32_t clkper_hz);
107 
112 static inline void spi_enable(SPI_t *spi)
113 {
114  spi->CTRL |= SPI_ENABLE_bm;
115 }
116 
125 static inline void spi_disable(SPI_t *spi)
126 {
127  spi->CTRL &= ~SPI_ENABLE_bm;
128 }
129 
136 static inline bool spi_is_enabled(SPI_t *spi)
137 {
138  return spi->CTRL & SPI_ENABLE_bm ? true : false;
139 }
140 
147 static inline void spi_put(SPI_t *spi, uint8_t data)
148 {
149  spi->DATA = data;
150 }
151 
158 static inline uint8_t spi_get(SPI_t *spi)
159 {
160  return spi->DATA;
161 }
162 
169 static inline bool spi_is_tx_ok(SPI_t *spi)
170 {
171  return spi->STATUS & SPI_IF_bm ? true : false;
172 }
173 
180 static inline void spi_enable_master_mode(SPI_t *spi)
181 {
182  spi->CTRL |= SPI_MASTER_bm;
183 }
184 
187 
195 //# include "ioport_compat.h"
196 
210 //#include "conf_spi_master.h"
212 
214 #ifndef CONFIG_SPI_MASTER_DUMMY
215 #define CONFIG_SPI_MASTER_DUMMY 0xFF
216 #endif
217 
222 #define SPI_CPHA (1 << 0)
223 
227 #define SPI_CPOL (1 << 1)
228 
232 #define SPI_MODE_0 0
233 
236 #define SPI_MODE_1 (SPI_CPHA)
237 
240 #define SPI_MODE_2 (SPI_CPOL)
241 
244 #define SPI_MODE_3 (SPI_CPOL | SPI_CPHA)
245 
246 typedef uint8_t spi_flags_t;
247 typedef uint32_t board_spi_select_id_t;
248 
250 struct spi_device {
252  port_pin_t id;
253 };
254 
260 extern void spi_master_init(SPI_t *spi);
261 
276 extern void spi_master_setup_device(SPI_t *spi, struct spi_device *device,
277  spi_flags_t flags, unsigned long baud_rate,
278  board_spi_select_id_t sel_id);
279 
284 extern void spi_enable(SPI_t *spi);
285 
294 extern void spi_disable(SPI_t *spi);
295 
296 
303 extern bool spi_is_enabled(SPI_t *spi);
304 
314 extern void spi_select_device(SPI_t *spi, struct spi_device *device);
315 
326 extern void spi_deselect_device(SPI_t *spi, struct spi_device *device);
327 
334 __always_inline static void spi_write_single(SPI_t *spi, uint8_t data)
335 {
336  spi_put(spi,data);
337 }
338 
350 extern status_code_t spi_write_packet(SPI_t *spi,const uint8_t *data, size_t len);
351 
352 
359 inline static void spi_read_single(SPI_t *spi, uint8_t *data)
360 {
361  *data=spi_get(spi);
362 }
363 
375 extern status_code_t spi_read_packet(SPI_t *spi, uint8_t *data, size_t len);
376 
385 inline static bool spi_is_tx_empty(SPI_t *spi)
386 {
387  return spi_is_tx_ok(spi);
388 }
389 
398 inline static bool spi_is_tx_ready(SPI_t *spi)
399 {
400  return spi_is_tx_ok(spi);
401 }
402 
409 inline static bool spi_is_rx_full(SPI_t *spi)
410 {
411  return spi_is_tx_ok(spi);
412 }
413 
420 inline static bool spi_is_rx_ready(SPI_t *spi)
421 {
422  return spi_is_tx_ok(spi);
423 }
424 
426 
427 
428 
429 
430 #endif // _SPI_MASTER_H_
static bool spi_is_rx_full(SPI_t *spi)
Tests if the SPI contains a received character.
Definition: spi_master.h:409
Resource is busy.
Definition: spi_master.h:73
static void spi_disable(SPI_t *spi)
Disables the SPI.
Definition: spi_master.h:125
static void spi_enable_master_mode(SPI_t *spi)
Activate SPI master mode of a SPI peripheral.
Definition: spi_master.h:180
Data format not recognized.
Definition: spi_master.h:74
static bool spi_is_enabled(SPI_t *spi)
Tests if the SPI is enabled.
Definition: spi_master.h:136
Polled SPI device definition.
Definition: spi_master.h:250
Request flushed from queue.
Definition: spi_master.h:65
port_pin_t id
Board specific select id.
Definition: spi_master.h:252
Commonly used includes, types and macros.
static void spi_read_single(SPI_t *spi, uint8_t *data)
Receive one byte from a SPI device.
Definition: spi_master.h:359
I/O error.
Definition: spi_master.h:64
void spi_master_init(SPI_t *spi)
Initializes the SPI in master mode.
Definition: spi_master.c:126
static void spi_put(SPI_t *spi, uint8_t data)
Put one data byte to a SPI peripheral.
Definition: spi_master.h:147
Timer not running.
Definition: spi_master.h:77
static void spi_enable(SPI_t *spi)
Enables the SPI.
Definition: spi_master.h:112
Invalid argument.
Definition: spi_master.h:71
Timer already running.
Definition: spi_master.h:76
XMEGA I/O Port driver header file.
Operation in progress.
Definition: spi_master.h:88
Success.
Definition: spi_master.h:63
No timer available.
Definition: spi_master.h:75
Bad address.
Definition: spi_master.h:72
status_code_t spi_read_packet(SPI_t *spi, uint8_t *data, size_t len)
Receive a sequence of bytes from a SPI device.
Definition: spi_master.c:223
Insufficient memory.
Definition: spi_master.h:70
static bool spi_is_rx_ready(SPI_t *spi)
Checks if all reception is ready.
Definition: spi_master.h:420
Unsupported device.
Definition: spi_master.h:69
static uint8_t spi_get(SPI_t *spi)
Get one data byte to a SPI peripheral.
Definition: spi_master.h:158
static __always_inline void spi_write_single(SPI_t *spi, uint8_t data)
Write one byte to a SPI device.
Definition: spi_master.h:334
Data integrity check failed.
Definition: spi_master.h:67
Protocol error.
Definition: spi_master.h:68
static bool spi_is_tx_ok(SPI_t *spi)
Tests if the SPI contains a received character.
Definition: spi_master.h:169
Operation timed out.
Definition: spi_master.h:66
void spi_master_setup_device(SPI_t *spi, struct spi_device *device, spi_flags_t flags, unsigned long baud_rate, board_spi_select_id_t sel_id)
Setup a SPI device.
int8_t spi_xmega_set_baud_div(SPI_t *spi, uint32_t baudrate, uint32_t clkper_hz)
Calculates the SPI baudrate divider.
Definition: spi_master.c:59
static bool spi_is_tx_empty(SPI_t *spi)
Checks if all transmissions are complete.
Definition: spi_master.h:385
status_code
Definition: spi_master.h:62
static bool spi_is_tx_ready(SPI_t *spi)
Checks if all transmissions is ready.
Definition: spi_master.h:398
void spi_select_device(SPI_t *spi, struct spi_device *device)
Select given device on the SPI bus.
Definition: spi_master.c:247
void spi_deselect_device(SPI_t *spi, struct spi_device *device)
Deselect given device on the SPI bus.
Definition: spi_master.c:261
status_code_t spi_write_packet(SPI_t *spi, const uint8_t *data, size_t len)
Send a sequence of bytes to a SPI device.
Definition: spi_master.c:200
#define __always_inline
The function should always be inlined.
Definition: compiler.h:127