1、在bios下,设置一个硬件中断,但是事件是CIC里面的,我首先在cfg文件里面创建了一个中断,关于CIC到core中断的映射,不知道用什么语句来写,我就把CIC里面寄存器的地址写出来,去设置这些寄存器,使CIC中EDMA0的中断映射到了core中断4,我不知道这么设置对不对?设置寄存器的时候,需不需要解锁KICK0等?
2、还有一个问题是依旧是BIOS下,第一个核利用messageq向第二个核发送消息,第二个核根据消息内容来判断执行哪一步,类似于官方vlfft OK那个历程,但是总是卡在mode = msg->mode;,这一步不再往下进行,不知道问题出现在哪,也没报错
while(1)
{
status = MessageQ_get(messageQ, (MessageQ_Msg *)&msg, MessageQ_FOREVER);
mode = msg->mode;
if(mode == VLFFT_DO_NOTHING)
{
msg->mode = VLFFT_PROCESS_1stITER;//VLFFT_OK;
}
// 1st iteration processing
if(mode == VLFFT_PROCESS_1stITER)
{
#if ENABLE_VLFFT_PROCESSING
/******************************************************/
/* configure EDMA for 1st iteration of FFTs */
/******************************************************/
vlfftEdmaConfig_1stIter( &DMAparams);
ptrIn = inData;
ptrOut = workBufExternal;
VLFFT_1stIter( ptrIn, ptrOut, &VLFFTparams, &VLFFTbuffers, &DMAparams, coreNum);
#endif msg->mode = VLFFT_OK;
} // if(msg.mode == VLFFT_PROCESS_1stITER)
// 2nd iteration processing
if(mode == VLFFT_PROCESS_2ndITER)
{
/******************************************************/
/* configure EDMA for 2nd iteration of FFTs */
/******************************************************/
#if ENABLE_VLFFT_PROCESSING
vlfftEdmaConfig_2ndIter( &DMAparams);
ptrIn = workBufExternal;
ptrOut = outData;
VLFFT_2ndIter( ptrIn, ptrOut, &VLFFTparams, &VLFFTbuffers, &DMAparams, coreNum);
#endif
msg->mode = VLFFT_OK;
} // if(msg.mode == VLFFT_PROCESS_2ndITER)
if(mode == VLFFT_EXIT){
#ifdef ENABLE_PRINTF
System_printf("The test is complete!\n");
// System_printf("\n\n");
#endif
#ifdef ENABLE_SYSTEM_TRACE_LOGS
STMXport_logMsg(pSTMHandle, STM_CHAN_STATUS, "Test Complete\0");
#endif
System_exit(0);
}
/*********************************************/
/* send the message to the remote processor */
/*********************************************/
#if DEBUG_DISPLAY
System_printf( " Sending a message to core0\n" );
#endif
status = MessageQ_put(core0QueueId, (MessageQ_Msg)msg);
#if DEBUG_DISPLAY
if (status < 0) {
System_abort("MessageQ_put had a failure/error\n");
}
#endif
} // while(1)
}
Thomas Yang1:
1 CIC 出来是HOST EVENT,通过HOST EVENT会挂接到128个Core event上,core event然后会和interrupt关联。安装了processor SDK或者MCSDK后可以看下PDK中CIC相应的API函数和例子
2 mode = msg->mode;不是一个赋值语句么?不明白为什么会卡在这里,可以在汇编窗口单步跟踪看看
user4712072:
回复 Thomas Yang1:
首先感谢你的回复
1、关于第一个中断有点了解了。我在pdk6678下面的csl下面找到了cic中断,但是那个例子好像是裸机下,用到了中断向量表,我想在bios下设置CIC,那些api函数一样吗?
2、第二个问题我没有说明白,其实大概是如下:
core1: core2:
messageQ_put(); messageQ_get();
Semaphore_pend(sem); EVENT_send();(post核0中的那个sem)
然后我用Timestamp_get32()来测量核0中释放Semaphore_pend(sem); 需要多长时间。CCS仿真中时间用了13697个,而在板子上用仿真器跑了一下,时间很长,达到了325987612,不知道为什么出现这种情况,我用的是官方vlfft OK那个模板,算法是自己的