This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

c6678 中断未响应,DSP死掉



我用的芯片是c6678cyp yb20-3azde79多核,cpu用的是FSL8315,板子上面有2颗DSP

采用的是自己设计的板子,使用的仿真器型号为xds100v2 usb emulator

ccs的版本为CCS5.4.0.00091_win32       mcsdk版本为bios_mcsdk_02_01_02_06_setupwin32.exe 

硬件环境是这样的:dsp的GPIO8-15管脚和fpga直连,FPGA实现看门狗的功能,每个DSP有8个看门狗,在看门狗超时的时候,会给对应的GPIO发送一个中断信号,下降沿触发,但是代码中虽然实现了中断的功能,但是中断处理函数没有被执行,整个DSP就死掉了,想请教的问题是:

1.麻烦帮忙看一下,这样实现中断,代码是否正确,是否还缺代码,谢谢。下面是代码

ddspGpioInit(DNUM);//dnum代表核,数值为0-7

/* 初始化硬件中断参数 */
Hwi_Params_init(&hwiParams);

uprintf("core%d is Hwi_Params_init()\n",DNUM);

/* 创建硬件中断 */
hwiParams.eventId = DNUM+82;

hwiHandle = Hwi_create(DNUM+4,WatchdogIsrHandler,&hwiParams,NULL);

void ddspGpioInit(DNUM)
{
/*初始化GPIO*/
gpioInit();

/*设置GPIO8为输入模式*/
gpioSetDirection(DNUM+8,GPIO_IN);


/*设置GPIO8为下降沿触发中断*/
gpioSetFallingEdgeInterrupt(DNUM+8);

/*使能GPIO8全局中的*/
gpioEnableGlobalInterrupt();
//gpioDisableGlobalInterrupt();
uprintf("core%d is ddspGpioInit()\n",DNUM);

/* 清理gpio中断 */
clearHostInt();

}

void WatchdogIsrHandler(){

uprintf("core is watchdog interrupt handler\n");

clearHostInt();
}

  • 怀疑可能是中断配置的问题,你代码中实现了中断响应么?

    参考中断配置:http://processors.wiki.ti.com/index.php/Configuring_Interrupts_on_Keystone_Devices

    GPIO的配置参考STK:http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/47664.aspx

  • Dear yin:

    代码中实现了中断响应,先清理中断,然后打印一句话,代码如下

    PCI_RESOURCE *pReso;
    int i;
    pReso=pciAltTseRes;

    WDT_REG_OUT(pReso->bar0 + WATCHDOG_OFFSET+ WATCHDOG_INTERVAL * (DSPID * 8 + DNUM), WDT_INT_REG,0);
    for (i = 0; i < 100; i++)
    ;
    WDT_REG_OUT(pReso->bar0 + WATCHDOG_OFFSET+ WATCHDOG_INTERVAL * (DSPID * 8 + DNUM), WDT_INT_REG,1);

    uprintf("core is watchdog interrupt handler\n");

    请帮忙确认我所写的eventid=dnum+82,当我用的是GPIO 15的时候,eventid=97是否正确,谢谢

  • Dear yin:

    代码中实现了中断响应,先清理中断,然后打印一句话,代码如下

    PCI_RESOURCE *pReso;
    int i;
    pReso=pciAltTseRes;

    WDT_REG_OUT(pReso->bar0 + WATCHDOG_OFFSET+ WATCHDOG_INTERVAL * (DSPID * 8 + DNUM), WDT_INT_REG,0);
    for (i = 0; i < 100; i++)
    ;
    WDT_REG_OUT(pReso->bar0 + WATCHDOG_OFFSET+ WATCHDOG_INTERVAL * (DSPID * 8 + DNUM), WDT_INT_REG,1);

    uprintf("core is watchdog interrupt handler\n");

    请帮忙确认我所写的eventid=dnum+82,当我用的是GPIO 15的时候,eventid=97是否正确,谢谢