libyggdrasil  v1.0.0
spi.hpp
Go to the documentation of this file.
1  /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
2  * _____.___. .___ .__.__ *
3  * \__ | | ____ ____ __| _/___________ _____|__| | *
4  * / | |/ ___\ / ___\ / __ |\_ __ \__ \ / ___/ | | *
5  * \____ / /_/ > /_/ > /_/ | | | \// __ \_\___ \| | |__ *
6  * / ______\___ /\___ /\____ | |__| (____ /____ >__|____/ *
7  * \/ /_____//_____/ \/ \/ \/ *
8  * - Midgard - *
9  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
10  * This software can be used by students and other personal of the *
11  * Bern University of Applied Sciences under the terms of the MIT *
12  * license. *
13  * For other persons this software is under the terms of the GNU *
14  * General Public License version 2. *
15  * *
16  * Copyright © 2021, Bern University of Applied Sciences. *
17  * All rights reserved. *
18  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
26 #pragma once
27 
29 
30 #include <string>
31 #include <string_view>
32 #include <array>
33 
34 namespace bsp::mid::drv {
35 
42  template<auto Context>
43  struct SPI {
44 
50  static bool init() {
51  return true;
52  }
53 
59  static bool deinit() {
60  return true;
61  }
62 
69  template<size_t N>
70  static void read(std::array<u8, N> &data) {
71  HAL_SPI_Receive(Context, data.data(), data.size(), HAL_MAX_DELAY);
72  }
73 
80  template<size_t N>
81  static void write(const std::array<u8, N> &data) {
82  HAL_SPI_Transmit(Context, const_cast<u8*>(data.data()), data.size(), HAL_MAX_DELAY);
83  }
84 
91  static void setMode(bsp::drv::SPIMode mode) {
92  while (HAL_SPI_GetState(Context) == HAL_SPI_STATE_BUSY);
93  Context->Instance->CR1 = (Context->Instance->CR1 & ~0b11) | enumValue(mode);
94  }
95 
96  };
97 
98 }
u8
uint8_t u8
Unsigned integer definitions.
Definition: types.h:36
bsp::drv::SPIMode
SPIMode
Definition: spi.hpp:37
bsp::mid::drv::SPI::init
static bool init()
Init function.
Definition: spi.hpp:50
bsp::enumValue
auto enumValue(T value)
Casts a scoped enum type into its underlying value.
Definition: utils.hpp:151
bsp::mid::drv::SPI
SPI implementation for Midgard.
Definition: spi.hpp:43
bsp::mid::drv::SPI::read
static void read(std::array< u8, N > &data)
SPI receive.
Definition: spi.hpp:70
bsp::mid::drv::SPI::deinit
static bool deinit()
Deinit function.
Definition: spi.hpp:59
bsp::mid::drv::SPI::write
static void write(const std::array< u8, N > &data)
SPI write.
Definition: spi.hpp:81
spi.hpp
Frontend for the SPI abstraction.
bsp::mid::drv
Definition: adc.hpp:32
bsp::mid::drv::SPI::setMode
static void setMode(bsp::drv::SPIMode mode)
Set the spi mode (CPOL and CPHA)
Definition: spi.hpp:91