Paparazzi UAS v7.0_unstable
Paparazzi is a free software Unmanned Aircraft System.
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
spi.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2005-2012 The Paparazzi Team
3 *
4 * This file is part of paparazzi.
5 *
6 * paparazzi is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2, or (at your option)
9 * any later version.
10 *
11 * paparazzi is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with paparazzi; see the file COPYING. If not, write to
18 * the Free Software Foundation, 59 Temple Place - Suite 330,
19 * Boston, MA 02111-1307, USA.
20 *
21 */
22
31#ifndef SPI_H
32#define SPI_H
33
34#include "std.h"
35
36#include "mcu_periph/spi_arch.h"
37#include "mcu_periph/sys_time.h"
39
47// FIXME how to use this properly ?
52
64
73
82
89
99
106
111
125
126struct spi_transaction;
127
132typedef void (*SPICallback)(struct spi_transaction *trans);
133
161
165#ifndef SPI_TRANSACTION_QUEUE_LEN
166#define SPI_TRANSACTION_QUEUE_LEN 8
167#endif
168
186
187#if SPI_MASTER
188
189#define SPI_SLAVE0 0
190#define SPI_SLAVE1 1
191#define SPI_SLAVE2 2
192#define SPI_SLAVE3 3
193#define SPI_SLAVE4 4
194#define SPI_SLAVE5 5
195#define SPI_SLAVE6 6
196#define SPI_SLAVE7 7
197#define SPI_SLAVE8 8
198
200//extern uint8_t spi_nb_ovrn;
201
202#if USE_SPI0
203
204extern struct spi_periph spi0;
205extern void spi0_init(void);
206
210extern void spi0_arch_init(void);
211
212#endif // USE_SPI0
213
214#if USE_SPI1
215
216extern struct spi_periph spi1;
217extern void spi1_init(void);
218
222extern void spi1_arch_init(void);
223
224#endif // USE_SPI1
225
226#if USE_SPI2
227
228extern struct spi_periph spi2;
229extern void spi2_init(void);
230
234extern void spi2_arch_init(void);
235
236#endif // USE_SPI2
237
238#if USE_SPI3
239
240extern struct spi_periph spi3;
241extern void spi3_init(void);
242
246extern void spi3_arch_init(void);
247
248#endif // USE_SPI3
249
250#if USE_SPI4
251
252extern struct spi_periph spi4;
253extern void spi4_init(void);
254
258extern void spi4_arch_init(void);
259
260#endif // USE_SPI4
261
262#if USE_SPI6
263
264extern struct spi_periph spi6;
265extern void spi6_init(void);
266
270extern void spi6_arch_init(void);
271
272#endif // USE_SPI6
273
277extern void spi_init(struct spi_periph *p);
278
281extern void spi_init_slaves(void);
282
289extern bool spi_submit(struct spi_periph *p, struct spi_transaction *t);
290
298
302extern void spi_slave_select(uint8_t slave);
303
307extern void spi_slave_unselect(uint8_t slave);
308
317extern bool spi_lock(struct spi_periph *p, uint8_t slave);
318
325extern bool spi_resume(struct spi_periph *p, uint8_t slave);
326
327#endif /* SPI_MASTER */
328
329#if SPI_SLAVE
330
331#if USE_SPI0_SLAVE
332
333extern struct spi_periph spi0;
334extern void spi0_slave_init(void);
335
339extern void spi0_slave_arch_init(void);
340
341#endif
342
343#if USE_SPI1_SLAVE
344
345extern struct spi_periph spi1;
346extern void spi1_slave_init(void);
347
351extern void spi1_slave_arch_init(void);
352
353#endif
354
355#if USE_SPI2_SLAVE
356
357extern struct spi_periph spi2;
358extern void spi2_slave_init(void);
359
363extern void spi2_slave_arch_init(void);
364
365#endif
366
367#if USE_SPI3_SLAVE
368
369extern struct spi_periph spi3;
370extern void spi3_slave_init(void);
371
375extern void spi3_slave_arch_init(void);
376
377#endif
378
382extern void spi_slave_init(struct spi_periph *p);
383
390extern bool spi_slave_register(struct spi_periph *p, struct spi_transaction *t);
391
398extern bool spi_slave_wait(struct spi_periph *p);
399
400#endif /* SPI_SLAVE */
401
405#if SPI_SLAVE_HS
406#include "mcu_periph/spi_slave_hs_arch.h"
407extern void spi_slave_hs_init(void);
408#endif
409
410#endif /* SPI_H */
enum SPIClockPolarity cpol
clock polarity control
Definition spi.h:151
enum SPIClockPhase cpha
clock phase control
Definition spi.h:152
enum SPISlaveSelect select
slave selection behavior
Definition spi.h:150
SPICallback before_cb
NULL or function called before the transaction.
Definition spi.h:156
enum SPIStatus status
internal state of the peripheral
Definition spi.h:177
SPICallback after_cb
NULL or function called after the transaction.
Definition spi.h:157
struct spi_transaction * trans[SPI_TRANSACTION_QUEUE_LEN]
circular buffer holding transactions
Definition spi.h:173
void * reg_addr
Definition spi.h:180
enum SPIDataSizeSelect dss
data transfer word size
Definition spi.h:153
volatile uint8_t * output_buf
pointer to transmit buffer for DMA
Definition spi.h:146
uint16_t input_length
number of data words to read
Definition spi.h:147
void * init_struct
Definition spi.h:181
pprz_bsem_t bsem
Definition spi.h:159
enum SPIClockDiv cdiv
prescaler of main clock to use as SPI clock
Definition spi.h:155
volatile uint8_t * input_buf
pointer to receive buffer for DMA
Definition spi.h:145
uint8_t trans_insert_idx
Definition spi.h:174
volatile uint8_t tx_idx_buf
Definition spi.h:178
volatile uint8_t suspend
control for stop/resume of the fifo
Definition spi.h:184
uint8_t slave_idx
slave id: SPI_SLAVE0 to SPI_SLAVE4
Definition spi.h:149
enum SPIMode mode
Definition spi.h:182
uint8_t trans_extract_idx
Definition spi.h:175
enum SPIBitOrder bitorder
MSB/LSB order.
Definition spi.h:154
uint16_t output_length
number of data words to write
Definition spi.h:148
enum SPITransactionStatus status
Definition spi.h:158
volatile uint8_t rx_idx_buf
Definition spi.h:179
SPIClockPhase
SPI CPHA (clock phase) options.
Definition spi.h:69
void spi2_init(void)
Definition spi.c:59
void spi0_init(void)
Definition spi.c:37
SPIStatus
SPI peripheral status.
Definition spi.h:102
enum SPITransactionStatus spi_blocking_transceive(struct spi_periph *p, struct spi_transaction *t, float timeout)
Perform a spi transaction (blocking).
Definition spi.c:169
SPITransactionStatus
SPI transaction status.
Definition spi.h:92
SPIClockPolarity
SPI CPOL (clock polarity) options.
Definition spi.h:78
bool spi_submit(struct spi_periph *p, struct spi_transaction *t)
Submit a spi transaction.
Definition spi_arch.c:534
bool spi_slave_wait(struct spi_periph *p)
Initialized and wait for the next transaction.
void spi_slave_init(struct spi_periph *p)
Initialize a spi peripheral in slave mode.
Definition spi.c:156
bool spi_lock(struct spi_periph *p, uint8_t slave)
Lock the SPI fifo.
Definition spi_arch.c:683
SPISlaveSelect
SPI slave selection behavior options.
Definition spi.h:58
void spi1_init(void)
Definition spi.c:48
void(* SPICallback)(struct spi_transaction *trans)
SPI Callback function.
Definition spi.h:132
#define SPI_TRANSACTION_QUEUE_LEN
SPI transaction queue length.
Definition spi.h:166
SPIMode
Definition spi.h:48
void spi_slave_unselect(uint8_t slave)
Unselect a slave.
Definition spi_arch.c:625
SPIBitOrder
Definition spi.h:107
SPIClockDiv
Peripheral clock divider.
Definition spi.h:115
void spi1_arch_init(void)
Architecture dependent SPI1 initialization.
Definition spi_arch.c:424
SPIDataSizeSelect
SPI data word size of transfer.
Definition spi.h:85
void spi0_arch_init(void)
Architecture dependent SPI0 initialization.
Definition spi_arch.c:137
struct spi_periph spi2
receive transferred over DMA
Definition spi_arch.c:1004
bool spi_slave_register(struct spi_periph *p, struct spi_transaction *t)
Register a spi transaction in slave mode (only one transaction can be registered).
Definition spi_arch.c:1624
void spi_slave_select(uint8_t slave)
Select a slave.
Definition spi_arch.c:568
void spi2_arch_init(void)
Architecture dependent SPI2 initialization.
Definition spi_arch.c:443
struct spi_periph spi0
Definition spi.c:35
struct spi_periph spi1
receive transferred over DMA
Definition spi_arch.c:967
bool spi_resume(struct spi_periph *p, uint8_t slave)
Resume the SPI fifo.
Definition spi_arch.c:697
void spi_init_slaves(void)
Initialize all used slaves and unselect them.
Definition spi_arch.c:711
@ SPICphaEdge2
CPHA = 1.
Definition spi.h:71
@ SPICphaEdge1
CPHA = 0.
Definition spi.h:70
@ SPIIdle
Definition spi.h:103
@ SPIRunning
Definition spi.h:104
@ SPITransFailed
Definition spi.h:96
@ SPITransSuccess
Definition spi.h:95
@ SPITransRunning
Definition spi.h:94
@ SPITransPending
Definition spi.h:93
@ SPITransDone
Definition spi.h:97
@ SPICpolIdleLow
CPOL = 0.
Definition spi.h:79
@ SPICpolIdleHigh
CPOL = 1.
Definition spi.h:80
@ SPISelect
slave is selected before transaction but not unselected
Definition spi.h:60
@ SPINoSelect
slave is not selected nor unselected
Definition spi.h:62
@ SPISelectUnselect
slave is selected before transaction and unselected after
Definition spi.h:59
@ SPIUnselect
slave is not selected but unselected after transaction
Definition spi.h:61
@ SPIMaster
Definition spi.h:49
@ SPISlave
Definition spi.h:50
@ SPILSBFirst
Definition spi.h:109
@ SPIMSBFirst
Definition spi.h:108
@ SPIDiv4
Definition spi.h:117
@ SPIDiv8
Definition spi.h:118
@ SPIDiv2
Definition spi.h:116
@ SPIDiv256
Definition spi.h:123
@ SPIDiv128
Definition spi.h:122
@ SPIDiv32
Definition spi.h:120
@ SPIDiv64
Definition spi.h:121
@ SPIDiv16
Definition spi.h:119
@ SPIDss8bit
Definition spi.h:86
@ SPIDss16bit
Definition spi.h:87
SPI peripheral structure.
Definition spi.h:171
SPI transaction structure.
Definition spi.h:144
static float p[2][2]
uint16_t foo
Definition main_demo5.c:58
static float timeout
Architecture independent timing functions.
unsigned short uint16_t
Typedef defining 16 bit unsigned short type.
unsigned char uint8_t
Typedef defining 8 bit unsigned char type.