【TI毫米波雷达笔记】SOC外设中断监听功能(Listen)初始化配置及驱动(以IWR6843AOP为例)

【TI毫米波雷达笔记】SOC外设中断监听功能(Listen)初始化配置及驱动(以IWR6843AOP为例)

#include 

SOC初始化以后 可以配置监听以配置中断回调来查看当前运行情况:

采用函数SOC_registerSysIntListener
进行配置

注意这个函数只能配置非系统中断 否则运行时报错:
【TI毫米波雷达笔记】SOC外设中断监听功能(Listen)初始化配置及驱动(以IWR6843AOP为例)_第1张图片

【TI毫米波雷达笔记】SOC外设中断监听功能(Listen)初始化配置及驱动(以IWR6843AOP为例)_第2张图片

The system interrupt specified in the argument is not handled by the SOC module

系统中断(硬件中断)则需要其他的方式配置

结构体SOC_SysIntListenerCfg 中指定中断类型 回调函数 和 传参
比如chirp有效中断SOC_XWR68XX_MSS_CHIRP_AVAIL_IRQ
【TI毫米波雷达笔记】SOC外设中断监听功能(Listen)初始化配置及驱动(以IWR6843AOP为例)_第3张图片
表示chirp数据有效时的中断

另外还有一个可用:
表示frame开始时的中断SOC_XWR68XX_MSS_FRAME_START_INT

配置函数:

void Init_Listen(void)
{
    int32_t         errCode;
    SOC_SysIntListenerCfg   listenerCfg;

    /* Register Chirp Available Listener */
    memset ((void*)&listenerCfg, 0, sizeof(SOC_SysIntListenerCfg));

    listenerCfg.systemInterrupt   = SOC_XWR68XX_MSS_CHIRP_AVAIL_IRQ;
    listenerCfg.listenerFxn       = MMWave_chirpIntCallback;
    listenerCfg.arg               = 0;
    MMWave_Global_Params.handle.chirpIntHandle = SOC_registerSysIntListener (MMWave_Global_Params.handle.socHandle, &listenerCfg, &errCode);
    if (MMWave_Global_Params.handle.chirpIntHandle == NULL)
    {
        System_printf ("Error: Unable to register the Chirp Available Listener [Error code %d]\n", errCode);
    }

    /* Register Frame Start Listener */
    memset ((void*)&listenerCfg, 0, sizeof(SOC_SysIntListenerCfg));

    listenerCfg.systemInterrupt   = SOC_XWR68XX_MSS_FRAME_START_INT;
    listenerCfg.listenerFxn       = MMWave_frameStartIntCallback;
    listenerCfg.arg               = 0;
    MMWave_Global_Params.handle.frameStartIntHandle = SOC_registerSysIntListener (MMWave_Global_Params.handle.socHandle, &listenerCfg, &errCode);

    if (MMWave_Global_Params.handle.frameStartIntHandle == NULL)
    {
        System_printf("Error: Unable to register the Frame start Listener [Error code %d]\n", errCode);
    }

另外 亲测发现中断SOC_XWR68XX_MSS_FRAME_START_INT其实是在每次发送chirps时调用(也就是一帧内会调用很多次)
而中断SOC_XWR68XX_MSS_CHIRP_AVAIL_IRQ则是每次chirp发送后 数据有效时调用 这两个其实差不多 所以只用一个就可以了
比如中断SOC_XWR68XX_MSS_CHIRP_AVAIL_IRQ 可以在每次数据有效时通过ADCBuf移动数据

static uint8_t chirp_updata_flag=0;
void MMWave_chirpIntCallback(uintptr_t arg)
{
    int32_t         errCode;
    uint8_t channel=0;
    uint32_t add=0;

    for(channel=0;channel<4;channel++)
    {
        add = ADCBuf_getChanBufAddr(MMWave_Global_Params.handle.adcbuf_handle,channel,&errCode);
        memset(&L3_RAM_Buf[chirp_updata_flag*2048+channel*512],0,512);
        memcpy(&L3_RAM_Buf[chirp_updata_flag*2048+channel*512],(void *)add,512);
    }
    chirp_updata_flag++;
    if(chirp_updata_flag==96)
    {
        chirp_updata_flag=0;
    }
}

你可能感兴趣的:(TI毫米波雷达笔记,笔记,嵌入式硬件,单片机,TI,雷达,毫米波雷达)