Tool Libs
UMIT-TIROL Institute of Automation and Control Engineering library collection
 
Loading...
Searching...
No Matches
spi.h
Go to the documentation of this file.
1
6#pragma once
7#include <utils/queue.h>
8#include <utils/deadline.h>
9
10#include "gpio.h"
11#include "registry.h"
12namespace SPI {
13class Request; //< forward declaration
14enum class Mode { M0, M1, M2, M3 }; //< SPI Modes 0 - 3
15enum class FirstBit { MSB, LSB }; //< transmission first bit significance
22struct Device {
23 Sink<Request> &bus;
27 struct Conf {
28 Mode mode;
29 FirstBit fsb;
30 bool operator!=(const Conf &o) {
31 return mode != o.mode || fsb != o.fsb;
32 }
33 } const conf;
34 Device(Sink<Request> &bus, DIO cs, Conf c) : bus(bus), cs(cs), conf(c) {
35 select(false);
36 }
37
42 void select(bool sel) {
43 cs.set(!sel);
44 }
45
47 virtual void callback(const Request req)=0;
48};
49
63
68struct HW : public Sink<Request> {
69 inline static Registry<HW, SPI_HandleTypeDef, 4> reg{};
70
72 Deadline deadline{};
73 struct {
74 bool xfer;
75 Device::Conf conf;
76 } active{};
77
79 struct Conf {
80 SPI_TypeDef *spi;
81 AFIO miso, mosi, sck;
82 uint32_t prescaler;
84 };
86 HW(const Conf &conf);
87 bool full() override;
88 void push(Request &&rq) override;
89 using Sink<Request>::push;
90 void irqHandler();
91 SPI_HandleTypeDef handle{};
92};
93}
Wrapper class for pins in alternate configuration mode.
Definition gpio.h:60
Wrapper class for simple digital input/output pin.
Definition gpio.h:13
void set(bool high)
set digital output level
Definition gpio.h:37
simple Buffer backed queue implementation
Definition queue.h:12
registry that maps classes to HAL handles
Definition registry.h:13
Copyright (c) 2023 IACE.
Copyright (c) 2020 IACE.
Copyright (c) 2023 IACE.
Copyright (c) 2023 IACE.
dynamically allocated, but fixed-size buffer template
Definition buffer.h:18
simple solution for keeping track of timeouts
Definition deadline.h:15
SPI Configuration.
Definition spi.h:27
Mode mode
Mode configuration of SPI device.
Definition spi.h:28
FirstBit fsb
first bit significance
Definition spi.h:29
generic SPI device wrapper.
Definition spi.h:22
void select(bool sel)
chipselect activation
Definition spi.h:42
struct SPI::Device::Conf conf
necessary SPI configuration
DIO cs
GPIO chipselect line.
Definition spi.h:25
virtual void callback(const Request req)=0
is called as soon as requested data arrived over wire
SPI Peripheral Driver.
Definition spi.h:68
AFIO sck
initialized pins
Definition spi.h:81
bool full() override
check if sink is full
Definition spi.cpp:98
uint32_t prescaler
must be of value SPI_BaudRate_Prescaler from the STM HAL
Definition spi.h:82
SPI_TypeDef * spi
SPI peripheral.
Definition spi.h:80
peripheral configuration
Definition spi.h:79
struct defining an SPI request.
Definition spi.h:54
Buffer< uint8_t > data
transfer data
Definition spi.h:56
Device * dev
pointer to the calling SPI::Device instance
Definition spi.h:55
enum SPI::Request::Direction dir
direction the data should travel
Direction
Definition spi.h:57
@ MOSI
Master out, Slave in.
Definition spi.h:58
@ MISO
Master in, Slave out.
Definition spi.h:59
@ BOTH
Both in, Both out.
Definition spi.h:60
generic object sink, i.e.
Definition streams.h:15