|
10 | 10 |
|
11 | 11 | #include "SPI.h"
|
12 | 12 |
|
13 |
| -SPIClass::SPIClass(Spi *_spi, uint32_t _id, void(*_initCb)(void), uint32_t *_ss) : |
| 13 | +SPIClass::SPIClass(Spi *_spi, uint32_t _id, void(*_initCb)(void)) : |
14 | 14 | spi(_spi), id(_id), initCb(_initCb)
|
15 | 15 | {
|
16 |
| - for (int i=0; i<SPI_CHANNELS_NUM; i++) |
17 |
| - ssPins[i] = _ss[i]; |
18 |
| -} |
19 |
| - |
20 |
| -void SPIClass::begin() { |
21 | 16 | initCb();
|
22 | 17 |
|
23 |
| - // Set CS on NPCS3 |
24 | 18 | SPI_Configure(spi, id, SPI_MR_MSTR | SPI_MR_PS);
|
25 | 19 | SPI_Enable(spi);
|
26 | 20 | setClockDivider(1);
|
27 | 21 | setDataMode(SPI_MODE0);
|
28 | 22 | }
|
29 | 23 |
|
30 |
| -void SPIClass::addSlave(uint8_t _channel) { |
31 |
| - uint32_t pin = ssPins[_channel]; |
32 |
| - if (pin == 0) |
| 24 | +void SPIClass::begin(uint8_t _pin) { |
| 25 | + if (_pin == 0) |
33 | 26 | return;
|
34 |
| - PIO_Configure(g_APinDescription[pin].pPort, |
35 |
| - g_APinDescription[pin].ulPinType, |
36 |
| - g_APinDescription[pin].ulPin, |
37 |
| - g_APinDescription[pin].ulPinConfiguration); |
| 27 | + PIO_Configure(g_APinDescription[_pin].pPort, |
| 28 | + g_APinDescription[_pin].ulPinType, |
| 29 | + g_APinDescription[_pin].ulPin, |
| 30 | + g_APinDescription[_pin].ulPinConfiguration); |
38 | 31 | }
|
39 | 32 |
|
40 | 33 | void SPIClass::end() {
|
41 | 34 | SPI_Disable(spi);
|
42 | 35 | }
|
43 | 36 |
|
44 |
| -void SPIClass::setBitOrder(uint8_t bitOrder) { |
45 |
| - setBitOrder(bitOrder, 0); |
46 |
| - setBitOrder(bitOrder, 1); |
47 |
| - setBitOrder(bitOrder, 2); |
48 |
| - setBitOrder(bitOrder, 3); |
49 |
| -} |
| 37 | +//void SPIClass::setBitOrder(uint8_t bitOrder) { |
| 38 | +// setBitOrder(bitOrder, 0); |
| 39 | +// setBitOrder(bitOrder, 1); |
| 40 | +// setBitOrder(bitOrder, 2); |
| 41 | +// setBitOrder(bitOrder, 3); |
| 42 | +//} |
50 | 43 |
|
51 |
| -void SPIClass::setBitOrder(uint8_t bitOrder, uint8_t _channel) { |
52 |
| - // Not supported |
53 |
| -} |
| 44 | +//void SPIClass::setBitOrder(uint8_t bitOrder, uint8_t _channel) { |
| 45 | +// // Not supported |
| 46 | +//} |
54 | 47 |
|
55 | 48 | void SPIClass::setDataMode(uint8_t _mode) {
|
56 |
| - setDataMode(_mode, 0); |
57 |
| - setDataMode(_mode, 1); |
58 |
| - setDataMode(_mode, 2); |
59 |
| - setDataMode(_mode, 3); |
| 49 | + setDataMode(PIN_SPI_SS0, _mode); |
| 50 | + setDataMode(PIN_SPI_SS1, _mode); |
| 51 | + setDataMode(PIN_SPI_SS2, _mode); |
| 52 | + setDataMode(PIN_SPI_SS3, _mode); |
60 | 53 | }
|
61 | 54 |
|
62 |
| -void SPIClass::setDataMode(uint8_t _mode, uint8_t _channel) { |
| 55 | +void SPIClass::setDataMode(uint8_t _pin, uint8_t _mode) { |
| 56 | + uint32_t _channel = SPI_PIN_TO_SPI_CHANNEL(_pin); |
63 | 57 | mode[_channel] = _mode | SPI_CSR_CSAAT;
|
64 | 58 | SPI_ConfigureNPCS(spi, _channel, mode[_channel] | SPI_CSR_SCBR(divider[_channel]));
|
65 | 59 | }
|
66 | 60 |
|
67 | 61 | void SPIClass::setClockDivider(uint8_t _divider) {
|
68 |
| - setClockDivider(_divider, 0); |
69 |
| - setClockDivider(_divider, 1); |
70 |
| - setClockDivider(_divider, 2); |
71 |
| - setClockDivider(_divider, 3); |
| 62 | + setClockDivider(PIN_SPI_SS0, _divider); |
| 63 | + setClockDivider(PIN_SPI_SS1, _divider); |
| 64 | + setClockDivider(PIN_SPI_SS2, _divider); |
| 65 | + setClockDivider(PIN_SPI_SS3, _divider); |
72 | 66 | }
|
73 | 67 |
|
74 |
| -void SPIClass::setClockDivider(uint8_t _divider, uint8_t _channel) { |
| 68 | +void SPIClass::setClockDivider(uint8_t _pin, uint8_t _divider) { |
| 69 | + uint32_t _channel = SPI_PIN_TO_SPI_CHANNEL(_pin); |
75 | 70 | divider[_channel] = _divider;
|
76 | 71 | SPI_ConfigureNPCS(spi, _channel, mode[_channel] | SPI_CSR_SCBR(divider[_channel]));
|
77 | 72 | }
|
78 | 73 |
|
79 |
| -byte SPIClass::transfer(byte _data, uint8_t _channel, bool _last) { |
| 74 | +byte SPIClass::transfer(byte _pin, uint8_t _data, SPITransferMode _mode) { |
| 75 | + uint32_t _channel = SPI_PIN_TO_SPI_CHANNEL(_pin); |
80 | 76 | uint32_t d = _data | SPI_PCS(_channel);
|
81 |
| - if (_last) |
| 77 | + if (_mode == SPI_LAST) |
82 | 78 | d |= SPI_TDR_LASTXFER;
|
83 | 79 |
|
84 | 80 | // SPI_Write(spi, _channel, _data);
|
@@ -117,12 +113,5 @@ static void SPI_0_Init(void) {
|
117 | 113 | g_APinDescription[PIN_SPI_SCK].ulPinConfiguration);
|
118 | 114 | }
|
119 | 115 |
|
120 |
| -uint32_t SPI_0_SS[] = { |
121 |
| - PIN_SPI_SS0, |
122 |
| - PIN_SPI_SS1, |
123 |
| - PIN_SPI_SS2, |
124 |
| - PIN_SPI_SS3 |
125 |
| -}; |
126 |
| - |
127 |
| -SPIClass SPI_0(SPI_INTERFACE, SPI_INTERFACE_ID, SPI_0_Init, SPI_0_SS); |
| 116 | +SPIClass SPI(SPI_INTERFACE, SPI_INTERFACE_ID, SPI_0_Init); |
128 | 117 | #endif
|
0 commit comments