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.

TDA2x, XDC_ASSERT occurs when DCAN1_TX is run

Hi,

I'm using TDA2x custom board with VisionSDK 3.07
I use DCAN1 and DCAN2 on this custom board.
(Not using VisionSDK DCAN module, using custom module.)

The DCAN1, 2's int, Rx, and Tx settings all work successfully.
And Rx, Tx data transfer, and reception work well.

But, In most cases, XDC_ASSERT occurs on DCAN1_Tx.
There is no problem with DCAN2.

=======================================================

[HOST] [IPU1-0] 30.703470 s: ### XDC ASSERT - ERROR CALLBACK START ###
[HOST] [IPU1-0] 30.703531 s:
[HOST] [IPU1-0] 30.703684 s: E_hardFault: FORCED
[HOST] [IPU1-0] 30.703715 s:
[HOST] [IPU1-0] 30.703776 s: ### XDC ASSERT - ERROR CALLBACK END ###
[HOST] [IPU1-0] 30.703837 s:
[HOST] [IPU1-0] 30.704050 s:
[HOST] [IPU1-0] 30.704081 s: ### XDC ASSERT - ERROR CALLBACK START ###
[HOST] [IPU1-0] 30.704142 s:
[HOST] [IPU1-0] 30.704264 s: E_busFault: PRECISERR: Immediate Bus Fault, exact addr known, address: 4ae3c120
[HOST] [IPU1-0] 30.704386 s:
[HOST] [IPU1-0] 30.704416 s: ### XDC ASSERT - ERROR CALLBACK END ###

=======================================================

My DCAN_Tx function is as follows:
=======================================================

Void Dcan1Transmit(UInt16 ID, UInt32 TxMsgA, UInt32 TxMsgB)
{
    Vps_printf(" DCAN Tx: ID = %03x, Data = %08X %08X", ID, TxMsgA, TxMsgB) ;
    
    /* Check busy flag */
    while ( (DCAN1_IF2CMD & ( 1 << 15 )) ) {;}

    DCAN1_IF2ARB    = ( 1 << 31 )           // message object is to be used by message handler
                    | ( 0 << 30 )           // standard ID
                    | ( 1 << 29 )           // transmit
                    | ( ID << 18 ) ;        // ID = 0x7FF

    DCAN1_IF2DATA   = TxMsgA ;
    DCAN1_IF2DATB   = TxMsgB ;
    
    DCAN1_IF2MCTL   |= ( 1 << 15 )      // New data
                                     |  ( 1 << 8 ) ;     // TX request

    DCAN1_IF2CMD    |= ( DCAN1_TX_MAILBOX << 0 ) ;

    /* Check busy flag */
    while ( (DCAN1_IF2CMD & ( 1 << 15 )) ) {;}
}

=======================================================

The DCAN_INIT function is called from System_init() of IPU1_0.

And The DCAN_Tx function calls are as follows: (my_app\src\common\chain_main_linux.c)
=======================================================

Void Chains_main(UArg arg0, UArg arg1)
{
    ...
    Board_init();
    BspOsal_sleep(1000);
    while(1) {
        Dcan1Transmit(0x300, 0x00000000, 0x00000000);
        Dcan2Transmit(0x300, 0x00000000, 0x00000000);
        BspOsal_sleep(1000);
    }
    ...
}

=======================================================

I don't understand that problems only occur in DCAN1.

Best regards,
Lee.