AWR1843BOOST: 1843缓冲区数据输入输出机制

Part Number: AWR1843BOOST


我正在ccs中写一个通过串口输出采集数据的固件。在此前使用单个发射天线的情况下一切顺利,如今采用多个发射天线,也就是会有多个chirp,考虑到ADC buffer只有32kb的大小,那么我还是得在收到单个chirp中断信号后就告知串口输出数据吧?此时我去 ADC buffer对应的地址0x5200 7FFF提取需要的数据,我的问题是每次新的chirp到来时,是从地址0x5200 7FFF开始重新写入数据吗,还是并不会覆盖,直到ADC buffer被填满后再从头开始写入数据?我的输出逻辑是不是只需要每次采集一个chirp后,输出单个chirp对应的接收通道(RX数量)的数据即可?

  • 您好,收到了您的案例,调查需要些时间,感您的耐心等待。

  • Hi  

    ADC buffer is a ping-pong buffer.  When one buffer is being filled up by front end, the previously filled buffer can be accessed for data processing like range FFT.  You can find this topic in the TRM (technical Reference Manual) to understand how ADC buffer work. 

    Thanks

    Ken

  • Thanks for your answer. Now I have a new problem:

    I’m working with TI mmWave (MSS side) and using SOC_SysIntListener to listen to the chirp available interrupt. I use this interrupt to notify a UART task to output ADC data.

    Below is the listener configuration and callback:

    static void Adcdata_MSS_chirpIntCallback(uintptr_t arg)
    {
        gAdcdataMSSMCB.chirpInt++;
        if (gAdcdataMSSMCB.chirpInt == 3) {
            gAdcdataMSSMCB.frameflag = ~gAdcdataMSSMCB.frameflag;
            gAdcdataMSSMCB.chirpInt = 0;           
            Semaphore_post(gAdcdataMSSMCB.uartSendSemHandle);
        }
    }

    The listener is registered via:

    listenerCfg.listenerFxn = Adcdata_MSS_chirpIntCallback;

    My radar configuration

    Chirp configuration:

    #define CHIRP_Adcdata_PROFILE_ID (0U)
    #define CHIRP_Adcdata_START_INDEX (0U)
    #define CHIRP_Adcdata_END_INDEX (2U) // 3 chirps #define CHIRP_Adcdata_TX_CHANNEL (TX_CHANNEL_1_ENABLE)

    Advanced frame configuration:

    #define SUBFRAME_Adcdata_LOOP_COUNT (1U)
    #define SUBFRAME_Adcdata_PERIODICITY_VAL (200000000U) // 1s
    #define SUBFRAME_Adcdata_NUM_CHIRPS_TOTAL \ ((CHIRP_Adcdata_END_INDEX - CHIRP_Adcdata_START_INDEX + 1) * SUBFRAME_Adcdata_LOOP_COUNT)

    So effectively:

    • 1 subframe

    • 3 chirps per subframe

    • Frame periodicity = SubFrame periodicity ≈ 1 second (from system behavior)


    Observed behavior

    • When I trigger UART output at:

      if (chirpInt == 1)

      → UART output happens once per frame (≈1 second), which matches my expectation.

    • However, when I change it to:

      if (chirpInt == 3)

      → UART output happens once every 3 seconds.

    This is confusing to me.


    My understanding vs. reality

    I originally assumed:

    • chirpInt increments once per chirp

    • Since each subframe has 3 chirps, chirpInt == 3 should still trigger once per frame

    But the observed behavior suggests:

    • chirpInt may be incremented once per subframe, not once per chirp

    • Or the chirp available interrupt is not generated for each chirp, but at a higher-level boundary


    My questions

    1. Does the SOC chirp available interrupt fire once per chirp or once per subframe in Advanced Frame mode?

    2. Is chirpInt actually counting subframes, not physical chirps?

    3. If I want to trigger UART output once per frame, is it correct that I should just check:

      if (chirpInt == 1)

      instead of trying to match the number of chirps?

    4. What is the recommended way to determine end-of-subframe / end-of-frame for ADC data handling on MSS?

    Any clarification on how the chirp interrupt is generated and how it maps to chirps/subframes/frames would be greatly appreciated.

    Thanks in advance!