Pārlūkot izejas kodu

LPC1768 - Don't change CS pin state (#13015)

Andy Shaw 6 gadus atpakaļ
vecāks
revīzija
9091110460
1 mainītis faili ar 48 papildinājumiem un 80 dzēšanām
  1. 48
    80
      Marlin/src/HAL/HAL_LPC1768/HAL_spi.cpp

+ 48
- 80
Marlin/src/HAL/HAL_LPC1768/HAL_spi.cpp Parādīt failu

68
 
68
 
69
   static uint8_t SPI_speed = 0;
69
   static uint8_t SPI_speed = 0;
70
 
70
 
71
-  static uint8_t spiTransfer(uint8_t b) {
71
+  static inline uint8_t spiTransfer(const uint8_t b) {
72
     return swSpiTransfer(b, SPI_speed, SCK_PIN, MISO_PIN, MOSI_PIN);
72
     return swSpiTransfer(b, SPI_speed, SCK_PIN, MISO_PIN, MOSI_PIN);
73
   }
73
   }
74
 
74
 
75
-  void spiBegin() {
75
+  inline void spiBegin() {
76
     swSpiBegin(SCK_PIN, MISO_PIN, MOSI_PIN);
76
     swSpiBegin(SCK_PIN, MISO_PIN, MOSI_PIN);
77
   }
77
   }
78
 
78
 
79
-  void spiInit(uint8_t spiRate) {
79
+  inline void spiInit(const uint8_t spiRate) {
80
     SPI_speed = swSpiInit(spiRate, SCK_PIN, MOSI_PIN);
80
     SPI_speed = swSpiInit(spiRate, SCK_PIN, MOSI_PIN);
81
   }
81
   }
82
 
82
 
83
-  uint8_t spiRec() {
84
-    uint8_t b = spiTransfer(0xFF);
85
-    return b;
86
-  }
83
+  inline uint8_t spiRec() { return spiTransfer(0xFF); }
87
 
84
 
88
-  void spiRead(uint8_t*buf, uint16_t nbyte) {
85
+  inline void spiRead(uint8_t * const buf, const uint16_t nbyte) {
89
     if (nbyte == 0) return;
86
     if (nbyte == 0) return;
90
-    for (int i = 0; i < nbyte; i++) {
87
+    for (int i = 0; i < nbyte; i++)
91
       buf[i] = spiTransfer(0xFF);
88
       buf[i] = spiTransfer(0xFF);
92
-    }
93
   }
89
   }
94
 
90
 
95
-  void spiSend(uint8_t b) {
91
+  inline void spiSend(const uint8_t b) {
96
     uint8_t response = spiTransfer(b);
92
     uint8_t response = spiTransfer(b);
97
     UNUSED(response);
93
     UNUSED(response);
98
   }
94
   }
99
 
95
 
100
-  void spiSend(const uint8_t* buf, size_t n) {
101
-    uint8_t response;
96
+  inline void spiSend(const uint8_t* buf, const size_t n) {
102
     if (n == 0) return;
97
     if (n == 0) return;
103
-    for (uint16_t i = 0; i < n; i++) {
104
-      response = spiTransfer(buf[i]);
105
-    }
106
-    UNUSED(response);
98
+    for (uint16_t i = 0; i < n; i++)
99
+      (void)spiTransfer(buf[i]);
107
   }
100
   }
108
 
101
 
109
-  void spiSendBlock(uint8_t token, const uint8_t* buf) {
110
-    uint8_t response;
111
-    response = spiTransfer(token);
112
-
113
-    for (uint16_t i = 0; i < 512; i++) {
114
-      response = spiTransfer(buf[i]);
115
-    }
116
-    UNUSED(response);
117
-    WRITE(SS_PIN, HIGH);
102
+  inline void spiSendBlock(const uint8_t token, const uint8_t * const buf) {
103
+    (void)spiTransfer(token);
104
+    for (uint16_t i = 0; i < 512; i++)
105
+      (void)spiTransfer(buf[i]);
118
   }
106
   }
119
 
107
 
120
 #else
108
 #else
143
     #define LPC_SSPn LPC_SSP1
131
     #define LPC_SSPn LPC_SSP1
144
   #endif
132
   #endif
145
 
133
 
