This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS570LC4357: HALCoGen configuration of CAN3 for GIO mode.

Part Number: TMS570LC4357
Other Parts Discussed in Thread: HALCOGEN

Hello,

  I'm currently using CAN 2 and 3 in GIO mode and using HALCoGen 04.07.01 to configure the pins.

  • I have enabled CAN 2 and CAN 3 drivers.
  • Looked for differences between CAN2 and CAN 3 port initialization in each tab.
  • No interrupts or active message boxes in each Msg tab
  • No interrupt VIM channels selected

In the HCG generated file HL_can.c in the function canInit():

For CAN 2 only the CTL, TIOC and RIOC registers are modified, which is what I would expect. However the initialization of CAN 3 is configuring all other registers including TIOC and RIOC.  The configuration ultimately ends with an instruction to leave initialization mode. 

    /** - Leave configuration and initialization mode  */
    canREG3->CTL &= ~(uint32)(0x00000041U);

This call unfortunately resets the GIO settings.

My questions are:
  1. Is there a checkbox I'm possibly missing in the HCG configuration which differs between CAN2 and CAN3 to cause the HALCoGen generated initialization to differ?
  2. Is the only option to reinitialize the TIOC and RIOC registers in the USER CODE 5 section?

Thanks for your time.

void canInit(void)
{
/* USER CODE BEGIN (4) */
/* USER CODE END */

    /** @b Initialize @b CAN2: */


    /** - Setup control register
    *     - Enter initialization mode
    */
    canREG2->CTL = 0x00000001U;
	
   /** - CAN2 Port output values */
    canREG2->TIOC =  (uint32)((uint32)0U  << 18U )
                   | (uint32)((uint32)0U  << 17U )
                   | (uint32)((uint32)0U  << 16U )  
                   | (uint32)((uint32)0U  << 3U )  
                   | (uint32)((uint32)1U  << 2U )    
                   | (uint32)((uint32)0U << 1U );
                   
    canREG2->RIOC =  (uint32)((uint32)0U  << 18U )    
                   | (uint32)((uint32)0U  << 17U )  
                   | (uint32)((uint32)0U  << 16U )   
                   | (uint32)((uint32)0U  << 3U )  
                   | (uint32)((uint32)1U  << 2U )
                   | (uint32)((uint32)0U <<1U );       


    /** @b Initialize @b CAN3: */

    /** - Setup control register
    *     - Disable automatic wakeup on bus activity
    *     - Local power down mode disabled
    *     - Disable DMA request lines
    *     - Enable global Interrupt Line 0 and 1
    *     - Disable debug mode
    *     - Release from software reset
    *     - Enable/Disable parity or ECC
    *     - Enable/Disable auto bus on timer
    *     - Setup message completion before entering debug state
    *     - Setup normal operation mode
    *     - Request write access to the configuration registers
    *     - Setup automatic retransmission of messages
    *     - Disable error interrupts
    *     - Disable status interrupts
    *     - Enter initialization mode
    */
    canREG3->CTL = (uint32)0x00000000U 
                 | (uint32)0x00000000U 
                 | (uint32)((uint32)0x00000005U << 10U)
                 | 0x00020043U;

    /** - Clear all pending error flags and reset current status */
    canREG3->ES |= 0xFFFFFFFFU;

    /** - Assign interrupt level for messages */
    canREG3->INTMUXx[0U] = (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U;
	canREG3->INTMUXx[1U] = (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U
                         | (uint32)0x00000000U;

    /** - Setup auto bus on timer period */
    canREG3->ABOTR = (uint32)0U;

    /** - Setup IF1 for data transmission 
    *     - Wait until IF1 is ready for use 
    *     - Set IF1 control byte
    */
    /*SAFETYMCUSW 28 D MR:NA <APPROVED> "Potentially infinite loop found - Hardware Status check for execution sequence" */
    while ((canREG3->IF1STAT & 0x80U) ==0x80U)
    { 
    } /* Wait */
    canREG3->IF1CMD  = 0x87U;

    /** - Setup IF2 for reading data
    *     - Wait until IF1 is ready for use 
    *     - Set IF1 control byte
    */
    /*SAFETYMCUSW 28 D MR:NA <APPROVED> "Potentially infinite loop found - Hardware Status check for execution sequence" */
    while ((canREG3->IF2STAT & 0x80U) ==0x80U)
    { 
    } /* Wait */
    canREG3->IF2CMD = 0x17U;

    /** - Setup bit timing 
    *     - Setup baud rate prescaler extension
    *     - Setup TSeg2
    *     - Setup TSeg1
    *     - Setup sample jump width
    *     - Setup baud rate prescaler
    */
    canREG3->BTR = (uint32)((uint32)0U << 16U) |
                   (uint32)((uint32)(4U - 1U) << 12U) |
                   (uint32)((uint32)((6U + 4U) - 1U) << 8U) |
                   (uint32)((uint32)(4U - 1U) << 6U) |
                   (uint32)(uint32)9U;


    /** - CAN3 Port output values */
    canREG3->TIOC =  (uint32)((uint32)1U  << 18U )
                   | (uint32)((uint32)0U  << 17U )
                   | (uint32)((uint32)0U  << 16U )  
                   | (uint32)((uint32)0U  << 3U )  
                   | (uint32)((uint32)1U  << 2U )    
                   | (uint32)((uint32)1U << 1U );
                   
    canREG3->RIOC =  (uint32)((uint32)0U  << 18U )    
                   | (uint32)((uint32)0U  << 17U )  
                   | (uint32)((uint32)0U  << 16U )   
                   | (uint32)((uint32)0U  << 3U )  
                   | (uint32)((uint32)1U  << 2U )
                   | (uint32)((uint32)0U << 1U );       

    /** - Leave configuration and initialization mode  */
    canREG3->CTL &= ~(uint32)(0x00000041U);


    /**   @note This function has to be called before the driver can be used.\n
    *           This function has to be executed in privileged mode.\n
    */

/* USER CODE BEGIN (5) */
}

  • Followup:

    I created a new Halcogen project and tried enabling and disabling the drivers for CAN1-4 while being set in GIO mode. Looks like the  CAN3 driver is always configuring more than the TIOC and RIOC registers.

    void canInit(void)
    {
    /* USER CODE BEGIN (4) */
    /* USER CODE END */
        /** @b Initialize @b CAN1: */
    
        /** - Setup control register
        *     - Enter initialization mode
        */
        canREG1->CTL = 0x00000001U;
    				 
         /** - CAN1 Port output values */
        canREG1->TIOC =  (uint32)((uint32)1U  << 18U )
                       | (uint32)((uint32)0U  << 17U )
                       | (uint32)((uint32)0U  << 16U )                
                       | (uint32)((uint32)0U  << 3U )  
                       | (uint32)((uint32)0U  << 2U )    
                       | (uint32)((uint32)0U << 1U );
                       
        canREG1->RIOC =  (uint32)((uint32)1U  << 18U )    
                       | (uint32)((uint32)0U  << 17U )  
                       | (uint32)((uint32)0U  << 16U )   
                       | (uint32)((uint32)0U  << 3U )  
                       | (uint32)((uint32)0U  << 2U )
                       | (uint32)((uint32)0U <<1U );        
    
    
        /** @b Initialize @b CAN2: */
    
    
        /** - Setup control register
        *     - Enter initialization mode
        */
        canREG2->CTL = 0x00000001U;
    	
       /** - CAN2 Port output values */
        canREG2->TIOC =  (uint32)((uint32)1U  << 18U )
                       | (uint32)((uint32)0U  << 17U )
                       | (uint32)((uint32)0U  << 16U )  
                       | (uint32)((uint32)0U  << 3U )  
                       | (uint32)((uint32)0U  << 2U )    
                       | (uint32)((uint32)0U << 1U );
                       
        canREG2->RIOC =  (uint32)((uint32)1U  << 18U )    
                       | (uint32)((uint32)0U  << 17U )  
                       | (uint32)((uint32)0U  << 16U )   
                       | (uint32)((uint32)0U  << 3U )  
                       | (uint32)((uint32)0U  << 2U )
                       | (uint32)((uint32)0U <<1U );       
    
    
        /** @b Initialize @b CAN3: */
    
        /** - Setup control register
        *     - Disable automatic wakeup on bus activity
        *     - Local power down mode disabled
        *     - Disable DMA request lines
        *     - Enable global Interrupt Line 0 and 1
        *     - Disable debug mode
        *     - Release from software reset
        *     - Enable/Disable parity or ECC
        *     - Enable/Disable auto bus on timer
        *     - Setup message completion before entering debug state
        *     - Setup normal operation mode
        *     - Request write access to the configuration registers
        *     - Setup automatic retransmission of messages
        *     - Disable error interrupts
        *     - Disable status interrupts
        *     - Enter initialization mode
        */
        canREG3->CTL = (uint32)0x00000000U 
                     | (uint32)0x00000000U 
                     | (uint32)((uint32)0x00000005U << 10U)
                     | 0x00020043U;
    
        /** - Clear all pending error flags and reset current status */
        canREG3->ES |= 0xFFFFFFFFU;
    
        /** - Assign interrupt level for messages */
        canREG3->INTMUXx[0U] = (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U;
    	canREG3->INTMUXx[1U] = (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U;
    
        /** - Setup auto bus on timer period */
        canREG3->ABOTR = (uint32)0U;
    
        /** - Setup IF1 for data transmission 
        *     - Wait until IF1 is ready for use 
        *     - Set IF1 control byte
        */
        /*SAFETYMCUSW 28 D MR:NA <APPROVED> "Potentially infinite loop found - Hardware Status check for execution sequence" */
        while ((canREG3->IF1STAT & 0x80U) ==0x80U)
        { 
        } /* Wait */
        canREG3->IF1CMD  = 0x87U;
    
        /** - Setup IF2 for reading data
        *     - Wait until IF1 is ready for use 
        *     - Set IF1 control byte
        */
        /*SAFETYMCUSW 28 D MR:NA <APPROVED> "Potentially infinite loop found - Hardware Status check for execution sequence" */
        while ((canREG3->IF2STAT & 0x80U) ==0x80U)
        { 
        } /* Wait */
        canREG3->IF2CMD = 0x17U;
    
        /** - Setup bit timing 
        *     - Setup baud rate prescaler extension
        *     - Setup TSeg2
        *     - Setup TSeg1
        *     - Setup sample jump width
        *     - Setup baud rate prescaler
        */
        canREG3->BTR = (uint32)((uint32)0U << 16U) |
                       (uint32)((uint32)(4U - 1U) << 12U) |
                       (uint32)((uint32)((6U + 4U) - 1U) << 8U) |
                       (uint32)((uint32)(4U - 1U) << 6U) |
                       (uint32)(uint32)9U;
    
    
        /** - CAN3 Port output values */
        canREG3->TIOC =  (uint32)((uint32)1U  << 18U )
                       | (uint32)((uint32)0U  << 17U )
                       | (uint32)((uint32)0U  << 16U )  
                       | (uint32)((uint32)0U  << 3U )  
                       | (uint32)((uint32)0U  << 2U )    
                       | (uint32)((uint32)0U << 1U );
                       
        canREG3->RIOC =  (uint32)((uint32)1U  << 18U )    
                       | (uint32)((uint32)0U  << 17U )  
                       | (uint32)((uint32)0U  << 16U )   
                       | (uint32)((uint32)0U  << 3U )  
                       | (uint32)((uint32)0U  << 2U )
                       | (uint32)((uint32)0U << 1U );       
    
        /** - Leave configuration and initialization mode  */
        canREG3->CTL &= ~(uint32)(0x00000041U);
    
        /** @b Initialize @b CAN1: */
    
    				   
        /** - CAN4 Port output values */
        canREG4->TIOC =  (uint32)((uint32)1U  << 18U )
                       | (uint32)((uint32)0U  << 17U )
                       | (uint32)((uint32)0U  << 16U )  
                       | (uint32)((uint32)0U  << 3U )  
                       | (uint32)((uint32)0U  << 2U )    
                       | (uint32)((uint32)0U << 1U );
                       
        canREG4->RIOC =  (uint32)((uint32)1U  << 18U )    
                       | (uint32)((uint32)0U  << 17U )  
                       | (uint32)((uint32)0U  << 16U )   
                       | (uint32)((uint32)0U  << 3U )  
                       | (uint32)((uint32)0U  << 2U )
                       | (uint32)((uint32)0U << 1U );       
    
    
        /**   @note This function has to be called before the driver can be used.\n
        *           This function has to be executed in privileged mode.\n
        */
    
    /* USER CODE BEGIN (5) */
    /* USER CODE END */
    }

  • Hello,

    Sorry for the delay in getting back to you. There is indeed an issue with the CAN driver generated by HALCoGen. The CAN3 configuration does not account for the general-purpose I/O setting. Also, the CAN4 configuration code is missing the initial write to the CANCTL register to enable init mode.

    As a workaround, please use #if 0 and #endif to override the init routine generated by HALCoGen in case you want to use CANx terminals as GIO.

    void canInit(void)
    {
    /* USER CODE BEGIN (4) */
    
        canREG1->CTL = 0x00000001U;
    				 
         /** - CAN1 Port output values */
        canREG1->TIOC =  (uint32)((uint32)1U  << 18U )
                       | (uint32)((uint32)0U  << 17U )
                       | (uint32)((uint32)0U  << 16U )                
                       | (uint32)((uint32)0U  << 3U )  
                       | (uint32)((uint32)0U  << 2U )    
                       | (uint32)((uint32)0U << 1U );
                       
        canREG1->RIOC =  (uint32)((uint32)1U  << 18U )    
                       | (uint32)((uint32)0U  << 17U )  
                       | (uint32)((uint32)0U  << 16U )   
                       | (uint32)((uint32)0U  << 3U )  
                       | (uint32)((uint32)0U  << 2U )
                       | (uint32)((uint32)0U <<1U );        
    
        canREG2->CTL = 0x00000001U;
    				 
         /** - CAN2 Port output values */
        canREG2->TIOC =  (uint32)((uint32)1U  << 18U )
                       | (uint32)((uint32)0U  << 17U )
                       | (uint32)((uint32)0U  << 16U )                
                       | (uint32)((uint32)0U  << 3U )  
                       | (uint32)((uint32)0U  << 2U )    
                       | (uint32)((uint32)0U << 1U );
                       
        canREG2->RIOC =  (uint32)((uint32)1U  << 18U )    
                       | (uint32)((uint32)0U  << 17U )  
                       | (uint32)((uint32)0U  << 16U )   
                       | (uint32)((uint32)0U  << 3U )  
                       | (uint32)((uint32)0U  << 2U )
                       | (uint32)((uint32)0U <<1U );        
    
        canREG3->CTL = 0x00000001U;
    				 
         /** - CAN3 Port output values */
        canREG3->TIOC =  (uint32)((uint32)1U  << 18U )
                       | (uint32)((uint32)0U  << 17U )
                       | (uint32)((uint32)0U  << 16U )                
                       | (uint32)((uint32)0U  << 3U )  
                       | (uint32)((uint32)0U  << 2U )    
                       | (uint32)((uint32)0U << 1U );
                       
        canREG3->RIOC =  (uint32)((uint32)1U  << 18U )    
                       | (uint32)((uint32)0U  << 17U )  
                       | (uint32)((uint32)0U  << 16U )   
                       | (uint32)((uint32)0U  << 3U )  
                       | (uint32)((uint32)0U  << 2U )
                       | (uint32)((uint32)0U <<1U );        
    
        canREG4->CTL = 0x00000001U;
    				 
         /** - CAN4 Port output values */
        canREG4->TIOC =  (uint32)((uint32)1U  << 18U )
                       | (uint32)((uint32)0U  << 17U )
                       | (uint32)((uint32)0U  << 16U )                
                       | (uint32)((uint32)0U  << 3U )  
                       | (uint32)((uint32)0U  << 2U )    
                       | (uint32)((uint32)0U << 1U );
                       
        canREG4->RIOC =  (uint32)((uint32)1U  << 18U )    
                       | (uint32)((uint32)0U  << 17U )  
                       | (uint32)((uint32)0U  << 16U )   
                       | (uint32)((uint32)0U  << 3U )  
                       | (uint32)((uint32)0U  << 2U )
                       | (uint32)((uint32)0U <<1U );        
    
    
    #if 0
    
    /* USER CODE END */
        /** @b Initialize @b CAN1: */
    
        /** - Setup control register
        *     - Enter initialization mode
        */
        canREG1->CTL = 0x00000001U;
    				 
         /** - CAN1 Port output values */
        canREG1->TIOC =  (uint32)((uint32)1U  << 18U )
                       | (uint32)((uint32)0U  << 17U )
                       | (uint32)((uint32)0U  << 16U )                
                       | (uint32)((uint32)0U  << 3U )  
                       | (uint32)((uint32)0U  << 2U )    
                       | (uint32)((uint32)0U << 1U );
                       
        canREG1->RIOC =  (uint32)((uint32)1U  << 18U )    
                       | (uint32)((uint32)0U  << 17U )  
                       | (uint32)((uint32)0U  << 16U )   
                       | (uint32)((uint32)0U  << 3U )  
                       | (uint32)((uint32)0U  << 2U )
                       | (uint32)((uint32)0U <<1U );        
    
    
        /** @b Initialize @b CAN2: */
    
    
        /** - Setup control register
        *     - Enter initialization mode
        */
        canREG2->CTL = 0x00000001U;
    	
       /** - CAN2 Port output values */
        canREG2->TIOC =  (uint32)((uint32)1U  << 18U )
                       | (uint32)((uint32)0U  << 17U )
                       | (uint32)((uint32)0U  << 16U )  
                       | (uint32)((uint32)0U  << 3U )  
                       | (uint32)((uint32)0U  << 2U )    
                       | (uint32)((uint32)0U << 1U );
                       
        canREG2->RIOC =  (uint32)((uint32)1U  << 18U )    
                       | (uint32)((uint32)0U  << 17U )  
                       | (uint32)((uint32)0U  << 16U )   
                       | (uint32)((uint32)0U  << 3U )  
                       | (uint32)((uint32)0U  << 2U )
                       | (uint32)((uint32)0U <<1U );       
    
    
        /** @b Initialize @b CAN3: */
    
        /** - Setup control register
        *     - Disable automatic wakeup on bus activity
        *     - Local power down mode disabled
        *     - Disable DMA request lines
        *     - Enable global Interrupt Line 0 and 1
        *     - Disable debug mode
        *     - Release from software reset
        *     - Enable/Disable parity or ECC
        *     - Enable/Disable auto bus on timer
        *     - Setup message completion before entering debug state
        *     - Setup normal operation mode
        *     - Request write access to the configuration registers
        *     - Setup automatic retransmission of messages
        *     - Disable error interrupts
        *     - Disable status interrupts
        *     - Enter initialization mode
        */
        canREG3->CTL = (uint32)0x00000000U 
                     | (uint32)0x00000000U 
                     | (uint32)((uint32)0x00000005U << 10U)
                     | 0x00020043U;
    
        /** - Clear all pending error flags and reset current status */
        canREG3->ES |= 0xFFFFFFFFU;
    
        /** - Assign interrupt level for messages */
        canREG3->INTMUXx[0U] = (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U;
    	canREG3->INTMUXx[1U] = (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U
                             | (uint32)0x00000000U;
    
        /** - Setup auto bus on timer period */
        canREG3->ABOTR = (uint32)0U;
    
        /** - Setup IF1 for data transmission 
        *     - Wait until IF1 is ready for use 
        *     - Set IF1 control byte
        */
        /*SAFETYMCUSW 28 D MR:NA <APPROVED> "Potentially infinite loop found - Hardware Status check for execution sequence" */
        while ((canREG3->IF1STAT & 0x80U) ==0x80U)
        { 
        } /* Wait */
        canREG3->IF1CMD  = 0x87U;
    
        /** - Setup IF2 for reading data
        *     - Wait until IF1 is ready for use 
        *     - Set IF1 control byte
        */
        /*SAFETYMCUSW 28 D MR:NA <APPROVED> "Potentially infinite loop found - Hardware Status check for execution sequence" */
        while ((canREG3->IF2STAT & 0x80U) ==0x80U)
        { 
        } /* Wait */
        canREG3->IF2CMD = 0x17U;
    
        /** - Setup bit timing 
        *     - Setup baud rate prescaler extension
        *     - Setup TSeg2
        *     - Setup TSeg1
        *     - Setup sample jump width
        *     - Setup baud rate prescaler
        */
        canREG3->BTR = (uint32)((uint32)0U << 16U) |
                       (uint32)((uint32)(4U - 1U) << 12U) |
                       (uint32)((uint32)((6U + 4U) - 1U) << 8U) |
                       (uint32)((uint32)(4U - 1U) << 6U) |
                       (uint32)(uint32)9U;
    
    
        /** - CAN3 Port output values */
        canREG3->TIOC =  (uint32)((uint32)1U  << 18U )
                       | (uint32)((uint32)0U  << 17U )
                       | (uint32)((uint32)0U  << 16U )  
                       | (uint32)((uint32)0U  << 3U )  
                       | (uint32)((uint32)0U  << 2U )    
                       | (uint32)((uint32)0U << 1U );
                       
        canREG3->RIOC =  (uint32)((uint32)1U  << 18U )    
                       | (uint32)((uint32)0U  << 17U )  
                       | (uint32)((uint32)0U  << 16U )   
                       | (uint32)((uint32)0U  << 3U )  
                       | (uint32)((uint32)0U  << 2U )
                       | (uint32)((uint32)0U << 1U );       
    
        /** - Leave configuration and initialization mode  */
        canREG3->CTL &= ~(uint32)(0x00000041U);
    
        /** @b Initialize @b CAN1: */
    
    				   
        /** - CAN4 Port output values */
        canREG4->TIOC =  (uint32)((uint32)1U  << 18U )
                       | (uint32)((uint32)0U  << 17U )
                       | (uint32)((uint32)0U  << 16U )  
                       | (uint32)((uint32)0U  << 3U )  
                       | (uint32)((uint32)0U  << 2U )    
                       | (uint32)((uint32)0U << 1U );
                       
        canREG4->RIOC =  (uint32)((uint32)1U  << 18U )    
                       | (uint32)((uint32)0U  << 17U )  
                       | (uint32)((uint32)0U  << 16U )   
                       | (uint32)((uint32)0U  << 3U )  
                       | (uint32)((uint32)0U  << 2U )
                       | (uint32)((uint32)0U << 1U );       
    
    
        /**   @note This function has to be called before the driver can be used.\n
        *           This function has to be executed in privileged mode.\n
        */
    
    /* USER CODE BEGIN (5) */
    
    #endif
    
    /* USER CODE END */
    }

    Regards, Sunil

  • Ok, thank you for your response. We will implement a work around.