@@ -226,7 +226,7 @@ MCP2515::ERROR MCP2515::setBitrate(const CAN_SPEED canSpeed, CAN_CLOCK canClock)
226226 cfg3 = MCP_8MHz_31k25BPS_CFG3;
227227 break ;
228228
229- case (CAN_33KBPS): // 33.33KBPS
229+ case (CAN_33KBPS): // 33.333KBPS
230230 cfg1 = MCP_8MHz_33k3BPS_CFG1;
231231 cfg2 = MCP_8MHz_33k3BPS_CFG2;
232232 cfg3 = MCP_8MHz_33k3BPS_CFG3;
@@ -313,7 +313,7 @@ MCP2515::ERROR MCP2515::setBitrate(const CAN_SPEED canSpeed, CAN_CLOCK canClock)
313313 cfg3 = MCP_16MHz_20kBPS_CFG3;
314314 break ;
315315
316- case (CAN_33KBPS): // 20Kbps
316+ case (CAN_33KBPS): // 33.333Kbps
317317 cfg1 = MCP_16MHz_33k3BPS_CFG1;
318318 cfg2 = MCP_16MHz_33k3BPS_CFG2;
319319 cfg3 = MCP_16MHz_33k3BPS_CFG3;
@@ -336,7 +336,7 @@ MCP2515::ERROR MCP2515::setBitrate(const CAN_SPEED canSpeed, CAN_CLOCK canClock)
336336 cfg3 = MCP_16MHz_80kBPS_CFG3;
337337 break ;
338338
339- case (CAN_83K3BPS): // 83.3333Kbps
339+ case (CAN_83K3BPS): // 83.333Kbps
340340 cfg1 = MCP_16MHz_83k3BPS_CFG1;
341341 cfg2 = MCP_16MHz_83k3BPS_CFG2;
342342 cfg3 = MCP_16MHz_83k3BPS_CFG3;
@@ -387,6 +387,12 @@ MCP2515::ERROR MCP2515::setBitrate(const CAN_SPEED canSpeed, CAN_CLOCK canClock)
387387 case (MCP_20MHZ):
388388 switch (canSpeed)
389389 {
390+ case (CAN_33KBPS): // 33.333Kbps
391+ cfg1 = MCP_20MHz_33k3BPS_CFG1;
392+ cfg2 = MCP_20MHz_33k3BPS_CFG2;
393+ cfg3 = MCP_20MHz_33k3BPS_CFG3;
394+ break ;
395+
390396 case (CAN_40KBPS): // 40Kbps
391397 cfg1 = MCP_20MHz_40kBPS_CFG1;
392398 cfg2 = MCP_20MHz_40kBPS_CFG2;
@@ -405,6 +411,12 @@ MCP2515::ERROR MCP2515::setBitrate(const CAN_SPEED canSpeed, CAN_CLOCK canClock)
405411 cfg3 = MCP_20MHz_80kBPS_CFG3;
406412 break ;
407413
414+ case (CAN_83K3BPS): // 83.333Kbps
415+ cfg1 = MCP_20MHz_83k3BPS_CFG1;
416+ cfg2 = MCP_20MHz_83k3BPS_CFG2;
417+ cfg3 = MCP_20MHz_83k3BPS_CFG3;
418+ break ;
419+
408420 case (CAN_100KBPS): // 100Kbps
409421 cfg1 = MCP_20MHz_100kBPS_CFG1;
410422 cfg2 = MCP_20MHz_100kBPS_CFG2;
@@ -452,7 +464,6 @@ MCP2515::ERROR MCP2515::setBitrate(const CAN_SPEED canSpeed, CAN_CLOCK canClock)
452464 break ;
453465 }
454466
455-
456467 if (set) {
457468 setRegister (MCP_CNF1, cfg1);
458469 setRegister (MCP_CNF2, cfg2);
@@ -464,6 +475,31 @@ MCP2515::ERROR MCP2515::setBitrate(const CAN_SPEED canSpeed, CAN_CLOCK canClock)
464475 }
465476}
466477
478+ MCP2515::ERROR MCP2515::setClkOut (const CAN_CLKOUT divisor)
479+ {
480+ ERROR res;
481+ uint8_t cfg3;
482+
483+ if (divisor == CLKOUT_DISABLE) {
484+ /* Turn off CLKEN */
485+ modifyRegister (MCP_CANCTRL, CANCTRL_CLKEN, 0x00 );
486+
487+ /* Turn on CLKOUT for SOF */
488+ modifyRegister (MCP_CNF3, CNF3_SOF, CNF3_SOF);
489+ return ERROR_OK;
490+ }
491+
492+ /* Set the prescaler (CLKPRE) */
493+ modifyRegister (MCP_CANCTRL, CANCTRL_CLKPRE, divisor);
494+
495+ /* Turn on CLKEN */
496+ modifyRegister (MCP_CANCTRL, CANCTRL_CLKEN, CANCTRL_CLKEN);
497+
498+ /* Turn off CLKOUT for SOF */
499+ modifyRegister (MCP_CNF3, CNF3_SOF, 0x00 );
500+ return ERROR_OK;
501+ }
502+
467503void MCP2515::prepareId (uint8_t *buffer, const bool ext, const uint32_t id)
468504{
469505 uint16_t canid = (uint16_t )(id & 0x0FFFF );
0 commit comments