146
-  void spiBegin() {  // setup SCK, MOSI & MISO pins for SSP0
134
+  inline void spiBegin() {  // setup SCK, MOSI & MISO pins for SSP0
147
     PINSEL_CFG_Type PinCfg;  // data structure to hold init values
135
     PINSEL_CFG_Type PinCfg;  // data structure to hold init values
148
     PinCfg.Funcnum = 2;
136
     PinCfg.Funcnum = 2;
149
     PinCfg.OpenDrain = 0;
137
     PinCfg.OpenDrain = 0;
168
     SSP_Cmd(LPC_SSPn, ENABLE);  // start SSP running
156
     SSP_Cmd(LPC_SSPn, ENABLE);  // start SSP running
169
   }
157
   }
170
 
158
 
171
-  void spiInit(uint8_t spiRate) {
159
+  inline void spiInit(const uint8_t spiRate) {
172
     // table to convert Marlin spiRates (0-5 plus default) into bit rates
160
     // table to convert Marlin spiRates (0-5 plus default) into bit rates
173
     uint32_t Marlin_speed[7]; // CPSR is always 2
161
     uint32_t Marlin_speed[7]; // CPSR is always 2
174
     Marlin_speed[0] = 8333333; //(SCR:  2)  desired: 8,000,000  actual: 8,333,333  +4.2%  SPI_FULL_SPEED
162
     Marlin_speed[0] = 8333333; //(SCR:  2)  desired: 8,000,000  actual: 8,333,333  +4.2%  SPI_FULL_SPEED
186
     SSP_Init(LPC_SSPn, &HW_SPI_init);  // puts the values into the proper bits in the SSP0 registers
174
     SSP_Init(LPC_SSPn, &HW_SPI_init);  // puts the values into the proper bits in the SSP0 registers
187
   }
175
   }
188
 
176
 
189
-
190
-  static uint8_t doio(uint8_t b) {
177
+  static inline uint8_t doio(const uint8_t b) {
191
     /* send and receive a single byte */
178
     /* send and receive a single byte */
192
     SSP_SendData(LPC_SSPn, b & 0x00FF);
179
     SSP_SendData(LPC_SSPn, b & 0x00FF);
193
     while (SSP_GetStatus(LPC_SSPn, SSP_STAT_BUSY));  // wait for it to finish
180
     while (SSP_GetStatus(LPC_SSPn, SSP_STAT_BUSY));  // wait for it to finish
194
     return SSP_ReceiveData(LPC_SSPn) & 0x00FF;
181
     return SSP_ReceiveData(LPC_SSPn) & 0x00FF;
195
   }
182
   }
196
 
183
 
197
-  void spiSend(uint8_t b) {
198
-    doio(b);
199
-  }
200
-
184
+  inline void spiSend(const uint8_t b) { doio(b); }
201
 
185
 
202
-  void spiSend(const uint8_t* buf, size_t n) {
186
+  inline void spiSend(const uint8_t* buf, const size_t n) {
203
     if (n == 0) return;
187
     if (n == 0) return;
204
-    for (uint16_t i = 0; i < n; i++) {
205
-      doio(buf[i]);
206
-    }
188
+    for (uint16_t i = 0; i < n; i++) doio(buf[i]);
207
   }
189
   }
208
 
190
 
209
-  void spiSend(uint32_t chan, byte b) {
191
+  inline void spiSend(const uint32_t chan, const byte b) {
210
   }
192
   }
211
 
193
 
212
-  void spiSend(uint32_t chan, const uint8_t* buf, size_t n) {
194
+  inline void spiSend(const uint32_t chan, const uint8_t * const buf, const size_t n) {
213
   }
195
   }
214
 
196
 
215
   // Read single byte from SPI
197
   // Read single byte from SPI
216
-  uint8_t spiRec() {
217
-    return doio(0xff);
218
-  }
198
+  inline uint8_t spiRec() { return doio(0xFF); }
219
 
199
 
220
-  uint8_t spiRec(uint32_t chan) {
221
-    return 0;
222
-  }
200
+  inline uint8_t spiRec(const uint32_t chan) { return 0; }
223
 
201
 
224
   // Read from SPI into buffer
202
   // Read from SPI into buffer
