40#error "ChibiOS operates only in SPI_MASTER mode (Slave is TODO)"
44#error "ChibiOS architectures don't have SPI0"
48#ifndef SPI_THREAD_STACK_SIZE
49#define SPI_THREAD_STACK_SIZE 512
53#ifndef SPI_DMA_BUF_LEN
54#define SPI_DMA_BUF_LEN 512
59#if defined(STM32F7XX) || defined(STM32H7XX)
206#if defined(STM32F1XX) || defined(STM32F4XX)
211#if defined(STM32F1XX) || defined(STM32F4XX) || defined(STM32F7XX)
250#if defined(STM32H7XX)
276#if defined(STM32F7XX)
283#if defined(STM32H7XX)
309 if ((
p->trans_insert_idx ==
p->trans_extract_idx) ||
p->suspend) {
322#if defined(HAL_LLD_SELECT_SPI_V2)
335 if (
t->input_length >=
t->output_length) {
350 if (
t->before_cb != 0) {
355#if defined(STM32F7XX) || defined(STM32H7XX)
357 memcpy(i->dma_buf_out, (
void *)
t->output_buf, (
size_t)
t->output_length);
361 memcpy((
void *)
t->input_buf, i->dma_buf_in, (
size_t)
t->input_length);
373 p->trans_extract_idx++;
375 p->trans_extract_idx = 0;
388 if (
t->after_cb != 0) {
492#if defined(STM32H7XX)
539 idx =
p->trans_insert_idx + 1;
541 if ((
idx ==
p->trans_extract_idx) || ((
t->input_length == 0) && (
t->output_length == 0))) {
551 p->trans[
p->trans_insert_idx] =
t;
552 p->trans_insert_idx =
idx;
697 if (
p->suspend ==
slave + 1) {
#define SPI_SELECT_SLAVE3_PIN
#define SPI_SELECT_SLAVE0_PORT
#define SPI_SELECT_SLAVE1_PIN
#define SPI_SELECT_SLAVE4_PORT
#define SPI_SELECT_SLAVE0_PIN
#define SPI_SELECT_SLAVE4_PIN
#define SPI_SELECT_SLAVE3_PORT
#define SPI_SELECT_SLAVE1_PORT
#define SPI_SELECT_SLAVE2_PORT
#define SPI_SELECT_SLAVE2_PIN
void gpio_setup_output(ioportid_t port, uint16_t gpios)
Setup one or more pins of the given GPIO port as outputs.
static void gpio_set(ioportid_t port, uint16_t pin)
Set a gpio output to high level.
static void gpio_clear(ioportid_t port, uint16_t pin)
Clear a gpio output to low level.
#define SPI_THREAD_STACK_SIZE
static void thd_spi(void *arg)
Default spi thread.
static uint32_t spi_resolve_CR1(struct spi_transaction *t)
Resolve CR1 (or CFG1)
static void handle_spi_thd(struct spi_periph *p)
main thread function
static THD_WORKING_AREA(wa_thd_spi1, SPI_THREAD_STACK_SIZE)
static uint32_t spi_resolve_CR2(struct spi_transaction *t)
Resolve CR2 (or CFG2)
static ioportid_t spi_resolve_slave_port(uint8_t slave)
Resolve slave port.
static uint16_t spi_resolve_slave_pin(uint8_t slave)
Resolve slave pin.
#define SPI_SELECT_SLAVE5_PIN
#define SPI_SELECT_SLAVE5_PORT
Some architecture independent helper functions for GPIOs.
enum SPITransactionStatus status
bool spi_submit(struct spi_periph *p, struct spi_transaction *t)
Submit SPI transaction.
bool spi_lock(struct spi_periph *p, uint8_t slave)
spi_lock() function
#define SPI_TRANSACTION_QUEUE_LEN
SPI transaction queue length.
void spi_slave_unselect(uint8_t slave)
spi_slave_unselect() function
void spi1_arch_init(void)
Architecture dependent SPI1 initialization.
process_rx_dma_interrupt & spi2
receive transferred over DMA
void spi_slave_select(uint8_t slave)
spi_slave_select() function
void spi2_arch_init(void)
Architecture dependent SPI2 initialization.
process_rx_dma_interrupt & spi1
receive transferred over DMA
bool spi_resume(struct spi_periph *p, uint8_t slave)
spi_resume() function
void spi_init_slaves(void)
spi_init_slaves() function
@ SPICpolIdleHigh
CPOL = 1.
@ SPISelect
slave is selected before transaction but not unselected
@ SPISelectUnselect
slave is selected before transaction and unselected after
@ SPIUnselect
slave is not selected but unselected after transaction
SPI peripheral structure.
SPI transaction structure.
Specific RAM section for DMA usage on F7.
#define IN_DMA_SECTION(var)
#define IN_BDMA_SECTION(var)
Architecture independent SPI (Serial Peripheral Interface) API.
unsigned short uint16_t
Typedef defining 16 bit unsigned short type.
unsigned int uint32_t
Typedef defining 32 bit unsigned int type.
unsigned char uint8_t
Typedef defining 8 bit unsigned char type.