STAR
Cal STAR — firmware, DAQ server, and engine design
Loading...
Searching...
No Matches
board_spi.c File Reference
#include "board_spi.h"
#include <string.h>
#include "board.h"
#include "cmsis_os2.h"
#include "main.h"
Include dependency graph for board_spi.c:

Go to the source code of this file.

Classes

struct  board_spi_route_t

Functions

static int bus_index (const SPI_HandleTypeDef *spi)
static const board_spi_route_t * route (board_spi_device_t device)
bool board_spi_init (void)
bool board_spi_routed (board_spi_device_t device)
uint8_t board_spi_mode (board_spi_device_t device)
uint32_t board_spi_clock_hz (board_spi_device_t device)
board_spi_status_t board_spi_lock (board_spi_device_t device, uint32_t deadline_ms)
void board_spi_unlock (board_spi_device_t device)
static board_spi_status_t wait_busy_low (const board_spi_route_t *r, uint32_t deadline_ms)
static board_spi_status_t shift (const board_spi_route_t *r, const uint8_t *tx, uint8_t *rx, uint16_t len, uint32_t deadline_ms)
board_spi_status_t board_spi_frame (board_spi_device_t device, const uint8_t *tx, uint8_t *rx, uint16_t len, uint32_t deadline_ms)
board_spi_status_t board_spi_transfer (board_spi_device_t device, const uint8_t *tx, uint8_t *rx, uint16_t len, uint32_t deadline_ms)
void board_spi_select (board_spi_device_t device)
void board_spi_deselect (board_spi_device_t device)
board_spi_status_t board_spi_shift (board_spi_device_t device, const uint8_t *tx, uint8_t *rx, uint16_t len, uint32_t deadline_ms)
board_spi_status_t board_spi_idle_clocks (board_spi_device_t device, uint16_t len, uint32_t deadline_ms)
static board_spi_device_t from_self_test (uint16_t device_id)
static self_test_reply_t st_reply (self_test_result_t result, int32_t diag)
self_test_reply_t board_spi_self_test_exchange (void *context, uint16_t device_id, uint8_t mode, uint32_t max_hz, self_test_spi_frame_t *frames, uint8_t count, uint32_t budget_ms)

Variables

SPI_HandleTypeDef hspi1
SPI_HandleTypeDef hspi2
SPI_HandleTypeDef hspi3
SPI_HandleTypeDef hspi4
static const board_spi_route_t routes [BOARD_SPI_COUNT]
static osMutexId_t bus_locks [4]

Function Documentation

◆ board_spi_clock_hz()

uint32_t board_spi_clock_hz ( board_spi_device_t device)

◆ board_spi_deselect()

void board_spi_deselect ( board_spi_device_t device)

Definition at line 195 of file board_spi.c.

References GPIO_PIN_SET, HAL_GPIO_WritePin(), r, and route().

Referenced by ms5611_reset(), sd_command(), and sd_read_cid().

◆ board_spi_frame()

board_spi_status_t board_spi_frame ( board_spi_device_t device,
const uint8_t * tx,
uint8_t * rx,
uint16_t len,
uint32_t deadline_ms )

◆ board_spi_idle_clocks()

board_spi_status_t board_spi_idle_clocks ( board_spi_device_t device,
uint16_t len,
uint32_t deadline_ms )

Definition at line 210 of file board_spi.c.

References BOARD_SPI_NOT_CONFIGURED, GPIO_PIN_SET, HAL_GPIO_WritePin(), NULL, r, route(), and shift().

Referenced by sd_nand_probe().

◆ board_spi_init()

bool board_spi_init ( void )

Definition at line 56 of file board_spi.c.

References bus_locks, NULL, osMutexNew(), and osMutexPrioInherit.

Referenced by board_bringup_power_up().

◆ board_spi_lock()

◆ board_spi_mode()

uint8_t board_spi_mode ( board_spi_device_t device)

Definition at line 73 of file board_spi.c.

References r, route(), SPI_PHASE_2EDGE, and SPI_POLARITY_HIGH.

Referenced by board_spi_self_test_exchange().

◆ board_spi_routed()

bool board_spi_routed ( board_spi_device_t device)

Definition at line 69 of file board_spi.c.

References route().

Referenced by board_spi_self_test_exchange().

◆ board_spi_select()

void board_spi_select ( board_spi_device_t device)

Definition at line 189 of file board_spi.c.

References GPIO_PIN_RESET, HAL_GPIO_WritePin(), r, and route().

Referenced by ms5611_reset(), sd_command(), and sd_read_cid().

