libDaisy
Hardware Library for Daisy
Loading...
Searching...
No Matches
spi.h
Go to the documentation of this file.
1#pragma once
2#ifndef DSY_SPI_H
3#define DSY_SPI_H
4
5#include "daisy_core.h"
6
7/* TODO:
8- Add documentation
9- Add IT
10*/
11
12namespace daisy
13{
20{
21 public:
22 struct Config
23 {
24 enum class Peripheral
25 {
26 SPI_1,
27 SPI_2,
28 SPI_3,
29 SPI_4,
30 SPI_5,
31 SPI_6,
32 };
33
34 enum class Mode
35 {
36 MASTER,
37 SLAVE,
38 };
39
40 enum class Direction
41 {
46 };
47
48 enum class ClockPolarity
49 {
50 LOW,
51 HIGH,
52 };
53
54 enum class ClockPhase
55 {
58 };
59
60 enum class NSS
61 {
62 SOFT,
65 };
66
67 enum class BaudPrescaler
68 {
69 PS_2,
70 PS_4,
71 PS_8,
72 PS_16,
73 PS_32,
74 PS_64,
75 PS_128,
76 PS_256,
77 };
78
79 struct
80 {
86
88 {
89 // user must specify periph, mode, direction, nss, and pin_config
90 datasize = 8;
94 }
95
99 unsigned long datasize;
104 };
105
106 SpiHandle() : pimpl_(nullptr) {}
107 SpiHandle(const SpiHandle& other) = default;
108 SpiHandle& operator=(const SpiHandle& other) = default;
109
111 enum class Result
112 {
113 OK,
114 ERR
115 };
116
117 enum class DmaDirection
118 {
119 RX,
120 TX,
121 RX_TX,
122 };
123
126
128 const Config& GetConfig() const;
129
131 typedef void (*StartCallbackFunctionPtr)(void* context);
133 typedef void (*EndCallbackFunctionPtr)(void* context, Result result);
134
135
143
151
161 size_t size,
162 uint32_t timeout = 100);
163
175 size_t size,
178 void* callback_context);
179
191 size_t size,
194 void* callback_context);
195
207 Result
210 size_t size,
213 void* callback_context);
214
217
218 class Impl;
220 private:
221 Impl* pimpl_;
222};
223
224extern "C"
225{
228};
229
231} // namespace daisy
232
233#endif
Definition leddriver.h:33
Definition spi.h:20
Result BlockingTransmitAndReceive(uint8_t *tx_buff, uint8_t *rx_buff, size_t size, uint32_t timeout=100)
Result DmaTransmit(uint8_t *buff, size_t size, SpiHandle::StartCallbackFunctionPtr start_callback, SpiHandle::EndCallbackFunctionPtr end_callback, void *callback_context)
void(* EndCallbackFunctionPtr)(void *context, Result result)
Definition spi.h:133
Result DmaReceive(uint8_t *buff, size_t size, SpiHandle::StartCallbackFunctionPtr start_callback, SpiHandle::EndCallbackFunctionPtr end_callback, void *callback_context)
Result DmaTransmitAndReceive(uint8_t *tx_buff, uint8_t *rx_buff, size_t size, SpiHandle::StartCallbackFunctionPtr start_callback, SpiHandle::EndCallbackFunctionPtr end_callback, void *callback_context)
SpiHandle(const SpiHandle &other)=default
const Config & GetConfig() const
Result BlockingTransmit(uint8_t *buff, size_t size, uint32_t timeout=100)
Result BlockingReceive(uint8_t *buffer, uint16_t size, uint32_t timeout)
Result Init(const Config &config)
DmaDirection
Definition spi.h:118
SpiHandle & operator=(const SpiHandle &other)=default
SpiHandle()
Definition spi.h:106
void(* StartCallbackFunctionPtr)(void *context)
Definition spi.h:131
Result
Definition spi.h:112
void dsy_spi_global_init()
Hardware defines and helpers for daisy field platform.
Definition index.h:2
Definition spi.h:23
Mode
Definition spi.h:35
ClockPolarity clock_polarity
Definition spi.h:100
BaudPrescaler
Definition spi.h:68
Peripheral periph
Definition spi.h:96
NSS
Definition spi.h:61
ClockPolarity
Definition spi.h:49
Direction
Definition spi.h:41
ClockPhase
Definition spi.h:55
dsy_gpio_pin sclk
Definition spi.h:81
struct daisy::SpiHandle::Config::@16 pin_config
Mode mode
Definition spi.h:97
dsy_gpio_pin mosi
Definition spi.h:83
Peripheral
Definition spi.h:25
NSS nss
Definition spi.h:102
dsy_gpio_pin nss
Definition spi.h:84
ClockPhase clock_phase
Definition spi.h:101
BaudPrescaler baud_prescaler
Definition spi.h:103
dsy_gpio_pin miso
Definition spi.h:82
Config()
Definition spi.h:87
Direction direction
Definition spi.h:98
unsigned long datasize
Definition spi.h:99
Definition daisy_core.h:205