| 
						
						
							
								
							
						
						
					 | 
				
			
			 | 
			 | 
			
				@ -4,37 +4,37 @@
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				namespace can_space {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				CAN::CAN(CAN_VARIANT canVariant) : 
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    canPort(canVariant),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanRegs_(0),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanMBoxes_(0),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanMotoRegs_(0),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanMotsRegs_(0)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _canPort(canVariant),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanRegs(0),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanMBoxes(0),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanMotoRegs(0),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanMotsRegs(0)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				{}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				void CAN::initGpio(){
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    if(canPort == CANA) InitECanaGpio();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    else if (canPort == CANB) InitECanbGpio();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    if(_canPort == CANA) InitECanaGpio();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    else if (_canPort == CANB) InitECanbGpio();
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				void CAN::config(Uint16 baudrate, Uint16 flags){
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    if (canPort == CANA){
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    if (_canPort == CANA){
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						EALLOW;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						SysCtrlRegs.PCLKCR0.bit.ECANAENCLK = 1;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						EDIS;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						p_CanRegs_ = &ECanaRegs;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						p_CanMBoxes_ = &ECanaMboxes;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        p_CanMotoRegs_ = &ECanaMOTORegs;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        p_CanMotsRegs_ = &ECanaMOTSRegs;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						_p_CanRegs = &ECanaRegs;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						_p_CanMBoxes = &ECanaMboxes;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        _p_CanMotoRegs = &ECanaMOTORegs;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        _p_CanMotsRegs = &ECanaMOTSRegs;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					else if (canPort == CANB){
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					else if (_canPort == CANB){
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						EALLOW;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						SysCtrlRegs.PCLKCR0.bit.ECANBENCLK = 1;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						EDIS;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						p_CanRegs_ = &ECanbRegs;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						p_CanMBoxes_ = &ECanbMboxes;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        p_CanMotoRegs_ = &ECanbMOTORegs;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        p_CanMotsRegs_ = &ECanbMOTSRegs;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						_p_CanRegs = &ECanbRegs;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						_p_CanMBoxes = &ECanbMboxes;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        _p_CanMotoRegs = &ECanbMOTORegs;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        _p_CanMotsRegs = &ECanbMOTSRegs;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					else { return; }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
			
			 | 
			 | 
			
				@ -47,143 +47,147 @@ void CAN::config(Uint16 baudrate, Uint16 flags){
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    EALLOW;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    // Configure eCAN RX and TX pins for CAN operation using eCAN regs
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    CanShadow_.CANTIOC.all = p_CanRegs_->CANTIOC.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    CanShadow_.CANTIOC.bit.TXFUNC = 1;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanRegs_->CANTIOC.all = CanShadow_.CANTIOC.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _CanShadow.CANTIOC.all = _p_CanRegs->CANTIOC.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _CanShadow.CANTIOC.bit.TXFUNC = 1;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanRegs->CANTIOC.all = _CanShadow.CANTIOC.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    CanShadow_.CANRIOC.all = p_CanRegs_->CANRIOC.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    CanShadow_.CANRIOC.bit.RXFUNC = 1;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanRegs_->CANRIOC.all = CanShadow_.CANRIOC.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _CanShadow.CANRIOC.all = _p_CanRegs->CANRIOC.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _CanShadow.CANRIOC.bit.RXFUNC = 1;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanRegs->CANRIOC.all = _CanShadow.CANRIOC.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    // Configure eCAN for HECC mode - (reqd to access mailboxes 16 thru 31)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    // HECC mode also enables time-stamping feature
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    CanShadow_.CANMC.all = p_CanRegs_->CANMC.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    CanShadow_.CANMC.bit.SCB = 1;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanRegs_->CANMC.all = CanShadow_.CANMC.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _CanShadow.CANMC.all = _p_CanRegs->CANMC.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _CanShadow.CANMC.bit.SCB = 1;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanRegs->CANMC.all = _CanShadow.CANMC.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    // Initialize all bits of 'Master Control Field' to zero
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    // Some bits of MSGCTRL register come up in an unknown state. For proper 
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    // operation, all bits (including reserved bits) of MSGCTRL must be 
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    // initialized to zero
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanMBoxes_->MBOX0.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanMBoxes_->MBOX1.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanMBoxes_->MBOX2.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanMBoxes_->MBOX3.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanMBoxes_->MBOX4.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanMBoxes_->MBOX5.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanMBoxes_->MBOX6.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanMBoxes_->MBOX7.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanMBoxes_->MBOX8.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanMBoxes_->MBOX9.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanMBoxes_->MBOX10.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanMBoxes_->MBOX11.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanMBoxes_->MBOX12.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanMBoxes_->MBOX13.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanMBoxes_->MBOX14.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanMBoxes_->MBOX15.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanMBoxes_->MBOX16.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanMBoxes_->MBOX17.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanMBoxes_->MBOX18.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanMBoxes_->MBOX19.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanMBoxes_->MBOX20.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanMBoxes_->MBOX21.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanMBoxes_->MBOX22.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanMBoxes_->MBOX23.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanMBoxes_->MBOX24.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanMBoxes_->MBOX25.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanMBoxes_->MBOX26.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanMBoxes_->MBOX27.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanMBoxes_->MBOX28.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanMBoxes_->MBOX29.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanMBoxes_->MBOX30.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanMBoxes_->MBOX31.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanMBoxes->MBOX0.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanMBoxes->MBOX1.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanMBoxes->MBOX2.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanMBoxes->MBOX3.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanMBoxes->MBOX4.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanMBoxes->MBOX5.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanMBoxes->MBOX6.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanMBoxes->MBOX7.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanMBoxes->MBOX8.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanMBoxes->MBOX9.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanMBoxes->MBOX10.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanMBoxes->MBOX11.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanMBoxes->MBOX12.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanMBoxes->MBOX13.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanMBoxes->MBOX14.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanMBoxes->MBOX15.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanMBoxes->MBOX16.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanMBoxes->MBOX17.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanMBoxes->MBOX18.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanMBoxes->MBOX19.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanMBoxes->MBOX20.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanMBoxes->MBOX21.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanMBoxes->MBOX22.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanMBoxes->MBOX23.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanMBoxes->MBOX24.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanMBoxes->MBOX25.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanMBoxes->MBOX26.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanMBoxes->MBOX27.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanMBoxes->MBOX28.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanMBoxes->MBOX29.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanMBoxes->MBOX30.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanMBoxes->MBOX31.MSGCTRL.all = 0x00000000;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    // TAn, RMPn, GIFn bits are all zero upon reset and are cleared again
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    // as a matter of precaution.
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanRegs_->CANTA.all	= 0xFFFFFFFF;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanRegs_->CANRMP.all = 0xFFFFFFFF;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanRegs_->CANGIF0.all = 0xFFFFFFFF;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanRegs_->CANGIF1.all = 0xFFFFFFFF;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanRegs->CANTA.all	= 0xFFFFFFFF;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanRegs->CANRMP.all = 0xFFFFFFFF;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanRegs->CANGIF0.all = 0xFFFFFFFF;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanRegs->CANGIF1.all = 0xFFFFFFFF;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    // Configure bit timing parameters for eCANA
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    CanShadow_.CANMC.all = p_CanRegs_->CANMC.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    CanShadow_.CANMC.bit.CCR = 1 ;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanRegs_->CANMC.all = CanShadow_.CANMC.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _CanShadow.CANMC.all = _p_CanRegs->CANMC.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _CanShadow.CANMC.bit.CCR = 1 ;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanRegs->CANMC.all = _CanShadow.CANMC.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    do { CanShadow_.CANES.all = p_CanRegs_->CANES.all; }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    while(CanShadow_.CANES.bit.CCE != 1 );
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    do { _CanShadow.CANES.all = _p_CanRegs->CANES.all; }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    while(_CanShadow.CANES.bit.CCE != 1 );
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    // MSB - 0; LSB - 1
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    CanShadow_.CANMC.all = p_CanRegs_->CANMC.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _CanShadow.CANMC.all = _p_CanRegs->CANMC.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    if (flags & MSB_ENABLE){
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        CanShadow_.CANMC.bit.DBO = 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        _CanShadow.CANMC.bit.DBO = 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    else
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    { CanShadow_.CANMC.bit.DBO = 1; }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanRegs_->CANMC.all = CanShadow_.CANMC.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    { _CanShadow.CANMC.bit.DBO = 1; }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanRegs->CANMC.all = _CanShadow.CANMC.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    CanShadow_.CANBTC.all = 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _CanShadow.CANBTC.all = 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    // The following block for all 150 MHz SYSCLKOUT 
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    // (75 MHz CAN clock) - default. Bit rate = 1 Mbps / 500 kbps / 250 kbps / 100 kbps
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    switch (baudrate) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        case 1000:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            CanShadow_.CANBTC.bit.BRPREG = 4;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            CanShadow_.CANBTC.bit.TSEG2REG = 3;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            CanShadow_.CANBTC.bit.TSEG1REG = 9;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            _CanShadow.CANBTC.bit.BRPREG = 4;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            _CanShadow.CANBTC.bit.TSEG2REG = 3;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            _CanShadow.CANBTC.bit.TSEG1REG = 9;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        break;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        case 500:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            CanShadow_.CANBTC.bit.BRPREG = 9;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            CanShadow_.CANBTC.bit.TSEG2REG = 3;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            CanShadow_.CANBTC.bit.TSEG1REG = 9;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            _CanShadow.CANBTC.bit.BRPREG = 9;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            _CanShadow.CANBTC.bit.TSEG2REG = 3;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            _CanShadow.CANBTC.bit.TSEG1REG = 9;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        break;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        case 250:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            CanShadow_.CANBTC.bit.BRPREG = 19;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            CanShadow_.CANBTC.bit.TSEG2REG = 3;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            CanShadow_.CANBTC.bit.TSEG1REG = 9;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            _CanShadow.CANBTC.bit.BRPREG = 19;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            _CanShadow.CANBTC.bit.TSEG2REG = 3;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            _CanShadow.CANBTC.bit.TSEG1REG = 9;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        break;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        case 100:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            CanShadow_.CANBTC.bit.BRPREG = 49;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            CanShadow_.CANBTC.bit.TSEG2REG = 3;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            CanShadow_.CANBTC.bit.TSEG1REG = 9;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            _CanShadow.CANBTC.bit.BRPREG = 49;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            _CanShadow.CANBTC.bit.TSEG2REG = 3;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            _CanShadow.CANBTC.bit.TSEG1REG = 9;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        break;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        default: return;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    CanShadow_.CANBTC.bit.SAM = 1;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanRegs_->CANBTC.all = CanShadow_.CANBTC.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _CanShadow.CANBTC.bit.SAM = 1;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanRegs->CANBTC.all = _CanShadow.CANBTC.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    CanShadow_.CANMC.all = p_CanRegs_->CANMC.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    CanShadow_.CANMC.bit.CCR = 0 ;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanRegs_->CANMC.all = CanShadow_.CANMC.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _CanShadow.CANMC.all = _p_CanRegs->CANMC.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _CanShadow.CANMC.bit.CCR = 0 ;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanRegs->CANMC.all = _CanShadow.CANMC.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    do { CanShadow_.CANES.all = p_CanRegs_->CANES.all; }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    while(CanShadow_.CANES.bit.CCE != 0 ); // Wait for CCE bit to be  cleared
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    do { _CanShadow.CANES.all = _p_CanRegs->CANES.all; }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    while(_CanShadow.CANES.bit.CCE != 0 ); // Wait for CCE bit to be  cleared
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _CanShadow.CANMC.all = _p_CanRegs->CANMC.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _CanShadow.CANMC.bit.ABO = 1;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanRegs->CANMC.all = _CanShadow.CANMC.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    // Disable all Mailboxes
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanRegs_->CANME.all = 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanRegs->CANME.all = 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    // Disable all interrupts
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanRegs_->CANGIM.all = 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanRegs_->CANMIM.all = 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanRegs->CANGIM.all = 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanRegs->CANMIM.all = 0;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    //
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    // Debug feature
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    // Configure the eCAN for self test mode.
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    CanShadow_.CANMC.all = p_CanRegs_->CANMC.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _CanShadow.CANMC.all = _p_CanRegs->CANMC.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    if (flags & STM_ENABLE){
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        CanShadow_.CANMC.bit.STM = 1;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        _CanShadow.CANMC.bit.STM = 1;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    else
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    { CanShadow_.CANMC.bit.STM = 0; }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanRegs_->CANMC.all = CanShadow_.CANMC.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    { _CanShadow.CANMC.bit.STM = 0; }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanRegs->CANMC.all = _CanShadow.CANMC.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    EDIS;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
			
			 | 
			 | 
			
				@ -193,41 +197,41 @@ void CAN::configTxMBox(Uint16 boxNumber, const MsgID& configID, const MsgCtrlReg
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    if (boxNumber > 31) return;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    volatile MBOX* p_MailBox(0);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_MailBox = &(p_CanMBoxes_->MBOX0) + boxNumber;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_MailBox = &(_p_CanMBoxes->MBOX0) + boxNumber;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    Uint32 mboxControl(0);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    mboxControl = 1ul << boxNumber;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    // Reset transmittion
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    if (CanShadow_.CANTRS.all &= mboxControl)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    if (_CanShadow.CANTRS.all &= mboxControl)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        CanShadow_.CANTRR.all = p_CanRegs_->CANTRR.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        CanShadow_.CANTRR.all |= mboxControl;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        p_CanRegs_->CANTRR.all = CanShadow_.CANTRR.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        do {CanShadow_.CANTRS.all = p_CanRegs_->CANTRS.all;}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        while((CanShadow_.CANTRS.all & mboxControl) != 0);      // Wait for TRS bit to be cleared
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        _CanShadow.CANTRR.all = _p_CanRegs->CANTRR.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        _CanShadow.CANTRR.all |= mboxControl;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        _p_CanRegs->CANTRR.all = _CanShadow.CANTRR.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        do {_CanShadow.CANTRS.all = _p_CanRegs->CANTRS.all;}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        while((_CanShadow.CANTRS.all & mboxControl) != 0);      // Wait for TRS bit to be cleared
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    // Mailbox disable
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    CanShadow_.CANME.all = p_CanRegs_->CANME.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    CanShadow_.CANME.all &= ~(mboxControl);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanRegs_->CANME.all = CanShadow_.CANME.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _CanShadow.CANME.all = _p_CanRegs->CANME.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _CanShadow.CANME.all &= ~(mboxControl);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanRegs->CANME.all = _CanShadow.CANME.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    // Write to the MSGID field
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_MailBox->MSGID.all = configID.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    // Mailbox direction - transmit
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    CanShadow_.CANMD.all = p_CanRegs_->CANMD.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    CanShadow_.CANMD.all &= ~(mboxControl);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanRegs_->CANMD.all = CanShadow_.CANMD.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _CanShadow.CANMD.all = _p_CanRegs->CANMD.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _CanShadow.CANMD.all &= ~(mboxControl);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanRegs->CANMD.all = _CanShadow.CANMD.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    // Config MBOX control reg
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_MailBox->MSGCTRL.all = configCtrlReg.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    // Mailbox enable
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    CanShadow_.CANME.all = p_CanRegs_->CANME.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    CanShadow_.CANME.all |= mboxControl;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanRegs_->CANME.all = CanShadow_.CANME.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _CanShadow.CANME.all = _p_CanRegs->CANME.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _CanShadow.CANME.all |= mboxControl;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanRegs->CANME.all = _CanShadow.CANME.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
			
			 | 
			 | 
			
				@ -235,15 +239,15 @@ void CAN::configRxMBox(Uint16 boxNumber, const MsgID& configID, const MsgCtrlReg
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    if (boxNumber > 31) return;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    volatile MBOX* p_MailBox(0);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_MailBox = &(p_CanMBoxes_->MBOX0) + boxNumber;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_MailBox = &(_p_CanMBoxes->MBOX0) + boxNumber;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    Uint32 mboxControl(0);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    mboxControl = 1ul << boxNumber;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    // Mailbox disable
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    CanShadow_.CANME.all = p_CanRegs_->CANME.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    CanShadow_.CANME.all &= ~(mboxControl);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanRegs_->CANME.all = CanShadow_.CANME.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _CanShadow.CANME.all = _p_CanRegs->CANME.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _CanShadow.CANME.all &= ~(mboxControl);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanRegs->CANME.all = _CanShadow.CANME.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    // Write to the MSGID field
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_MailBox->MSGID.all = 0x0;
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
			
			 | 
			 | 
			
				@ -254,28 +258,28 @@ void CAN::configRxMBox(Uint16 boxNumber, const MsgID& configID, const MsgCtrlReg
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_MailBox->MSGCTRL.bit.RTR = configCtrlReg.bit.RTR;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    // Configure Mailbox under test as a Receive mailbox
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    CanShadow_.CANMD.all = p_CanRegs_->CANMD.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    CanShadow_.CANMD.all |= mboxControl;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanRegs_->CANMD.all = CanShadow_.CANMD.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _CanShadow.CANMD.all = _p_CanRegs->CANMD.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _CanShadow.CANMD.all |= mboxControl;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanRegs->CANMD.all = _CanShadow.CANMD.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    // Overwrite protection
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    // If "ON" make sure that an additional mailbox is configured to store ’overflow’ messages.
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    if(configCtrlReg.bit.OPC){
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        CanShadow_.CANOPC.all = p_CanRegs_->CANOPC.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        CanShadow_.CANOPC.all |= mboxControl;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        p_CanRegs_->CANOPC.all = CanShadow_.CANOPC.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        _CanShadow.CANOPC.all = _p_CanRegs->CANOPC.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        _CanShadow.CANOPC.all |= mboxControl;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        _p_CanRegs->CANOPC.all = _CanShadow.CANOPC.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    // Enable Mailbox
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    CanShadow_.CANME.all = p_CanRegs_->CANME.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    CanShadow_.CANME.all |= mboxControl;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanRegs_->CANME.all = CanShadow_.CANME.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _CanShadow.CANME.all = _p_CanRegs->CANME.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _CanShadow.CANME.all |= mboxControl;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanRegs->CANME.all = _CanShadow.CANME.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				void CAN::configSystemIsr(Uint32 flags){
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    EALLOW;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanRegs_->CANGIM.all = flags;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanRegs->CANGIM.all = flags;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    EDIS;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
			
			 | 
			 | 
			
				@ -287,8 +291,8 @@ void CAN::configMBoxIsr(Uint16 boxNumber){
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    mboxControl = 1ul << boxNumber;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    EALLOW;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanRegs_->CANMIL.all |= mboxControl;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanRegs_->CANMIM.all |= mboxControl;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanRegs->CANMIL.all |= mboxControl;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanRegs->CANMIM.all |= mboxControl;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    EDIS;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
			
			 | 
			 | 
			
				@ -298,9 +302,9 @@ void CAN::enableTimeOutControl(Uint16 boxNumber){
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    Uint32 mboxControl(0);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    mboxControl = p_CanRegs_->CANTOC.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    mboxControl = _p_CanRegs->CANTOC.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    mboxControl |= 1ul << boxNumber;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanRegs_->CANTOC.all = mboxControl;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanRegs->CANTOC.all = mboxControl;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
			
			 | 
			 | 
			
				@ -309,9 +313,9 @@ void CAN::disableTimeOutControl(Uint16 boxNumber){
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    Uint32 mboxControl(0);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    mboxControl = p_CanRegs_->CANTOC.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    mboxControl = _p_CanRegs->CANTOC.all;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    mboxControl &= ~(1ul << boxNumber);
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    p_CanRegs_->CANTOC.all = mboxControl;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _p_CanRegs->CANTOC.all = mboxControl;
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
			
			 | 
			 | 
			
				
 
 |