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.

AWR1642BOOST: A “frame done” interrupt and a “chirp done” interrupt—— Interrupt service function

Part Number: AWR1642BOOST

hello,

   In the capture demo, Where is the interrupt service function(A “frame done” interrupt and a “chirp done” interrupt)when using lvds interface(if (gCaptureMCB.cfg.streamCfg.enableHighSpeedInterface == 1U))?I only saw the interrupt enable,as follows:

/* Enable Interrupts:
* - Chip & Frame Done Interrupt */
{
uint32_t interrupts = 0U;
interrupts |= CSL_FMKR (STAT_CBUFF_REG0_S_FRAME_DONE_BIT_END, STAT_CBUFF_REG0_S_FRAME_DONE_BIT_START, 1U);
interrupts |= CSL_FMKR (STAT_CBUFF_REG0_S_CHIRP_DONE_BIT_END, STAT_CBUFF_REG0_S_CHIRP_DONE_BIT_START, 1U);
CBUFF_enableInt (ptrDriverMCB->ptrCBUFFReg, interrupts);
}

Thanks!

  • Hello Fen,

    I'm sorry for the delay. I believe this question has been answered in this thread.


    Cheers,
    Akash
  • In the above case, data transfer from the ADC buffer to the CBUFF happens through EDMA. The EDMA takes care of data transfer once setup to trigger on a particular interrupt. In this case the Chirp and frame done interrupts are setup in the above code. There is no interrupt service routine.
    regards
    AK
  • Additionally, when the interrupts occur the following CBUF Interrupt service routine, CBUFF_ISR would be called.
    static void CBUFF_ISR (uintptr_t arg)
    {
    CBUFF_DriverMCB* ptrDriverMCB;
    uint8_t isFrameDone;
    uint8_t isChirpDone;
    CBUFF_Session* ptrSession;

    /* Get the pointer to the driver MCB: */
    ptrDriverMCB = (CBUFF_DriverMCB*)arg;

    /* Sanity Check: */
    DebugP_assert (ptrDriverMCB != NULL);

    /* Get the CBUFF Status: */
    CBUFF_getStatus (ptrDriverMCB->ptrCBUFFReg, &isFrameDone, &isChirpDone);

    /* Clear the CBUFF Status: */
    CBUFF_clearStatus (ptrDriverMCB->ptrCBUFFReg, isFrameDone, isChirpDone);

    /* Get the currently active session: */
    ptrSession = ptrDriverMCB->ptrCurrentActiveSession;
    if (ptrSession == NULL)
    {
    /* Record the number of the interrupts. */
    ptrDriverMCB->totalNumNonActiveSessionInterrupts++;
    goto exit;
    }

    /* Was the frame processed? */
    if (isFrameDone == 1U)
    {
    /* YES: The frame was processed. Increment the statistics */
    ptrDriverMCB->totalNumFrameDone++;

    /* Increment the statistics for the session */
    ptrSession->numFrameDone++;

    /* Do we need to invoke the callback function? */
    if (ptrSession->sessionCfg.frameDoneCallbackFxn != NULL)
    {
    /* YES: Notify the callback function that the frame done was received for the
    * active session. */
    ptrSession->sessionCfg.frameDoneCallbackFxn ((CBUFF_SessionHandle)ptrSession);
    }
    }

    /* Are we operating in debug mode? */
    if (ptrDriverMCB->initCfg.enableDebugMode == true)
    {
    /* Was the chirp processed? */
    if (isChirpDone == 1U)
    {
    /* YES: The chirp was handled. Increment the statistics */
    ptrDriverMCB->totalNumChirpDone++;

    /* Increment the statistics for the session */
    ptrSession->numChirpDone++;
    }
    }

    exit:
    return;
    }