AM62P: CAN Acknowledgement Not Received and Error Passive State Issue

Part Number: AM62P

I am not receiving the acknowledgement.
The TX values are being printed in CCS, and the last error code and BUS-OFF status are both 0.
However, the Error Passive status remains at 1 continuously.

Normally, when the controller returns to the Error Active state, it should become 0, but in my case it stays at 1 forever.
Even when I enable external loopback mode, I am not receiving any RX data in CANoe .

Why am I not receiving the acknowledgement?
What should I do to make the reception work properly?

Reference code : 
mcan_loopback_interrupt.c 

  • I resolved the ACK issues but another issues is iam enabled the Internal loopback mode , but iam not getting the RX Bytes why  ??

    Code : 

    mcan_loopback_interrupt.c

    #include <stdio.h>
    #include <kernel/dpl/DebugP.h>
    #include <kernel/dpl/AddrTranslateP.h>
    #include <kernel/dpl/SemaphoreP.h>
    #include <drivers/mcan.h>

    #include "ti_drivers_config.h"
    #include "ti_drivers_open_close.h"
    #include "ti_board_open_close.h"

    #define APP_MCAN_BASE_ADDR   (CONFIG_MCAN0_BASE_ADDR)
    #define APP_MCAN_INTR_NUM    (CONFIG_MCAN0_INTR)
    #define APP_TX_ID            (0x123U)

    static HwiP_Object gMcanHwiObject;
    static SemaphoreP_Object gTxDoneSem;
    static uint32_t gMcanBaseAddr;

    /* ================= ISR ================= */
    static void App_mcanIntrISR(void *arg)
    {
        uint32_t status = MCAN_getIntrStatus(gMcanBaseAddr);
        MCAN_clearIntrStatus(gMcanBaseAddr, status);

        if (status & MCAN_INTR_SRC_TRANS_COMPLETE)
        {
            SemaphoreP_post(&gTxDoneSem);
        }
    }

    /* ================= MCAN INIT ================= */
    static void App_mcanInit(void)
    {
        MCAN_InitParams initParams = {0};
        MCAN_ConfigParams configParams = {0};
        MCAN_BitTimingParams bitTimes = {0};
        MCAN_MsgRAMConfigParams msgRam = {0};

        MCAN_initOperModeParams(&initParams);
        initParams.fdMode = FALSE;      /* Classic CAN */
        initParams.brsEnable = FALSE;

        MCAN_initGlobalFilterConfigParams(&configParams);
        MCAN_initSetBitTimeParams(&bitTimes);   /* default 1 Mbps */

        MCAN_initMsgRamConfigParams(&msgRam);
        msgRam.txBufCnt = 1;
        msgRam.txBufMode = MCAN_TX_MEM_TYPE_BUF;

        while (!MCAN_isMemInitDone(gMcanBaseAddr));

        MCAN_setOpMode(gMcanBaseAddr, MCAN_OPERATION_MODE_SW_INIT);
        while (MCAN_getOpMode(gMcanBaseAddr) != MCAN_OPERATION_MODE_SW_INIT);

        MCAN_init(gMcanBaseAddr, &initParams);
        MCAN_config(gMcanBaseAddr, &configParams);
        MCAN_setBitTime(gMcanBaseAddr, &bitTimes);
        MCAN_msgRAMConfig(gMcanBaseAddr, &msgRam);

        MCAN_setOpMode(gMcanBaseAddr, MCAN_OPERATION_MODE_NORMAL);
        while (MCAN_getOpMode(gMcanBaseAddr) != MCAN_OPERATION_MODE_NORMAL);
    }

    /* ================= SEND ONE FRAME ================= */
    static void App_mcanSend(void)
    {
        MCAN_TxBufElement txMsg;
        uint32_t i;

        MCAN_initTxBufElement(&txMsg);

        txMsg.id  = (APP_TX_ID << 18);      /* Standard ID */
        txMsg.dlc = MCAN_DATA_SIZE_8BYTES;  /* 8-byte data */
        txMsg.fdf = FALSE;                  /* Classic CAN */
        txMsg.xtd = FALSE;

        for (i = 0; i < 8; i++)
            txMsg.data[i] = i;              /* 00 01 02 ... */

        MCAN_writeMsgRam(gMcanBaseAddr, MCAN_MEM_TYPE_BUF, 0, &txMsg);
        MCAN_txBufAddReq(gMcanBaseAddr, 0);

        SemaphoreP_pend(&gTxDoneSem, SystemP_WAIT_FOREVER);
    }

    /* ================= MAIN ENTRY ================= */
    void mcan_simple_tx_main(void *args)
    {
        HwiP_Params hwiPrms;

        DebugP_log("MCAN Simple TX Example Start\r\n");

        gMcanBaseAddr = (uint32_t)AddrTranslateP_getLocalAddr(APP_MCAN_BASE_ADDR);

        SemaphoreP_constructBinary(&gTxDoneSem, 0);

        HwiP_Params_init(&hwiPrms);
        hwiPrms.intNum = APP_MCAN_INTR_NUM;
        hwiPrms.callback = App_mcanIntrISR;
        HwiP_construct(&gMcanHwiObject, &hwiPrms);

        MCAN_enableIntr(gMcanBaseAddr, MCAN_INTR_SRC_TRANS_COMPLETE, TRUE);
        MCAN_selectIntrLine(gMcanBaseAddr, MCAN_INTR_SRC_TRANS_COMPLETE, MCAN_INTR_LINE_NUM_0);
        MCAN_enableIntrLine(gMcanBaseAddr, MCAN_INTR_LINE_NUM_0, TRUE);

        App_mcanInit();

        while (1)
        {
            App_mcanSend();
            ClockP_usleep(500000);  /* send every 500 ms */
        }
    }