我想要实现的是coreA中执行linux系统,coreB中执行DSP程序,linux系统运行后通过icc_loader载入并启动coreB程序运行。
coreB中的程序大体如下:
1、使能定时器管脚外围功能,在pinmux_config.c中添加:
/* PORTx_MUX registers */
*pREG_PORTG_MUX = TIMER0_TMR3_PORTG_MUX;
/* PORTx_FER registers */
*pREG_PORTG_FER = TIMER0_TMR3_PORTG_FER;
2、主程序中如下:
uint8_t TimerMemory[ADI_TMR_MEMORY];
static void TimerHandler(void *pCBParam, uint32_t Event, void *pArg);
static ADI_TMR_HANDLE ghTimer;
static volatile bool gbTimerInt = false;
uint32_t Period_CNT;
static void TimerHandler(void *pCBParam, uint32_t Event, void *pArg)
{
switch(Event)
{
case ADI_TMR_EVENT_DATA_INT:
adi_tmr_GetPeriod(ghTimer,&Period_CNT);
adi_tmr_Enable(ghTimer, false);
gbTimerInt = true;
break;
default:
break;
}
return;
}
void main(int argc, char *argv[])
{ ADI_TMR_RESULT eTmrResult;
Float32 freq_test=0;
if( (eTmrResult = adi_tmr_Open (6,
TimerMemory,
ADI_TMR_MEMORY,
TimerHandler,
NULL,
&ghTimer)) != ADI_TMR_SUCCESS)
{
}
eTmrResult = adi_tmr_SetMode(ghTimer, ADI_TMR_MODE_CAPTURE_ASSERT);
eTmrResult = adi_tmr_SetPulsePolarity(ghTimer,true);
eTmrResult = adi_tmr_SetClkInSource(ghTimer,ADI_TMR_CLKIN_SYSCLK);
while(1)
{
adi_tmr_Enable(ghTimer,true);
while(gbTimerInt== true);
{
gbTimerInt = false;
}
freq_test=(125.0/Period_CNT)*MHZTOHZ;//MHZTOHZ=1000000
}
问题:通过icc_loader加载coreB程序后死机,但是在CCES中coreA模仿linux运行,coreB程序却正常运行并得到正确的结果。
请专家多多指点!谢谢!