@@ -184,6 +184,11 @@ MCP2515::ERROR MCP2515::setMode(const CANCTRL_REQOP_MODE mode)
184
184
}
185
185
186
186
MCP2515::ERROR MCP2515::setBitrate (const CAN_SPEED canSpeed)
187
+ {
188
+ return setBitrate (canSpeed, MCP_16MHZ);
189
+ }
190
+
191
+ MCP2515::ERROR MCP2515::setBitrate (const CAN_SPEED canSpeed, CAN_CLOCK canClock)
187
192
{
188
193
ERROR error = setConfigMode ();
189
194
if (error != ERROR_OK) {
@@ -192,109 +197,256 @@ MCP2515::ERROR MCP2515::setBitrate(const CAN_SPEED canSpeed)
192
197
193
198
uint8_t set, cfg1, cfg2, cfg3;
194
199
set = 1 ;
195
- switch (canSpeed)
200
+ switch (canClock)
196
201
{
197
- case (CAN_5KBPS):
198
- cfg1 = MCP_16MHz_5kBPS_CFG1;
199
- cfg2 = MCP_16MHz_5kBPS_CFG2;
200
- cfg3 = MCP_16MHz_5kBPS_CFG3;
201
- break ;
202
+ case (MCP_8MHZ):
203
+ switch (canSpeed)
204
+ {
205
+ case (CAN_5KBPS): // 5KBPS
206
+ cfg1 = MCP_8MHz_5kBPS_CFG1;
207
+ cfg2 = MCP_8MHz_5kBPS_CFG2;
208
+ cfg3 = MCP_8MHz_5kBPS_CFG3;
209
+ break ;
202
210
203
- case (CAN_10KBPS):
204
- cfg1 = MCP_16MHz_10kBPS_CFG1 ;
205
- cfg2 = MCP_16MHz_10kBPS_CFG2 ;
206
- cfg3 = MCP_16MHz_10kBPS_CFG3 ;
207
- break ;
211
+ case (CAN_10KBPS): // 10KBPS
212
+ cfg1 = MCP_8MHz_10kBPS_CFG1 ;
213
+ cfg2 = MCP_8MHz_10kBPS_CFG2 ;
214
+ cfg3 = MCP_8MHz_10kBPS_CFG3 ;
215
+ break ;
208
216
209
- case (CAN_20KBPS):
210
- cfg1 = MCP_16MHz_20kBPS_CFG1;
211
- cfg2 = MCP_16MHz_20kBPS_CFG2;
212
- cfg3 = MCP_16MHz_20kBPS_CFG3;
213
- break ;
214
-
215
- case (CAN_31K25BPS):
216
- cfg1 = MCP_16MHz_31k25BPS_CFG1;
217
- cfg2 = MCP_16MHz_31k25BPS_CFG2;
218
- cfg3 = MCP_16MHz_31k25BPS_CFG3;
219
- break ;
217
+ case (CAN_20KBPS): // 20KBPS
218
+ cfg1 = MCP_8MHz_20kBPS_CFG1;
219
+ cfg2 = MCP_8MHz_20kBPS_CFG2;
220
+ cfg3 = MCP_8MHz_20kBPS_CFG3;
221
+ break ;
220
222
221
- case (CAN_33KBPS):
222
- cfg1 = MCP_16MHz_33kBPS_CFG1 ;
223
- cfg2 = MCP_16MHz_33kBPS_CFG2 ;
224
- cfg3 = MCP_16MHz_33kBPS_CFG3 ;
225
- break ;
223
+ case (CAN_31K25BPS): // 31.25KBPS
224
+ cfg1 = MCP_8MHz_31k25BPS_CFG1 ;
225
+ cfg2 = MCP_8MHz_31k25BPS_CFG2 ;
226
+ cfg3 = MCP_8MHz_31k25BPS_CFG3 ;
227
+ break ;
226
228
227
- case (CAN_40KBPS):
228
- cfg1 = MCP_16MHz_40kBPS_CFG1 ;
229
- cfg2 = MCP_16MHz_40kBPS_CFG2 ;
230
- cfg3 = MCP_16MHz_40kBPS_CFG3 ;
231
- break ;
229
+ case (CAN_33KBPS): // 33.33KBPS
230
+ cfg1 = MCP_8MHz_33k3BPS_CFG1 ;
231
+ cfg2 = MCP_8MHz_33k3BPS_CFG2 ;
232
+ cfg3 = MCP_8MHz_33k3BPS_CFG3 ;
233
+ break ;
232
234
233
- case (CAN_50KBPS):
234
- cfg1 = MCP_16MHz_50kBPS_CFG1 ;
235
- cfg2 = MCP_16MHz_50kBPS_CFG2 ;
236
- cfg3 = MCP_16MHz_50kBPS_CFG3 ;
237
- break ;
235
+ case (CAN_40KBPS): // 40Kbps
236
+ cfg1 = MCP_8MHz_40kBPS_CFG1 ;
237
+ cfg2 = MCP_8MHz_40kBPS_CFG2 ;
238
+ cfg3 = MCP_8MHz_40kBPS_CFG3 ;
239
+ break ;
238
240
239
- case (CAN_80KBPS):
240
- cfg1 = MCP_16MHz_80kBPS_CFG1 ;
241
- cfg2 = MCP_16MHz_80kBPS_CFG2 ;
242
- cfg3 = MCP_16MHz_80kBPS_CFG3 ;
243
- break ;
241
+ case (CAN_50KBPS): // 50Kbps
242
+ cfg1 = MCP_8MHz_50kBPS_CFG1 ;
243
+ cfg2 = MCP_8MHz_50kBPS_CFG2 ;
244
+ cfg3 = MCP_8MHz_50kBPS_CFG3 ;
245
+ break ;
244
246
245
- case (CAN_83K3BPS):
246
- cfg1 = MCP_16MHz_83k3BPS_CFG1 ;
247
- cfg2 = MCP_16MHz_83k3BPS_CFG2 ;
248
- cfg3 = MCP_16MHz_83k3BPS_CFG3 ;
249
- break ;
247
+ case (CAN_80KBPS): // 80Kbps
248
+ cfg1 = MCP_8MHz_80kBPS_CFG1 ;
249
+ cfg2 = MCP_8MHz_80kBPS_CFG2 ;
250
+ cfg3 = MCP_8MHz_80kBPS_CFG3 ;
251
+ break ;
250
252
251
- case (CAN_95KBPS):
252
- cfg1 = MCP_16MHz_95kBPS_CFG1 ;
253
- cfg2 = MCP_16MHz_95kBPS_CFG2 ;
254
- cfg3 = MCP_16MHz_95kBPS_CFG3 ;
255
- break ;
253
+ case (CAN_100KBPS): // 100Kbps
254
+ cfg1 = MCP_8MHz_100kBPS_CFG1 ;
255
+ cfg2 = MCP_8MHz_100kBPS_CFG2 ;
256
+ cfg3 = MCP_8MHz_100kBPS_CFG3 ;
257
+ break ;
256
258
257
- case (CAN_100KBPS):
258
- cfg1 = MCP_16MHz_100kBPS_CFG1 ;
259
- cfg2 = MCP_16MHz_100kBPS_CFG2 ;
260
- cfg3 = MCP_16MHz_100kBPS_CFG3 ;
261
- break ;
259
+ case (CAN_125KBPS): // 125Kbps
260
+ cfg1 = MCP_8MHz_125kBPS_CFG1 ;
261
+ cfg2 = MCP_8MHz_125kBPS_CFG2 ;
262
+ cfg3 = MCP_8MHz_125kBPS_CFG3 ;
263
+ break ;
262
264
263
- case (CAN_125KBPS):
264
- cfg1 = MCP_16MHz_125kBPS_CFG1;
265
- cfg2 = MCP_16MHz_125kBPS_CFG2;
266
- cfg3 = MCP_16MHz_125kBPS_CFG3;
267
- break ;
265
+ case (CAN_200KBPS): // 200Kbps
266
+ cfg1 = MCP_8MHz_200kBPS_CFG1;
267
+ cfg2 = MCP_8MHz_200kBPS_CFG2;
268
+ cfg3 = MCP_8MHz_200kBPS_CFG3;
269
+ break ;
270
+
271
+ case (CAN_250KBPS): // 250Kbps
272
+ cfg1 = MCP_8MHz_250kBPS_CFG1;
273
+ cfg2 = MCP_8MHz_250kBPS_CFG2;
274
+ cfg3 = MCP_8MHz_250kBPS_CFG3;
275
+ break ;
276
+
277
+ case (CAN_500KBPS): // 500Kbps
278
+ cfg1 = MCP_8MHz_500kBPS_CFG1;
279
+ cfg2 = MCP_8MHz_500kBPS_CFG2;
280
+ cfg3 = MCP_8MHz_500kBPS_CFG3;
281
+ break ;
282
+
283
+ case (CAN_1000KBPS): // 1Mbps
284
+ cfg1 = MCP_8MHz_1000kBPS_CFG1;
285
+ cfg2 = MCP_8MHz_1000kBPS_CFG2;
286
+ cfg3 = MCP_8MHz_1000kBPS_CFG3;
287
+ break ;
268
288
269
- case (CAN_200KBPS) :
270
- cfg1 = MCP_16MHz_200kBPS_CFG1 ;
271
- cfg2 = MCP_16MHz_200kBPS_CFG2 ;
272
- cfg3 = MCP_16MHz_200kBPS_CFG3;
289
+ default :
290
+ set = 0 ;
291
+ break ;
292
+ }
273
293
break ;
274
294
275
- case (CAN_250KBPS):
276
- cfg1 = MCP_16MHz_250kBPS_CFG1;
277
- cfg2 = MCP_16MHz_250kBPS_CFG2;
278
- cfg3 = MCP_16MHz_250kBPS_CFG3;
295
+ case (MCP_16MHZ):
296
+ switch (canSpeed)
297
+ {
298
+ case (CAN_5KBPS): // 5Kbps
299
+ cfg1 = MCP_16MHz_5kBPS_CFG1;
300
+ cfg2 = MCP_16MHz_5kBPS_CFG2;
301
+ cfg3 = MCP_16MHz_5kBPS_CFG3;
302
+ break ;
303
+
304
+ case (CAN_10KBPS): // 10Kbps
305
+ cfg1 = MCP_16MHz_10kBPS_CFG1;
306
+ cfg2 = MCP_16MHz_10kBPS_CFG2;
307
+ cfg3 = MCP_16MHz_10kBPS_CFG3;
308
+ break ;
309
+
310
+ case (CAN_20KBPS): // 20Kbps
311
+ cfg1 = MCP_16MHz_20kBPS_CFG1;
312
+ cfg2 = MCP_16MHz_20kBPS_CFG2;
313
+ cfg3 = MCP_16MHz_20kBPS_CFG3;
314
+ break ;
315
+
316
+ case (CAN_33KBPS): // 20Kbps
317
+ cfg1 = MCP_16MHz_33k3BPS_CFG1;
318
+ cfg2 = MCP_16MHz_33k3BPS_CFG2;
319
+ cfg3 = MCP_16MHz_33k3BPS_CFG3;
320
+ break ;
321
+
322
+ case (CAN_40KBPS): // 40Kbps
323
+ cfg1 = MCP_16MHz_40kBPS_CFG1;
324
+ cfg2 = MCP_16MHz_40kBPS_CFG2;
325
+ cfg3 = MCP_16MHz_40kBPS_CFG3;
326
+ break ;
327
+
328
+ case (CAN_50KBPS): // 50Kbps
329
+ cfg2 = MCP_16MHz_50kBPS_CFG2;
330
+ cfg3 = MCP_16MHz_50kBPS_CFG3;
331
+ break ;
332
+
333
+ case (CAN_80KBPS): // 80Kbps
334
+ cfg1 = MCP_16MHz_80kBPS_CFG1;
335
+ cfg2 = MCP_16MHz_80kBPS_CFG2;
336
+ cfg3 = MCP_16MHz_80kBPS_CFG3;
337
+ break ;
338
+
339
+ case (CAN_100KBPS): // 100Kbps
340
+ cfg1 = MCP_16MHz_100kBPS_CFG1;
341
+ cfg2 = MCP_16MHz_100kBPS_CFG2;
342
+ cfg3 = MCP_16MHz_100kBPS_CFG3;
343
+ break ;
344
+
345
+ case (CAN_125KBPS): // 125Kbps
346
+ cfg1 = MCP_16MHz_125kBPS_CFG1;
347
+ cfg2 = MCP_16MHz_125kBPS_CFG2;
348
+ cfg3 = MCP_16MHz_125kBPS_CFG3;
349
+ break ;
350
+
351
+ case (CAN_200KBPS): // 200Kbps
352
+ cfg1 = MCP_16MHz_200kBPS_CFG1;
353
+ cfg2 = MCP_16MHz_200kBPS_CFG2;
354
+ cfg3 = MCP_16MHz_200kBPS_CFG3;
355
+ break ;
356
+
357
+ case (CAN_250KBPS): // 250Kbps
358
+ cfg1 = MCP_16MHz_250kBPS_CFG1;
359
+ cfg2 = MCP_16MHz_250kBPS_CFG2;
360
+ cfg3 = MCP_16MHz_250kBPS_CFG3;
361
+ break ;
362
+
363
+ case (CAN_500KBPS): // 500Kbps
364
+ cfg1 = MCP_16MHz_500kBPS_CFG1;
365
+ cfg2 = MCP_16MHz_500kBPS_CFG2;
366
+ cfg3 = MCP_16MHz_500kBPS_CFG3;
367
+ break ;
368
+
369
+ case (CAN_1000KBPS): // 1Mbps
370
+ cfg1 = MCP_16MHz_1000kBPS_CFG1;
371
+ cfg2 = MCP_16MHz_1000kBPS_CFG2;
372
+ cfg3 = MCP_16MHz_1000kBPS_CFG3;
373
+ break ;
374
+
375
+ default :
376
+ set = 0 ;
377
+ break ;
378
+ }
279
379
break ;
280
380
281
- case (CAN_500KBPS):
282
- cfg1 = MCP_16MHz_500kBPS_CFG1;
283
- cfg2 = MCP_16MHz_500kBPS_CFG2;
284
- cfg3 = MCP_16MHz_500kBPS_CFG3;
381
+ case (MCP_20MHZ):
382
+ switch (canSpeed)
383
+ {
384
+ case (CAN_40KBPS): // 40Kbps
385
+ cfg1 = MCP_20MHz_40kBPS_CFG1;
386
+ cfg2 = MCP_20MHz_40kBPS_CFG2;
387
+ cfg3 = MCP_20MHz_40kBPS_CFG3;
388
+ break ;
389
+
390
+ case (CAN_50KBPS): // 50Kbps
391
+ cfg1 = MCP_20MHz_50kBPS_CFG1;
392
+ cfg2 = MCP_20MHz_50kBPS_CFG2;
393
+ cfg3 = MCP_20MHz_50kBPS_CFG3;
394
+ break ;
395
+
396
+ case (CAN_80KBPS): // 80Kbps
397
+ cfg1 = MCP_20MHz_80kBPS_CFG1;
398
+ cfg2 = MCP_20MHz_80kBPS_CFG2;
399
+ cfg3 = MCP_20MHz_80kBPS_CFG3;
400
+ break ;
401
+
402
+ case (CAN_100KBPS): // 100Kbps
403
+ cfg1 = MCP_20MHz_100kBPS_CFG1;
404
+ cfg2 = MCP_20MHz_100kBPS_CFG2;
405
+ cfg3 = MCP_20MHz_100kBPS_CFG3;
406
+ break ;
407
+
408
+ case (CAN_125KBPS): // 125Kbps
409
+ cfg1 = MCP_20MHz_125kBPS_CFG1;
410
+ cfg2 = MCP_20MHz_125kBPS_CFG2;
411
+ cfg3 = MCP_20MHz_125kBPS_CFG3;
412
+ break ;
413
+
414
+ case (CAN_200KBPS): // 200Kbps
415
+ cfg1 = MCP_20MHz_200kBPS_CFG1;
416
+ cfg2 = MCP_20MHz_200kBPS_CFG2;
417
+ cfg3 = MCP_20MHz_200kBPS_CFG3;
418
+ break ;
419
+
420
+ case (CAN_250KBPS): // 250Kbps
421
+ cfg1 = MCP_20MHz_250kBPS_CFG1;
422
+ cfg2 = MCP_20MHz_250kBPS_CFG2;
423
+ cfg3 = MCP_20MHz_250kBPS_CFG3;
424
+ break ;
425
+
426
+ case (CAN_500KBPS): // 500Kbps
427
+ cfg1 = MCP_20MHz_500kBPS_CFG1;
428
+ cfg2 = MCP_20MHz_500kBPS_CFG2;
429
+ cfg3 = MCP_20MHz_500kBPS_CFG3;
430
+ break ;
431
+
432
+ case (CAN_1000KBPS): // 1Mbps
433
+ cfg1 = MCP_20MHz_1000kBPS_CFG1;
434
+ cfg2 = MCP_20MHz_1000kBPS_CFG2;
435
+ cfg3 = MCP_20MHz_1000kBPS_CFG3;
436
+ break ;
437
+
438
+ default :
439
+ set = 0 ;
440
+ break ;
441
+ }
285
442
break ;
286
-
287
- case (CAN_1000KBPS):
288
- cfg1 = MCP_16MHz_1000kBPS_CFG1;
289
- cfg2 = MCP_16MHz_1000kBPS_CFG2;
290
- cfg3 = MCP_16MHz_1000kBPS_CFG3;
291
- break ;
292
443
293
444
default :
294
445
set = 0 ;
295
446
break ;
296
447
}
297
448
449
+
298
450
if (set) {
299
451
setRegister (MCP_CNF1, cfg1);
300
452
setRegister (MCP_CNF2, cfg2);
0 commit comments