程序:IPC_example_on_C6678
疑问:为什么这个程序中没有中断向量(即.asm文件)?
个人的一些理解:查阅了相关问题贴,有技术人员说是使用了csl文件进行了中断映射。我看了程序,猜想函数ipcregisterInterrupt()与中断向量的功能是等价的,对于这个仅仅是猜想,还不确定,所以向各位技术大佬求证一下。如果等价,那么我是否可以把这一段注释,然后在中断向量中写呢?
附录:
附录:函数ipcregisterInterrupt() 的代码
int32_t ipcregisterInterrupt()
{
uint32_t i;
uint32_t event;
uint32_t vector;
uint32_t core;
uint32_t coreID = CSL_chipReadReg (CSL_CHIP_DNUM);
CSL_IntcEventHandler isr;
for (i=0; i<MAX_CORE_NUM; i++)
{
coreVector[i] = 0;
}
for (i=0; i<MAX_SYSTEM_VECTOR; i++)
{
core= intInfo[i].core;
if (coreID == core)
{
event = intInfo[i].event;
vector = intInfo[i].vect;
isr= intInfo[i].isr;
if (MAX_CORE_VECTOR <= coreVector[core])
{
printf("Core %d Vector Number Exceed\n");
}
//该语句就是将CIC送给Core的system event x绑定Corepac的中断序号
//intcObj[vector]中就是eventID与绑定的INTID
// CSL_intcOpen()的返回值
// CSL_SOKValid intc handle is returned
// CSL_ESYS_FAILThe open command failedhintc[vector] = CSL_intcOpen (&intcObj[vector], event, (CSL_IntcParam*)&vector , NULL);if (hintc[vector] == NULL){printf("Error: GEM-INTC Open failed\n");return -1;}/* Register an call-back handler which is invoked when the event occurs. */EventRecord.handler = isr;EventRecord.arg = 0;if (CSL_intcPlugEventHandler(hintc[vector],&EventRecord) != CSL_SOK)//将一个event-handler分配给event,所以当event产生时就会生成一个event-handler{printf("Error: GEM-INTC Plug event handler failed\n");return -1;}
/* clear the events. */if (CSL_intcHwControl(hintc[vector],CSL_INTC_CMD_EVTCLEAR, NULL) != CSL_SOK){printf("Error: GEM-INTC CSL_INTC_CMD_EVTCLEAR command failed\n");return -1;}
/* Enabling the events. */if (CSL_intcHwControl(hintc[vector],CSL_INTC_CMD_EVTENABLE, NULL) != CSL_SOK){printf("Error: GEM-INTC CSL_INTC_CMD_EVTENABLE command failed\n");return -1;}
coreVector[core]++;
}
}return 0;
}
Nancy Wang:
ipc程序里应该是直接调用的CSL里面封装好的函数进行配置的,比较方便。可以自己直接配置中断向量表。
user5161889:
回复 Nancy Wang:
好的,谢谢!我仔细看下哈
user5161889:
回复 Nancy Wang:
你好,我再多问一句,应该可以混合编程吧,就是既用CSL又用中断向量,保证两个文件中的中断向量映射不重叠。
TI中文支持网


