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.

BCP和FFTC同时运行出现错误



目前是用给一个core去维护两个硬核 难度应该不大 而且在注释掉其中任何一个硬核的代码后, 另一个硬核都可以正常工作

 

但是  但是 当两个硬核一起工作的时候,总是有一个收不到中断(两个我都用的accumulator来做的 所以都有中断)

BCP 用的是

    eventId     =   49;// + CSL_chipReadReg (CSL_CHIP_DNUM);
    vectId      =   8;

    /* Register the ISR handle for this event */
    EventCombiner_dispatchPlug (eventId, (EventCombiner_FuncPtr)Bcp_HiPriorityAccumISR, (UArg)NULL, TRUE);
 EventCombiner_enableEvent(eventId);

 /* Map the event id to hardware interrupt. */
    Hwi_eventMap(vectId, eventId);

    /* Enable interrupt. */
    Hwi_enableInterrupt(vectId);

 

FFTC用的是

   else if (instNum == CSL_FFTC_B)
    {
        *pAccChannelNum     =   12;
        *pAccRxQNum         =   716;

    else if (fftcInstNum == CSL_FFTC_B)
 {
     eventId     =   51;
 }

    /* Register the FFTC driver's high priority ISR handle for this event */
    EventCombiner_dispatchPlug (eventId, (EventCombiner_FuncPtr)Fftc_rxHiPriorityRxISR, (UArg)hRxObj, TRUE);
 EventCombiner_enableEvent(eventId);

 Int32         vectId;
    vectId      =   9;

 /* Map the event id to hardware interrupt. */
    Hwi_eventMap(vectId, eventId);

    /* Enable interrupt. */
    Hwi_enableInterrupt(vectId);

 

现在问题不知道处在了哪里,可能是我基本功太差,所以请求指导!

 

谢谢大家

 

  • 补充一下  BCP的累加器信道用的是4  fftc用的是716  我就觉得很奇怪 为什么是4!!!都不是高优先级!但是bCP的例程写的就是4  难道是API里有+704?????

    急切求解答!

  • 跟你确认一下问题:一个core配置使用FFTC及BCP,如果只使用其中一个时,能够运行输出正确结果并且能产生中断,如果两个都使能,则只能产生一个中断?

    根据你的描述,你可以查看手册中的High Acc channel产生的事件与中断的对应关系,知BCP使用的是High Acc channel4, FFTC使用的是channel12。多个high channel是可以同时用于产生中断的,怀疑可能是其他原因导致。可以查查Acc channel监视的queue中有没有输出descriptor,及先确认BCP及FFTC有没有产生输出,如果没有则就是前面的问题,否则再查Acc channel相关问题,注意在响应Acc中断中,需要按照Navigator手册描述需要最后写EOI寄存器后才能再次触发中断。

     

  • 对的。目前是一份代码,如果注释掉其中某一个硬核的功能维护,其他一个硬核都能正常产生中断并且得到结果。但是两个在一起的时候,BCP可以得到中断,但是fftc的中断起不来,进不了中断服务程序,循环就卡在那里了。

    我查过中断事件对应表,6670的,BCP的累加器channel=4, 对应的rxq=900,使用时间号49,这个是我觉得很奇怪的,不是应该是708的queue才对应49么,900为什么还能正常工作?  FFTC的累加器channel=12,rxq=716,eventid=51,这个配置单单独fftc工作时没问题,反而和在一起的时候不工作了。

    至于查descriptor,我目前如果不用中断模式,fftc是可以收到fftc输出的数据的。由于我一直不清楚queue是放在哪里的,所以我也不知道怎么监视acc channel对应的716号queue有没有收到descriptor。(我知道descriptor的位置,也知道memory region,但是queue在哪里不知道,而且不懂queue至于8192个,那8192个queue在哪里,如果一个queue的descriptor数量不是一定的,那总的queue的空间岂不是变化的,但是硬件又不可能给无限大的储存空间,唯一的解决方法那queue就是在L2上的呢?但是和qmss不在一起,总之感觉挺别扭。)

    响应中断我是有清楚处理的:

        /* Clear INTD */
        Qmss_ackInterrupt (pRxObjInfo->accChannelNum, 1);
        Qmss_setEoiVector (Qmss_IntdInterruptType_HIGH, pRxObjInfo->accChannelNum);

     

    谢谢andy的回复,目前还是没找到问题。ing~~~~

  • 收到中断了 

    注释掉:

    // /* Map the event id to hardware interrupt. */
    // Hwi_eventMap(vectId, eventId);
    //
    // /* Enable interrupt. */
    // Hwi_enableInterrupt(vectId);

    原因不解,我觉得这句话以前例程里就有,我的中断服务程序是不需要硬中断的,但是有硬中断也不该有错。完全不解,我在继续对一下数看对不对,也不能马上下结论就好了。

  • BCP 和 FFTC 同时应用中断时,难道不支持全部都是硬中断?

    持续关注该问题。