Paparazzi UAS  v7.0_unstable
Paparazzi is a free software Unmanned Aircraft System.
spi_arch.c File Reference

Implementation of SPI interface for ChibiOS arch. More...

#include "mcu_periph/spi.h"
#include "mcu_periph/gpio.h"
#include <BOARD_CONFIG>
#include <string.h>
#include "mcu_periph/ram_arch.h"
+ Include dependency graph for spi_arch.c:

Go to the source code of this file.

Data Structures

struct  spi_init
 

Macros

#define SPI_THREAD_STACK_SIZE   512
 
#define SPI_DMA_BUF_LEN   512
 

Functions

static ioportid_t spi_resolve_slave_port (uint8_t slave)
 Resolve slave port. More...
 
static uint16_t spi_resolve_slave_pin (uint8_t slave)
 Resolve slave pin. More...
 
static uint32_t spi_resolve_CR1 (struct spi_transaction *t)
 Resolve CR1 (or CFG1) More...
 
static uint32_t spi_resolve_CR2 (struct spi_transaction *t)
 Resolve CR2 (or CFG2) More...
 
static void handle_spi_thd (struct spi_periph *p)
 main thread function More...
 
static void thd_spi (void *arg)
 Default spi thread. More...
 
static IN_DMA_SECTION (struct spi_init spi1_init_s)
 Configure SPI peripherals. More...
 
static THD_WORKING_AREA (wa_thd_spi1, SPI_THREAD_STACK_SIZE)
 
void spi1_arch_init (void)
 Architecture dependent SPI1 initialization. More...
 
static THD_WORKING_AREA (wa_thd_spi2, SPI_THREAD_STACK_SIZE)
 
void spi2_arch_init (void)
 Architecture dependent SPI2 initialization. More...
 
bool spi_submit (struct spi_periph *p, struct spi_transaction *t)
 Submit SPI transaction. More...
 
void spi_slave_select (uint8_t slave)
 spi_slave_select() function More...
 
void spi_slave_unselect (uint8_t slave)
 spi_slave_unselect() function More...
 
bool spi_lock (struct spi_periph *p, uint8_t slave)
 spi_lock() function More...
 
bool spi_resume (struct spi_periph *p, uint8_t slave)
 spi_resume() function More...
 
void spi_init_slaves (void)
 spi_init_slaves() function More...
 

Detailed Description

Implementation of SPI interface for ChibiOS arch.

Only Master mode is allowed in ChibiOS.

Definition in file spi_arch.c.


Data Structure Documentation

◆ spi_init

struct spi_init

Definition at line 58 of file spi_arch.c.

Data Fields
char * name
semaphore_t sem

Macro Definition Documentation

◆ SPI_DMA_BUF_LEN

#define SPI_DMA_BUF_LEN   512

Definition at line 54 of file spi_arch.c.

◆ SPI_THREAD_STACK_SIZE

#define SPI_THREAD_STACK_SIZE   512

Definition at line 49 of file spi_arch.c.

Function Documentation

◆ handle_spi_thd()

static void handle_spi_thd ( struct spi_periph p)
static

◆ IN_DMA_SECTION()

static IN_DMA_SECTION ( struct spi_init  spi1_init_s)
static
Initial value:
= {
.name = "spi2",
.sem = __SEMAPHORE_DATA(spi2_init_s.sem, 0),
}

Configure SPI peripherals.

◆ spi_resolve_CR1()

static uint32_t spi_resolve_CR1 ( struct spi_transaction t)
inlinestatic

Resolve CR1 (or CFG1)

Given the transaction settings, returns the right configuration of SPIx_CR1 register.

This function is currently architecture dependent (for STM32F1xx STM32F4xx, STM32F7xx and STM32H7xx only) TODO: extend for other architectures too

Parameters
[in]tpointer to a spi_transaction struct

Definition at line 203 of file spi_arch.c.

References SPICphaEdge2, SPICpolIdleHigh, SPIDiv128, SPIDiv16, SPIDiv2, SPIDiv256, SPIDiv32, SPIDiv4, SPIDiv64, SPIDiv8, SPIDss16bit, and SPILSBFirst.

Referenced by handle_spi_thd().

+ Here is the caller graph for this function:

◆ spi_resolve_CR2()

static uint32_t spi_resolve_CR2 ( struct spi_transaction t)
inlinestatic

Resolve CR2 (or CFG2)

Given the transaction settings, returns the right configuration of SPIx_CR2 register.

This function is currently architecture dependent (for STM32F1xx STM32F4xx, STM32F7xx and STM32H7xx only) TODO: extend for other architectures too

Parameters
[in]tpointer to a spi_transaction struct

Definition at line 273 of file spi_arch.c.

References SPICphaEdge2, SPICpolIdleHigh, SPIDss16bit, and SPILSBFirst.

Referenced by handle_spi_thd().

+ Here is the caller graph for this function:

◆ spi_resolve_slave_pin()

static uint16_t spi_resolve_slave_pin ( uint8_t  slave)
inlinestatic

Resolve slave pin.

Given the slave number and the board config file, returns the right pin (i.e. 12)

Parameters
[in]slaveindex number of a slave

Definition at line 137 of file spi_arch.c.

References SPI_SELECT_SLAVE0_PIN, SPI_SELECT_SLAVE1_PIN, SPI_SELECT_SLAVE2_PIN, SPI_SELECT_SLAVE3_PIN, SPI_SELECT_SLAVE4_PIN, and SPI_SELECT_SLAVE5_PIN.

Referenced by handle_spi_thd().

+ Here is the caller graph for this function:

◆ spi_resolve_slave_port()

static ioportid_t spi_resolve_slave_port ( uint8_t  slave)
inlinestatic

Resolve slave port.

Given the slave number and the board config file, returns the right port (i.e. GPIOC)

Parameters
[in]slaveindex number of a slave

Definition at line 75 of file spi_arch.c.

References SPI_SELECT_SLAVE0_PORT, SPI_SELECT_SLAVE1_PORT, SPI_SELECT_SLAVE2_PORT, SPI_SELECT_SLAVE3_PORT, SPI_SELECT_SLAVE4_PORT, and SPI_SELECT_SLAVE5_PORT.

Referenced by handle_spi_thd().

+ Here is the caller graph for this function:

◆ thd_spi()

static void thd_spi ( void *  arg)
static

Default spi thread.

Parameters
argThe SPI perpheral (struct spi_periph)

Definition at line 399 of file spi_arch.c.

References handle_spi_thd(), spi_periph::init_struct, spi_init::name, and TRUE.

Referenced by spi1_arch_init(), and spi2_arch_init().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ THD_WORKING_AREA() [1/2]

static THD_WORKING_AREA ( wa_thd_spi1  ,
SPI_THREAD_STACK_SIZE   
)
static

◆ THD_WORKING_AREA() [2/2]

static THD_WORKING_AREA ( wa_thd_spi2  ,
SPI_THREAD_STACK_SIZE   
)
static