您好:
在安装目录下pdk中TCP3dTestProject修改成所需程序,测试通过。
然后移植到其他工程(未进行代码修改),没有中断响应,程序没有跑进这三个函数:Void revt1ChCallback(Void)、Void revt1ChCallback(Void) 和 Void tcp3dEventISR(UInt32 testEvtNum)
{
tcp3dEventCntr++;
tpccEvtCntr++;
if ( sendBlockCnt >= codeBlockSet.maxNumCB )
Semaphore_post(semSendWait);
else
Semaphore_post(semSendBlock);
}
以下是前提:
1.移植时没有修改过代码。
2.单步跟如下函数,没有发现问题,eventId正确。
Void registerTcp3dEvent(Void)
{
static UInt32 cookie = 0;
Int eventId = 0; /* GEM event id */
static UInt32 mapDone = 0;
/* Disabling the global interrupts */
cookie = Hwi_disable();
CpIntc_dispatchPlug(testEvt[instNum], tcp3dEventISR, hostIntr[dspCoreID], TRUE);
if (!mapDone)
CpIntc_mapSysIntToHostInt(0, testEvt[instNum], hostIntr[dspCoreID]);
CpIntc_enableHostInt(0, hostIntr[dspCoreID]);
eventId = CpIntc_getEventId(hostIntr[dspCoreID]); //instNum=0;dspcoreID=0;eventID=28
EventCombiner_dispatchPlug (eventId,
CpIntc_dispatch,
hostIntr[dspCoreID],
TRUE);
/* enable the 'global' switch */
CpIntc_enableAllHostInts(0);
mapDone = 1;
/* Restore interrupts */
Hwi_restore(cookie);
}
3.如果不进行中断响应,注掉Semaphore_pend(semSendWait, BIOS_WAIT_FOREVER); wait一会后直接进行译码结果判断,译码结果是正确的。说明除了无法触发中断,程序译码没有问题。
4.新工程中BIOS添加如下:
/*
* Pull in modules for EDMA3 LLD use
*/
xdc.useModule('ti.sysbios.family.c64p.Hwi');
xdc.useModule('ti.sysbios.family.c66.tci66xx.CpIntc');
var ECM = xdc.useModule('ti.sysbios.family.c64p.EventCombiner');
ECM.eventGroupHwiNum[0] = 7;
ECM.eventGroupHwiNum[1] = 8;
ECM.eventGroupHwiNum[2] = 9;
ECM.eventGroupHwiNum[3] = 10;
所以咨询专家两个问题:
1.还有没有其他地方我没考虑到,导致没有配置。能帮我分析下吗?
2.Void registerTcp3dEvent(Void)这些配置流程在哪个文档里能找到对应说明?对中断这块不熟,想好好研究研究中断。
Muhua Chen:
我也遇到类似问题,不能进中断,请问您找到解决方法了吗?
leo anand:
我曾经也遇到过这样的问题,注意2个TCP3D的REVT0与REVT1的传输EDMA通道是固定的,TCP3D—A是对应0,1通道而TCP3D——B是对应34,35通道,所以配置EDMA时,要注意选择有相应通道的EDMACc和shadow region.
Muhua Chen:
回复 leo anand:
leo anand 您好,我使用的是SDK的例子pdk_C6670_1_0_0_20\packages\ti\drv\exampleProjects\TCP3D_exampleProject
硬件仿真 TCP3D不工作,也不产生中断,卡在Void sndBlockTaskFunc(Void)这个任务的 第二个while(1)的Semaphore_pend(semSendWait, BIOS_WAIT_FOREVER);(730行左右),核的状态停止在Running。
请问您遇见过类似情况吗
leo anand:
回复 Muhua Chen:
使用EVM仿真,在TCP3D POWER ON函数中要关掉相应SIMULATOR的宏定义