我在使用AWR1843 EVM过程中,开启了Can口中断接收功,有时通信频繁会造成板卡意外死机,仿真中发现Can口中断影响了chirp的正常计数,造成frame启动时计数不为0。有没有设置中断优先级的资料,使chirp计数优先级更高?
我在使用AWR1843 EVM过程中,开启了Can口中断接收功,有时通信频繁会造成板卡意外死机,仿真中发现Can口中断影响了chirp的正常计数,造成frame启动时计数不为0。有没有设置中断优先级的资料,使chirp计数优先级更高?
你好,
我看了一下代码,目前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
}