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