225
-  void spiRead(uint8_t*buf, uint16_t nbyte) {
203
+  inline void spiRead(uint8_t * const buf, const uint16_t nbyte) {
226
     if (nbyte == 0) return;
204
     if (nbyte == 0) return;
227
-    for (int i = 0; i < nbyte; i++) {
228
-      buf[i] = doio(0xff);
229
-    }
205
+    for (int i = 0; i < nbyte; i++)
206
+      buf[i] = doio(0xFF);
230
   }
207
   }
231
 
208
 
232
-  static uint8_t spiTransfer(uint8_t b) {
233
-    return doio(b);
234
-  }
209
+  static uint8_t spiTransfer(const uint8_t b) { return doio(b); }
235
 
210
 
236
   // Write from buffer to SPI
211
   // Write from buffer to SPI
237
-  void spiSendBlock(uint8_t token, const uint8_t* buf) {
238
-    uint8_t response;
239
-    response = spiTransfer(token);
240
-
241
-    for (uint16_t i = 0; i < 512; i++) {
242
-      response = spiTransfer(buf[i]);
243
-    }
244
-    UNUSED(response);
212
+  inline void spiSendBlock(const uint8_t token, const uint8_t * const buf) {
213
+    (void)spiTransfer(token);
214
+    for (uint16_t i = 0; i < 512; i++)
215
+      (void)spiTransfer(buf[i]);
245
   }
216
   }
246
 
217
 
247
   /** Begin SPI transaction, set clock, bit order, data mode */
218
   /** Begin SPI transaction, set clock, bit order, data mode */
248
-  void spiBeginTransaction(uint32_t spiClock, uint8_t bitOrder, uint8_t dataMode) {
219
+  inline void spiBeginTransaction(const uint32_t spiClock, const uint8_t bitOrder, const uint8_t dataMode) {
249
     // TODO: to be implemented
220
     // TODO: to be implemented
250
 
221
 
251
   }
222
   }
254
 
225
 
255
 void SPIClass::begin() { spiBegin(); }
226
 void SPIClass::begin() { spiBegin(); }
256
 
227
 
257
-void SPIClass::beginTransaction(SPISettings cfg) {
228
+void SPIClass::beginTransaction(const SPISettings cfg) {
258
   uint8_t spiRate;
229
   uint8_t spiRate;
259
-  switch(cfg.spiRate()) {
260
-    case 8000000: spiRate=0 ;break;
261
-    case 4000000: spiRate=1 ;break;
262
-    case 2000000: spiRate=2 ;break;
263
-    case 1000000: spiRate=3 ;break;
264
-    case  500000: spiRate=4 ;break;
265
-    case  250000: spiRate=5 ;break;
266
-    case  125000: spiRate=6 ;break;
267
-    default: spiRate=2; break;
230
+  switch (cfg.spiRate()) {
231
+    case 8000000: spiRate = 0 ;break;
232
+    case 4000000: spiRate = 1 ;break;
233
+    case 2000000: spiRate = 2 ;break;
234
+    case 1000000: spiRate = 3 ;break;
235
+    case  500000: spiRate = 4 ;break;
236
+    case  250000: spiRate = 5 ;break;
237
+    case  125000: spiRate = 6 ;break;
238
+    default: spiRate = 2; break;
268
   }
239
   }
269
   spiInit(spiRate);
240
   spiInit(spiRate);
270
 }
241
 }
271
 
242
 
272
-uint8_t SPIClass::transfer(uint8_t B) {
273
-  return spiTransfer(B);
274
-}
275
-uint16_t SPIClass::transfer16(uint16_t data) {
276
-  uint16_t buffer;
277
-  buffer = transfer((data>>8) & 0xFF) << 8;
278
-  buffer |= transfer(data & 0xFF) && 0xFF;
279
-  return buffer;
243
+uint8_t SPIClass::transfer(const uint8_t B) { return spiTransfer(B); }
244
+
245
+uint16_t SPIClass::transfer16(const uint16_t data) {
246
+  return (transfer((data >> 8) & 0xFF) << 8);
247
+       | (transfer(data & 0xFF) & 0xFF);
280
 }
248
 }
281
 
249
 
282
 SPIClass SPI;
250
 SPIClass SPI;

Notiek ielāde…
Atcelt
Saglabāt