TI中文支持网
TI专业的中文技术问题搜集分享网站

AWR1843 硬件中断优先级如何设定?

我在使用AWR1843 EVM过程中,开启了Can口中断接收功,有时通信频繁会造成板卡意外死机,仿真中发现Can口中断影响了chirp的正常计数,造成frame启动时计数不为0。有没有设置中断优先级的资料,使chirp计数优先级更高?

Chris Meng:

你好,

请问你使用的软件是基于那个demo? can中断影响的应该是mss上运行的代码,一般RF处理是在DSP/HWA侧完成的。你代码里的chirp计数是在mss的task里面完成的么?如果是,task的优先级是比HWI要低的。
在TRM里面有介绍中断的相关章节。

user5146960:

回复 Chris Meng:

我使用的是MRR工程,在DSS和MSS代码中都有chirp和frame的监听中断,在MSS代码中我使用了CAN口做了部分交互协议,现在CAN口的接收中断和chirp的监听中断有竞争,frame启动时,有时chirp计数不为0,总是报错。

Chris Meng:

回复 user5146960:

你好,

我看了一下代码,目前canfd和chirp/frame event中断都是设置的优先级都是一样的。相关代码如下:

canfd的中断注册代码:

canfd.c

                   HwiP_Params_init(&hwiParams);

                   hwiParams.name = "CANFD_0";

                   hwiParams.arg  = (uintptr_t)ptrCanFdMCB;

                   ptrCanFdMCB->hwiHandle0 = HwiP_create(ptrCanFdMCB->hwCfg.interruptNum0, CANFD_MCANInt0Isr, &hwiParams);

chirp中断:

dss_main.c

       /* Register interrupts. */

       SOC_SysIntListenerCfg listenerCfg;

       /* Register Chirp Available Listener */

       memset((void*) &listenerCfg, 0, sizeof(SOC_SysIntListenerCfg));

       listenerCfg.systemInterrupt = SOC_XWR18XX_DSS_INTC_EVENT_CHIRP_AVAIL;

       listenerCfg.listenerFxn = MRR_DSS_chirpIntCallback;

       listenerCfg.arg = 0;

       gMrrDSSMCB.chirpIntHandle = SOC_registerSysIntListener(gMrrDSSMCB.socHandle, &listenerCfg, &errCode);

soc_xwr18xx_dss.c

void SOC_deviceInit (SOC_DriverMCB* ptrSOCDriverMCB, int32_t* errCode){…

/*********************************************************************************** * Frame Start System Interrupt ***********************************************************************************/ HwiP_Params_init(&hwiParams); hwiParams.name = "FrameStartISR"; hwiParams.arg = (uintptr_t)&ptrSOCDriverMCB->sysIntTable[sysIntIndex]; ptrSOCDriverMCB->sysIntTable[sysIntIndex].intNum = SOC_XWR18XX_DSS_INTC_EVENT_FRAME_START; ptrSOCDriverMCB->sysIntTable[sysIntIndex].hwiHandle = HwiP_create(ptrSOCDriverMCB->sysIntTable[sysIntIndex].intNum, SOC_SystemISR, &hwiParams); HwiP_disableInterrupt (ptrSOCDriverMCB->sysIntTable[sysIntIndex].intNum); sysIntIndex++;

/*********************************************************************************** * Chirp System Interrupt ***********************************************************************************/ HwiP_Params_init(&hwiParams); hwiParams.name = "ChirpAvailableISR"; hwiParams.arg = (uintptr_t)&ptrSOCDriverMCB->sysIntTable[sysIntIndex]; ptrSOCDriverMCB->sysIntTable[sysIntIndex].intNum = SOC_XWR18XX_DSS_INTC_EVENT_CHIRP_AVAIL; ptrSOCDriverMCB->sysIntTable[sysIntIndex].hwiHandle = HwiP_create(ptrSOCDriverMCB->sysIntTable[sysIntIndex].intNum, SOC_SystemISR, &hwiParams); HwiP_disableInterrupt (ptrSOCDriverMCB->sysIntTable[sysIntIndex].intNum); sysIntIndex++;

…}

HwiP_tirtos.c

void HwiP_Params_init(HwiP_Params *params){ params->name = NULL; params->arg = 0; params->priority = ~0; params->enableInt = TRUE;#ifdef SUBSYS_MSS params->type = HwiP_Type_IRQ;#endif}

user5146960:

回复 Chris Meng:

非常感谢,但是,有没有指令可以在现有工程内设置优先级,保证CAN口的优先级低于Frame的优先级?

赞(0)
未经允许不得转载:TI中文支持网 » AWR1843 硬件中断优先级如何设定?
分享到: 更多 (0)