SPISettings.h
Go to the documentation of this file.
1 /****
2  * Sming Framework Project - Open Source framework for high efficiency native ESP8266 development.
3  * Created 2015 by Skurydin Alexey
4  * http://github.com/SmingHub/Sming
5  * All files of the Sming Core are provided under the LGPL v3 license.
6  *
7  * SPISettings.h
8  *
9  * Created on: Mar 2, 2016
10  * Author: harry
11  *
12  ****/
13 
14 #pragma once
15 
16 #include "Digital.h"
17 
22 // Mode Clock Polarity (CPOL) Clock Phase (CPHA)
23 // SPI_MODE0 0 0
24 // SPI_MODE1 0 1
25 // SPI_MODE2 1 0
26 // SPI_MODE3 1 1
27 
28 #define SPI_MODE0 0x00
29 #define SPI_MODE1 0x0F
30 #define SPI_MODE2 0xF0
31 #define SPI_MODE3 0xFF
32 
33 const uint32_t SPI_SPEED_DEFAULT = 4000000UL;
34 
39 struct SPISpeed {
40  uint32_t frequency;
41  uint32_t regVal;
42 
43  SPISpeed(uint32_t freq = SPI_SPEED_DEFAULT)
44  {
45  setFrequency(freq);
46  }
47 
48  SPISpeed& operator=(uint32_t freq)
49  {
50  setFrequency(freq);
51  return *this;
52  }
53 
54  bool operator==(const SPISpeed& speed) const
55  {
56  return frequency == speed.frequency;
57  }
58 
59  void setFrequency(uint32_t freq)
60  {
61  frequency = freq;
62  regVal = 0;
63  }
64 };
65 
67 {
68 public:
70  {
71 #ifdef SPI_DEBUG
72  debugf("SPISettings::SPISettings() default");
73 #endif
74  }
75 
100  SPISettings(uint32_t speed, uint8_t byteOrder, uint8_t dataMode)
101  : speed(speed), byteOrder(byteOrder), dataMode(dataMode)
102  {
103 #ifdef SPI_DEBUG
104  debugf("SPISettings(int %i, uint8 %u, uint8 %u)", speed, byteOrder, dataMode);
105 #endif
106  }
107 
108  // overload operator to check wheter the settings are equal
109  bool operator==(const SPISettings& other) const
110  {
111  return (speed == other.speed) && (byteOrder == other.byteOrder) && (dataMode == other.dataMode);
112  }
113 
114  void print(const char* s)
115  {
116 #ifdef SPI_DEBUG
117  debugf("-> %s -> SPISettings(%u, %u, %u)", s, speed.frequency, byteOrder, dataMode);
118 #endif
119  }
120 
122  uint8_t byteOrder{MSBFIRST};
123  uint8_t dataMode{SPI_MODE0};
124 };
125 
#define SPI_MODE0
Definition: SPISettings.h:28
SPISettings(uint32_t speed, uint8_t byteOrder, uint8_t dataMode)
constructor for SPISettings
Definition: SPISettings.h:100
Definition: SPISettings.h:66
uint8_t dataMode
Definition: SPISettings.h:123
uint32_t frequency
Definition: SPISettings.h:40
#define MSBFIRST
Definition: WConstants.h:62
Contains bus frequency and corresponding divisor/prescaler settings.
Definition: SPISettings.h:39
SPISettings()
Definition: SPISettings.h:69
SPISpeed speed
Definition: SPISettings.h:121
uint32_t regVal
Cached clock register value.
Definition: SPISettings.h:41
SPISpeed(uint32_t freq=SPI_SPEED_DEFAULT)
Definition: SPISettings.h:43
void setFrequency(uint32_t freq)
Definition: SPISettings.h:59
bool operator==(const SPISpeed &speed) const
Definition: SPISettings.h:54
void print(const char *s)
Definition: SPISettings.h:114
uint8_t byteOrder
Definition: SPISettings.h:122
const uint32_t SPI_SPEED_DEFAULT
Definition: SPISettings.h:33
bool operator==(const SPISettings &other) const
Definition: SPISettings.h:109
#define debugf
Definition: debug_progmem.h:127
SPISpeed & operator=(uint32_t freq)
Definition: SPISettings.h:48