| 
						
						
						
					 | 
					 | 
					@ -1,10 +1,11 @@
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#include "CAN.h"
 | 
					 | 
					 | 
					 | 
					#include "CAN.h"
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					#include "DSP2833x_ECan.h"
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#include <cstddef>
 | 
					 | 
					 | 
					 | 
					#include <cstddef>
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					namespace canSpace {
 | 
					 | 
					 | 
					 | 
					namespace canSpace {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					CAN::CAN(){
 | 
					 | 
					 | 
					 | 
					CAN::CAN(){
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // todo Make it impossible to create 2 CANA/CANB objects. Give CANA/CANB as a constructor parameter
 | 
					 | 
					 | 
					 | 
					    // TODO Make it impossible to create 2 CANA/CANB objects. Give CANA/CANB as a constructor parameter
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					void CAN::initGpio(CAN_VARIANT canVarinat){
 | 
					 | 
					 | 
					 | 
					void CAN::initGpio(CAN_VARIANT canVarinat){
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -40,9 +41,7 @@ void CAN::config(CAN_VARIANT canVarinat, Uint16 baudrate){
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    EALLOW;		// EALLOW enables access to protected bits
 | 
					 | 
					 | 
					 | 
					    EALLOW;		// EALLOW enables access to protected bits
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    //
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // Configure eCAN RX and TX pins for CAN operation using eCAN regs
 | 
					 | 
					 | 
					 | 
					    // Configure eCAN RX and TX pins for CAN operation using eCAN regs
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    //
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    CanShadow_.CANTIOC.all = p_CanRegs_->CANTIOC.all;
 | 
					 | 
					 | 
					 | 
					    CanShadow_.CANTIOC.all = p_CanRegs_->CANTIOC.all;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    CanShadow_.CANTIOC.bit.TXFUNC = 1;
 | 
					 | 
					 | 
					 | 
					    CanShadow_.CANTIOC.bit.TXFUNC = 1;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    p_CanRegs_->CANTIOC.all = CanShadow_.CANTIOC.all;
 | 
					 | 
					 | 
					 | 
					    p_CanRegs_->CANTIOC.all = CanShadow_.CANTIOC.all;
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -51,15 +50,14 @@ void CAN::config(CAN_VARIANT canVarinat, Uint16 baudrate){
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    CanShadow_.CANRIOC.bit.RXFUNC = 1;
 | 
					 | 
					 | 
					 | 
					    CanShadow_.CANRIOC.bit.RXFUNC = 1;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    p_CanRegs_->CANRIOC.all = CanShadow_.CANRIOC.all;
 | 
					 | 
					 | 
					 | 
					    p_CanRegs_->CANRIOC.all = CanShadow_.CANRIOC.all;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    //
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // Configure eCAN for HECC mode - (reqd to access mailboxes 16 thru 31)
 | 
					 | 
					 | 
					 | 
					    // Configure eCAN for HECC mode - (reqd to access mailboxes 16 thru 31)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // HECC mode also enables time-stamping feature
 | 
					 | 
					 | 
					 | 
					    // HECC mode also enables time-stamping feature
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    //
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    CanShadow_.CANMC.all = p_CanRegs_->CANMC.all;
 | 
					 | 
					 | 
					 | 
					    CanShadow_.CANMC.all = p_CanRegs_->CANMC.all;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    CanShadow_.CANMC.bit.SCB = 1;
 | 
					 | 
					 | 
					 | 
					    CanShadow_.CANMC.bit.SCB = 1;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    p_CanRegs_->CANMC.all = CanShadow_.CANMC.all;
 | 
					 | 
					 | 
					 | 
					    p_CanRegs_->CANMC.all = CanShadow_.CANMC.all;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    //
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // Initialize all bits of 'Master Control Field' to zero
 | 
					 | 
					 | 
					 | 
					    // Initialize all bits of 'Master Control Field' to zero
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // Some bits of MSGCTRL register come up in an unknown state. For proper 
 | 
					 | 
					 | 
					 | 
					    // Some bits of MSGCTRL register come up in an unknown state. For proper 
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // operation, all bits (including reserved bits) of MSGCTRL must be 
 | 
					 | 
					 | 
					 | 
					    // operation, all bits (including reserved bits) of MSGCTRL must be 
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -96,10 +94,9 @@ void CAN::config(CAN_VARIANT canVarinat, Uint16 baudrate){
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    p_CanMBoxes_->MBOX29.MSGCTRL.all = 0x00000000;
 | 
					 | 
					 | 
					 | 
					    p_CanMBoxes_->MBOX29.MSGCTRL.all = 0x00000000;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    p_CanMBoxes_->MBOX30.MSGCTRL.all = 0x00000000;
 | 
					 | 
					 | 
					 | 
					    p_CanMBoxes_->MBOX30.MSGCTRL.all = 0x00000000;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    p_CanMBoxes_->MBOX31.MSGCTRL.all = 0x00000000;
 | 
					 | 
					 | 
					 | 
					    p_CanMBoxes_->MBOX31.MSGCTRL.all = 0x00000000;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    //
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // TAn, RMPn, GIFn bits are all zero upon reset and are cleared again
 | 
					 | 
					 | 
					 | 
					    // TAn, RMPn, GIFn bits are all zero upon reset and are cleared again
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // as a matter of precaution.
 | 
					 | 
					 | 
					 | 
					    // as a matter of precaution.
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    //
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    p_CanRegs_->CANTA.all	= 0xFFFFFFFF;       // Clear all TAn bits
 | 
					 | 
					 | 
					 | 
					    p_CanRegs_->CANTA.all	= 0xFFFFFFFF;       // Clear all TAn bits
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    p_CanRegs_->CANRMP.all = 0xFFFFFFFF;      // Clear all RMPn bits
 | 
					 | 
					 | 
					 | 
					    p_CanRegs_->CANRMP.all = 0xFFFFFFFF;      // Clear all RMPn bits
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -107,9 +104,8 @@ void CAN::config(CAN_VARIANT canVarinat, Uint16 baudrate){
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    p_CanRegs_->CANGIF0.all = 0xFFFFFFFF;     // Clear all interrupt flag bits
 | 
					 | 
					 | 
					 | 
					    p_CanRegs_->CANGIF0.all = 0xFFFFFFFF;     // Clear all interrupt flag bits
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    p_CanRegs_->CANGIF1.all = 0xFFFFFFFF;
 | 
					 | 
					 | 
					 | 
					    p_CanRegs_->CANGIF1.all = 0xFFFFFFFF;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    //
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // Configure bit timing parameters for eCANA
 | 
					 | 
					 | 
					 | 
					    // Configure bit timing parameters for eCANA
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    //
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    CanShadow_.CANMC.all = p_CanRegs_->CANMC.all;
 | 
					 | 
					 | 
					 | 
					    CanShadow_.CANMC.all = p_CanRegs_->CANMC.all;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    CanShadow_.CANMC.bit.CCR = 1 ;            // Set CCR = 1
 | 
					 | 
					 | 
					 | 
					    CanShadow_.CANMC.bit.CCR = 1 ;            // Set CCR = 1
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    p_CanRegs_->CANMC.all = CanShadow_.CANMC.all;
 | 
					 | 
					 | 
					 | 
					    p_CanRegs_->CANMC.all = CanShadow_.CANMC.all;
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -117,7 +113,7 @@ void CAN::config(CAN_VARIANT canVarinat, Uint16 baudrate){
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    do { CanShadow_.CANES.all = p_CanRegs_->CANES.all; }
 | 
					 | 
					 | 
					 | 
					    do { CanShadow_.CANES.all = p_CanRegs_->CANES.all; }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    while(CanShadow_.CANES.bit.CCE != 1 );  	// Wait for CCE bit to be set
 | 
					 | 
					 | 
					 | 
					    while(CanShadow_.CANES.bit.CCE != 1 );  	// Wait for CCE bit to be set
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // CanShadow_.CANMC.all = p_CanRegs_->CANMC.all;    //todo удалить
 | 
					 | 
					 | 
					 | 
					    // CanShadow_.CANMC.all = p_CanRegs_->CANMC.all;    //TODO delete
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // CanShadow_.CANMC.bit.DBO = 1 ;            // Set DBO = 1
 | 
					 | 
					 | 
					 | 
					    // CanShadow_.CANMC.bit.DBO = 1 ;            // Set DBO = 1
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // p_CanRegs_->CANMC.all = CanShadow_.CANMC.all;
 | 
					 | 
					 | 
					 | 
					    // p_CanRegs_->CANMC.all = CanShadow_.CANMC.all;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -125,7 +121,6 @@ void CAN::config(CAN_VARIANT canVarinat, Uint16 baudrate){
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // The following block for all 150 MHz SYSCLKOUT 
 | 
					 | 
					 | 
					 | 
					    // The following block for all 150 MHz SYSCLKOUT 
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // (75 MHz CAN clock) - default. Bit rate = 1 Mbps / 500 kbps / 250 kbps / 100 kbps
 | 
					 | 
					 | 
					 | 
					    // (75 MHz CAN clock) - default. Bit rate = 1 Mbps / 500 kbps / 250 kbps / 100 kbps
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    //
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    
 | 
					 | 
					 | 
					 | 
					    
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    switch (baudrate) {
 | 
					 | 
					 | 
					 | 
					    switch (baudrate) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        case 1000:
 | 
					 | 
					 | 
					 | 
					        case 1000:
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -159,25 +154,19 @@ void CAN::config(CAN_VARIANT canVarinat, Uint16 baudrate){
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    p_CanRegs_->CANBTC.all = CanShadow_.CANBTC.all;
 | 
					 | 
					 | 
					 | 
					    p_CanRegs_->CANBTC.all = CanShadow_.CANBTC.all;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    CanShadow_.CANMC.all = p_CanRegs_->CANMC.all;
 | 
					 | 
					 | 
					 | 
					    CanShadow_.CANMC.all = p_CanRegs_->CANMC.all;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    CanShadow_.CANMC.bit.CCR = 0 ;            // Set CCR = 0
 | 
					 | 
					 | 
					 | 
					    CanShadow_.CANMC.bit.CCR = 0 ;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    p_CanRegs_->CANMC.all = CanShadow_.CANMC.all;
 | 
					 | 
					 | 
					 | 
					    p_CanRegs_->CANMC.all = CanShadow_.CANMC.all;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    do { CanShadow_.CANES.all = p_CanRegs_->CANES.all; }
 | 
					 | 
					 | 
					 | 
					    do { CanShadow_.CANES.all = p_CanRegs_->CANES.all; }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    while(CanShadow_.CANES.bit.CCE != 0 ); // Wait for CCE bit to be  cleared
 | 
					 | 
					 | 
					 | 
					    while(CanShadow_.CANES.bit.CCE != 0 ); // Wait for CCE bit to be  cleared
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    //
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // Disable all Mailboxes
 | 
					 | 
					 | 
					 | 
					    // Disable all Mailboxes
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    //
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    p_CanRegs_->CANME.all = 0;		// Required before writing the MSGIDs
 | 
					 | 
					 | 
					 | 
					    p_CanRegs_->CANME.all = 0;		// Required before writing the MSGIDs
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    CanShadow_.CANTRR.all = p_CanRegs_->CANTRR.all;
 | 
					 | 
					 | 
					 | 
					    // Reset all transmittions
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    CanShadow_.CANTRR.bit.TRR0 = 1;
 | 
					 | 
					 | 
					 | 
					    p_CanRegs_->CANTRR.all = 0xFFFFFFFF; // 0x1111_1111
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    p_CanRegs_->CANTRR.all  = CanShadow_.CANTRR.all;
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    CanShadow_.CANTRS.all = p_CanRegs_->CANTRS.all;
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    do {CanShadow_.CANTRS.all = p_CanRegs_->CANTRS.all;}
 | 
					 | 
					 | 
					 | 
					    do {CanShadow_.CANTRS.all = p_CanRegs_->CANTRS.all;}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    while(CanShadow_.CANTRS.bit.TRS0 != 0);            // Wait for TRS bit to be cleared
 | 
					 | 
					 | 
					 | 
					    while(CanShadow_.CANTRS.all != 0);            // Wait for TRS bit to be cleared
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    //
 | 
					 | 
					 | 
					 | 
					    //
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // Debug feature
 | 
					 | 
					 | 
					 | 
					    // Debug feature
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -191,54 +180,130 @@ void CAN::config(CAN_VARIANT canVarinat, Uint16 baudrate){
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					void CAN::configTxMBoxes(){
 | 
					 | 
					 | 
					 | 
					// void CAN::configTxMBoxes(){
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // Write to the MSGID field
 | 
					 | 
					 | 
					 | 
					//     // Write to the MSGID field
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    p_CanMBoxes_->MBOX1.MSGID.all = 0x0;    // IDE-0, AME-0, AAM-0
 | 
					 | 
					 | 
					 | 
					//     p_CanMBoxes_->MBOX1.MSGID.all = 0x0;    // IDE-0, AME-0, AAM-0
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    p_CanMBoxes_->MBOX1.MSGID.bit.STDMSGID = 0xAAA;
 | 
					 | 
					 | 
					 | 
					//     p_CanMBoxes_->MBOX1.MSGID.bit.STDMSGID = 0xAAA;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					//     p_CanMBoxes_->MBOX1.MSGCTRL.bit.DLC = 8;    // Data length in bytes (0-8)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					//     p_CanMBoxes_->MBOX1.MSGCTRL.bit.RTR = 0;    // Remote Transmission Request
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					//     CanShadow_.CANMD.all = p_CanRegs_->CANMD.all;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					//     CanShadow_.CANMD.bit.MD1 = 0;                      // Mailbox direction - transmit
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					//     p_CanRegs_->CANMD.all = CanShadow_.CANMD.all;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					//     CanShadow_.CANME.all = p_CanRegs_->CANME.all;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					//     CanShadow_.CANME.bit.ME1 = 1;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					//     p_CanRegs_->CANME.all = CanShadow_.CANME.all;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					// }    // TODO delete
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    p_CanMBoxes_->MBOX1.MSGCTRL.bit.DLC = 8;    // Data length in bytes (0-8)
 | 
					 | 
					 | 
					 | 
					void CAN::configTxMBox(Uint16 boxNumber, const ConfigMBox& configData){
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    p_CanMBoxes_->MBOX1.MSGCTRL.bit.RTR = 0;    // Remote Transmission Request
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    volatile MBOX* p_MailBox(NULL);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    p_MailBox = &(p_CanMBoxes_->MBOX0) + boxNumber;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    Uint32 mboxControl(0);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    mboxControl = 1ul << boxNumber;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    // Reset transmittion
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    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;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    // Write to the MSGID field
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    p_MailBox->MSGID.all = configData.msgID.all;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    // Mailbox direction - transmit
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    CanShadow_.CANMD.all = p_CanRegs_->CANMD.all;
 | 
					 | 
					 | 
					 | 
					    CanShadow_.CANMD.all = p_CanRegs_->CANMD.all;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    CanShadow_.CANMD.bit.MD1 = 0;                      // Mailbox direction - transmit
 | 
					 | 
					 | 
					 | 
					    CanShadow_.CANMD.all &= ~(mboxControl);
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    p_CanRegs_->CANMD.all = CanShadow_.CANMD.all;
 | 
					 | 
					 | 
					 | 
					    p_CanRegs_->CANMD.all = CanShadow_.CANMD.all;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    // Write to RTR and TPL field in control reg
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    p_MailBox->MSGCTRL.bit.RTR = configData.msgCtrlReg.bit.RTR;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    // p_MailBox->MSGCTRL.bit.TPL = configData.msgCtrlReg.bit.TPL;  // enable if you need to set msg priority lvl
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    // Mailbox enable
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    CanShadow_.CANME.all = p_CanRegs_->CANME.all;
 | 
					 | 
					 | 
					 | 
					    CanShadow_.CANME.all = p_CanRegs_->CANME.all;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    CanShadow_.CANME.bit.ME1 = 1;
 | 
					 | 
					 | 
					 | 
					    CanShadow_.CANME.all |= mboxControl;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    p_CanRegs_->CANME.all = CanShadow_.CANME.all;
 | 
					 | 
					 | 
					 | 
					    p_CanRegs_->CANME.all = CanShadow_.CANME.all;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					void CAN::configRxMBoxes(){
 | 
					 | 
					 | 
					 | 
					// void CAN::configRxMBoxes(){ // TODO make this method with parameters
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					//     // Write to the MSGID field
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					//     p_CanMBoxes_->MBOX25.MSGID.all = 0x0;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					//     p_CanMBoxes_->MBOX25.MSGID.bit.STDMSGID = 0xAAA;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					//     // Write to DLC field in Master Control reg
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					//     p_CanMBoxes_->MBOX25.MSGCTRL.bit.DLC = 8;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					//     p_CanMBoxes_->MBOX25.MSGCTRL.bit.RTR = 0;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					//     //
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					//     // Configure Mailbox under test as a Receive mailbox
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					//     //
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					//     CanShadow_.CANMD.all = p_CanRegs_->CANMD.all;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					//     CanShadow_.CANMD.bit.MD25 = 1;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					//     p_CanRegs_->CANMD.all = CanShadow_.CANMD.all;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					//     // Overwrite protection
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					//     // CanShadow_.CANOPC.all = p_CanRegs_->CANOPC.all;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					//     // CanShadow_.CANOPC.bit.OPC1 = 1;                    // Should be one more mailbox to store 'overflow' messages
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					//     // p_CanRegs_->CANOPC.all = CanShadow_.CANOPC.all;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					//     // Enable Mailbox
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					//     CanShadow_.CANME.all = p_CanRegs_->CANME.all;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					//     CanShadow_.CANME.bit.ME25 = 1;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					//     p_CanRegs_->CANME.all = CanShadow_.CANME.all;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					//     // Write to the mailbox RAM field
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					//     p_CanMBoxes_->MBOX25.MDL.all = 0x55555555;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					//     p_CanMBoxes_->MBOX25.MDH.all = 0x55555555;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					// }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					void CAN::configRxMBoxes(Uint16 boxNumber, const ConfigMBox& configData){
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    volatile MBOX* p_MailBox(NULL);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    p_MailBox = &(p_CanMBoxes_->MBOX0) + boxNumber;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    Uint32 mboxControl(0);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    mboxControl = 1ul << boxNumber;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // Write to the MSGID field
 | 
					 | 
					 | 
					 | 
					    // Write to the MSGID field
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    p_CanMBoxes_->MBOX25.MSGID.all = 0x0;
 | 
					 | 
					 | 
					 | 
					    p_MailBox->MSGID.all = 0x0;
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    p_CanMBoxes_->MBOX25.MSGID.bit.STDMSGID = 0xAAA;
 | 
					 | 
					 | 
					 | 
					    p_MailBox->MSGID.all = configData.msgID.all;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // Write to DLC field in Master Control reg
 | 
					 | 
					 | 
					 | 
					    // Write to DLC and RTR field in control reg
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    p_CanMBoxes_->MBOX25.MSGCTRL.bit.DLC = 8;
 | 
					 | 
					 | 
					 | 
					    p_MailBox->MSGCTRL.bit.DLC = configData.msgCtrlReg.bit.DLC;
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    p_CanMBoxes_->MBOX25.MSGCTRL.bit.RTR = 0;
 | 
					 | 
					 | 
					 | 
					    p_MailBox->MSGCTRL.bit.RTR = configData.msgCtrlReg.bit.RTR;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    //
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // Configure Mailbox under test as a Receive mailbox
 | 
					 | 
					 | 
					 | 
					    // Configure Mailbox under test as a Receive mailbox
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    //
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    CanShadow_.CANMD.all = p_CanRegs_->CANMD.all;
 | 
					 | 
					 | 
					 | 
					    CanShadow_.CANMD.all = p_CanRegs_->CANMD.all;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    CanShadow_.CANMD.bit.MD25 = 1;
 | 
					 | 
					 | 
					 | 
					    CanShadow_.CANMD.all |= mboxControl;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    p_CanRegs_->CANMD.all = CanShadow_.CANMD.all;
 | 
					 | 
					 | 
					 | 
					    p_CanRegs_->CANMD.all = CanShadow_.CANMD.all;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // Overwrite protection
 | 
					 | 
					 | 
					 | 
					    // Overwrite protection
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    // If "ON" make sure that an additional mailbox is configured to store ’overflow’ messages.
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // CanShadow_.CANOPC.all = p_CanRegs_->CANOPC.all;
 | 
					 | 
					 | 
					 | 
					    // CanShadow_.CANOPC.all = p_CanRegs_->CANOPC.all;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // CanShadow_.CANOPC.bit.OPC1 = 1;                    // Should be one more mailbox to store 'overflow' messages
 | 
					 | 
					 | 
					 | 
					    // CanShadow_.CANOPC.all |= mboxControl;                    // Should be one more mailbox to store 'overflow' messages
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // p_CanRegs_->CANOPC.all = CanShadow_.CANOPC.all;
 | 
					 | 
					 | 
					 | 
					    // p_CanRegs_->CANOPC.all = CanShadow_.CANOPC.all;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // Enable Mailbox
 | 
					 | 
					 | 
					 | 
					    // Enable Mailbox
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    CanShadow_.CANME.all = p_CanRegs_->CANME.all;
 | 
					 | 
					 | 
					 | 
					    CanShadow_.CANME.all = p_CanRegs_->CANME.all;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    CanShadow_.CANME.bit.ME25 = 1;
 | 
					 | 
					 | 
					 | 
					    CanShadow_.CANME.all |= mboxControl;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    p_CanRegs_->CANME.all = CanShadow_.CANME.all;
 | 
					 | 
					 | 
					 | 
					    p_CanRegs_->CANME.all = CanShadow_.CANME.all;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // Write to the mailbox RAM field
 | 
					 | 
					 | 
					 | 
					    // Write to the mailbox RAM field   // TODO doesn't work when rx. Check for RTR
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    p_CanMBoxes_->MBOX25.MDL.all = 0x55555555;
 | 
					 | 
					 | 
					 | 
					    // p_MailBox->MDL.all = 0x55555555;
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    p_CanMBoxes_->MBOX25.MDH.all = 0x55555555;
 | 
					 | 
					 | 
					 | 
					    // p_MailBox->MDH.all = 0x55555555;
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} //canSpace
 | 
					 | 
					 | 
					 | 
					} //canSpace
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
					 | 
					 | 
					
 
 |