@@ -294,7 +294,11 @@ void CANSAME5x::end()
294294 hw->CCCR .bit .INIT = 1 ;
295295 while (!hw->CCCR .bit .INIT ) {
296296 }
297- GCLK->PCHCTRL [CAN1_GCLK_ID].reg = GCLK_CAN1 | (1 << GCLK_PCHCTRL_CHEN_Pos);
297+ if (_idx == 0 ) {
298+ GCLK->PCHCTRL [CAN0_GCLK_ID].reg = 0 ;
299+ } else {
300+ GCLK->PCHCTRL [CAN1_GCLK_ID].reg = 0 ;
301+ }
298302}
299303
300304int CANSAME5x::endPacket ()
@@ -438,9 +442,9 @@ int CANSAME5x::observe() {
438442
439443 hw->CCCR .bit .MON = 1 ;
440444
441- CAN1 ->CCCR .bit .CCE = 0 ;
442- CAN1 ->CCCR .bit .INIT = 0 ;
443- while (CAN1 ->CCCR .bit .INIT ) {
445+ hw ->CCCR .bit .CCE = 0 ;
446+ hw ->CCCR .bit .INIT = 0 ;
447+ while (hw ->CCCR .bit .INIT ) {
444448 }
445449 return 1 ;
446450}
@@ -455,25 +459,33 @@ int CANSAME5x::loopback() {
455459 hw->CCCR .bit .TEST = 1 ;
456460 hw->TEST .bit .LBCK = 1 ;
457461
458- CAN1 ->CCCR .bit .CCE = 0 ;
459- CAN1 ->CCCR .bit .INIT = 0 ;
460- while (CAN1 ->CCCR .bit .INIT ) {
462+ hw ->CCCR .bit .CCE = 0 ;
463+ hw ->CCCR .bit .INIT = 0 ;
464+ while (hw ->CCCR .bit .INIT ) {
461465 }
462466 return 1 ;
463467}
464468
465469int CANSAME5x::sleep () {
466470 hw->CCCR .bit .CSR = 1 ;
467- while (!CAN1->CCCR .bit .CSA ) {
471+ while (!hw->CCCR .bit .CSA ) {
472+ }
473+ if (_idx == 0 ) {
474+ GCLK->PCHCTRL [CAN0_GCLK_ID].reg = 0 ;
475+ } else {
476+ GCLK->PCHCTRL [CAN1_GCLK_ID].reg = 0 ;
468477 }
469- GCLK->PCHCTRL [CAN1_GCLK_ID].reg = GCLK_CAN1;
470478 return 1 ;
471479}
472480
473481int CANSAME5x::wakeup () {
474- GCLK->PCHCTRL [CAN1_GCLK_ID].reg = GCLK_CAN1 | (1 << GCLK_PCHCTRL_CHEN_Pos);
475- CAN1->CCCR .bit .INIT = 0 ;
476- while (CAN1->CCCR .bit .INIT ) {
482+ if (_idx == 0 ) {
483+ GCLK->PCHCTRL [CAN0_GCLK_ID].reg = GCLK_CAN0 | (1 << GCLK_PCHCTRL_CHEN_Pos);
484+ } else {
485+ GCLK->PCHCTRL [CAN1_GCLK_ID].reg = GCLK_CAN1 | (1 << GCLK_PCHCTRL_CHEN_Pos);
486+ }
487+ hw->CCCR .bit .INIT = 0 ;
488+ while (hw->CCCR .bit .INIT ) {
477489 }
478490 return 1 ;
479491}
0 commit comments