|
96 | 96 | #define SPI_MODE2 SPI_MODE_2 |
97 | 97 | #define SPI_MODE3 SPI_MODE_3 |
98 | 98 |
|
| 99 | +#define DATA_SIZE_8BIT SPI_CR1_DFF_8_BIT |
| 100 | +#define DATA_SIZE_16BIT SPI_CR1_DFF_16_BIT |
| 101 | + |
99 | 102 | class SPISettings { |
100 | 103 | public: |
101 | 104 | SPISettings(uint32_t clock, BitOrder bitOrder, uint8_t dataMode) { |
102 | 105 | if (__builtin_constant_p(clock)) { |
103 | | - init_AlwaysInline(clock, bitOrder, dataMode); |
| 106 | + init_AlwaysInline(clock, bitOrder, dataMode, DATA_SIZE_8BIT); |
| 107 | + } else { |
| 108 | + init_MightInline(clock, bitOrder, dataMode, DATA_SIZE_8BIT); |
| 109 | + } |
| 110 | + } |
| 111 | + SPISettings(uint32_t clock, BitOrder bitOrder, uint8_t dataMode, uint32_t dataSize) { |
| 112 | + if (__builtin_constant_p(clock)) { |
| 113 | + init_AlwaysInline(clock, bitOrder, dataMode, dataSize); |
104 | 114 | } else { |
105 | | - init_MightInline(clock, bitOrder, dataMode); |
| 115 | + init_MightInline(clock, bitOrder, dataMode, dataSize); |
106 | 116 | } |
107 | 117 | } |
108 | | - SPISettings() { init_AlwaysInline(4000000, MSBFIRST, SPI_MODE0); } |
| 118 | + SPISettings() { init_AlwaysInline(4000000, MSBFIRST, SPI_MODE0, DATA_SIZE_8BIT); } |
109 | 119 | private: |
110 | | - void init_MightInline(uint32_t clock, BitOrder bitOrder, uint8_t dataMode) { |
111 | | - init_AlwaysInline(clock, bitOrder, dataMode); |
| 120 | + void init_MightInline(uint32_t clock, BitOrder bitOrder, uint8_t dataMode, uint32_t dataSize) { |
| 121 | + init_AlwaysInline(clock, bitOrder, dataMode, dataSize); |
112 | 122 | } |
113 | | - void init_AlwaysInline(uint32_t clock, BitOrder bitOrder, uint8_t dataMode) __attribute__((__always_inline__)) { |
| 123 | + void init_AlwaysInline(uint32_t clock, BitOrder bitOrder, uint8_t dataMode, uint32_t dataSize) __attribute__((__always_inline__)) { |
114 | 124 | this->clock = clock; |
115 | 125 | this->bitOrder = bitOrder; |
116 | 126 | this->dataMode = dataMode; |
| 127 | + this->dataSize = dataSize; |
117 | 128 | } |
118 | 129 | uint32_t clock; |
119 | 130 | BitOrder bitOrder; |
120 | 131 | uint8_t dataMode; |
| 132 | + uint32_t dataSize; |
121 | 133 |
|
122 | 134 | spi_dev *spi_d; |
123 | 135 | uint8_t _SSPin; |
|
0 commit comments