◆ board_spi_self_test_exchange()

self_test_reply_t board_spi_self_test_exchange ( void * context,
uint16_t device_id,
uint8_t mode,
uint32_t max_hz,
self_test_spi_frame_t * frames,
uint8_t count,
uint32_t budget_ms )

◆ board_spi_shift()

board_spi_status_t board_spi_shift ( board_spi_device_t device,
const uint8_t * tx,
uint8_t * rx,
uint16_t len,
uint32_t deadline_ms )

Definition at line 201 of file board_spi.c.

References BOARD_SPI_NOT_CONFIGURED, r, route(), and shift().

Referenced by ms5611_reset(), sd_command(), and sd_read_cid().

◆ board_spi_transfer()

board_spi_status_t board_spi_transfer ( board_spi_device_t device,
const uint8_t * tx,
uint8_t * rx,
uint16_t len,
uint32_t deadline_ms )

◆ board_spi_unlock()

void board_spi_unlock ( board_spi_device_t device)

◆ bus_index()

int bus_index ( const SPI_HandleTypeDef * spi)
static

Definition at line 37 of file board_spi.c.

References hspi1, hspi2, hspi3, and hspi4.

Referenced by board_spi_lock(), and board_spi_unlock().

◆ from_self_test()

◆ route()

◆ shift()

board_spi_status_t shift ( const board_spi_route_t * r,
const uint8_t * tx,
uint8_t * rx,
uint16_t len,
uint32_t deadline_ms )
static

◆ st_reply()

self_test_reply_t st_reply ( self_test_result_t result,
int32_t diag )
static

Definition at line 238 of file board_spi.c.

References r, and result.

Referenced by board_spi_self_test_exchange().

◆ wait_busy_low()

board_spi_status_t wait_busy_low ( const board_spi_route_t * r,
uint32_t deadline_ms )
static

Variable Documentation

◆ bus_locks

osMutexId_t bus_locks[4]
static

Definition at line 35 of file board_spi.c.

Referenced by board_spi_init(), board_spi_lock(), and board_spi_unlock().

◆ hspi1

SPI_HandleTypeDef hspi1
extern

Definition at line 56 of file main.c.

Referenced by bus_index(), and MX_SPI1_Init().

◆ hspi2

SPI_HandleTypeDef hspi2
extern

Definition at line 57 of file main.c.

Referenced by bus_index(), and MX_SPI2_Init().

◆ hspi3

SPI_HandleTypeDef hspi3
extern

Definition at line 58 of file main.c.

Referenced by bus_index(), and MX_SPI3_Init().

◆ hspi4

SPI_HandleTypeDef hspi4
extern

Definition at line 59 of file main.c.

Referenced by board_spi_clock_hz(), bus_index(), and MX_SPI4_Init().

◆ routes

const board_spi_route_t routes[BOARD_SPI_COUNT]
static
Initial value:
= {
}
#define IMU_CS_GPIO_Port
Definition main.h:180
#define ETH_CS_GPIO_Port
Definition main.h:121
#define RADIO_BUSY_GPIO_Port
Definition main.h:106
#define BARO_CS_Pin
Definition main.h:175
#define ACCEL_CS_GPIO_Port
Definition main.h:178
#define ACCEL_CS_Pin
Definition main.h:177
#define BARO_CS_GPIO_Port
Definition main.h:176
#define RADIO_BUSY_Pin
Definition main.h:105
#define NAND_CS_GPIO_Port
Definition main.h:68
#define RADIO_CS_Pin
Definition main.h:103
#define IMU_CS_Pin
Definition main.h:179
#define NAND_CS_Pin
Definition main.h:67
#define RADIO_CS_GPIO_Port
Definition main.h:104
#define ETH_CS_Pin
Definition main.h:120
@ BOARD_SPI_ETH
Definition board_spi.h:30
@ BOARD_SPI_NAND
Definition board_spi.h:32
@ BOARD_SPI_BARO
Definition board_spi.h:29
@ BOARD_SPI_IMU
Definition board_spi.h:27
@ BOARD_SPI_HIGH_G
Definition board_spi.h:28
@ BOARD_SPI_RADIO
Definition board_spi.h:31
#define NULL
Definition usbd_def.h:44
SPI_HandleTypeDef hspi1
Definition main.c:56
SPI_HandleTypeDef hspi2
Definition main.c:57
SPI_HandleTypeDef hspi4
Definition main.c:59
SPI_HandleTypeDef hspi3
Definition main.c:58

Definition at line 24 of file board_spi.c.