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.

Dropped interrupt for event 64 (TINTLn)

Other Parts Discussed in Thread: SYSBIOS

 I am developing multithreaded software for C6678 platform. Now I have encountered the problem of dropped interrupt with INTXERR (at 0x01800180) equal to 400E0001. This indicates that the dropped event is 0x40, i.e., TINTLn. I believe that the BIOS (task) uses TINTL0 to TINTL7? My code uses timer instance 8. It seems that once this happens, all other interrupts I am using fail to trig. Could any one tell me a clue what could be the possible reason for this dropped interrupt.

Dongning

  • Hi Dongning,

    I'm not familiar with INTXERR and I could not it in the main data sheet or the timer64 spru. Where did you find an explanation?

    SYS/BIOS does use the lower half of timers 0-7 (one for each core) by default. How did you create timer 8? What other interrupts are you using? Can you insert a snapshot of the Tools->ROV->Hwi and Timers into this thread?

    Todd

  • Hi Todd,

     

    Thank you for your prompt reply.

    INTXERR is documented in CorePack user guide section 9.2.3.2.

    My timer instance is created by the following code:

     

    enum eTIMER {  

    TIMER_INST_NUM = 8,  

    TIMER_ADDR_BASE = 0x02200000 + 0x00010000*TIMER_INST_NUM,  

     TIMER_64BIT_COUNTER_ADDR = TIMER_ADDR_BASE + 0x10,  

    TIMER_FREQUENCY = 1000000 };

    void ConfigTimer()

    {  

    volatile sTimer* timer = (volatile sTimer*) TIMER_ADDR_BASE;  

     timer->tcr = 0;  

    timer->cntLo = 0;

    timer->cntHi = 0;

    timer->prdlo = 0xffffffff;  

     timer->prdhi = 0xffffffff;  

    timer->tgcr = 3; // 64-bit GP timer  

    timer->rello = 0xffffffff;  

    timer->relhi = 0xffffffff;

      timer->tcr = (2 << 6); // (3 << 22) | ;

    }

    Core0 has teh following HWI usage:

    enum eHARDWARE_INT {  

    HW_INT_INPUT_MSG             = 4, // PCIE MSI used by master C6678  

    HW_INT_INPUT_DATA            = 6, // EDMA  

    HW_INT_LOCAL_FRAME_JOB_DONE  = 7, // To interrupt by CpIntc_postSysInt(0, 58). Here our code does not uses I2C 

    HW_INT_REMOTE_FRAME_JOB_DONE = 8, // Hyperlink used by master C6678  

    HW_INT_CFG_UPDATED           = 8, // PCIE MSI used by slave C6678  

    HW_INT_OUTPUT_MSG            = 9, // EDMA  

    HW_INT_LOG_MSG               = 10, // EDMA  

    HW_INT_HYPLINK_MSG_SENT      = 12, // EDMA  

    HW_INT_OUTPUT_DATA           = 15 // EDMA

    };

     

    The HWI ROV basic view for core0 is as follows:

     

    ,0x0085c170,0x0085c218,,14,ti_sysbios_knl_Clock_doTick__I,0x00000000,0x0c011b60,64,0x4000,0x4000

    ,0x0083dc38,,,5,ti_sdo_ipc_family_c647x_Interrupt_intShmStub__I,0x0083db70,0x0c0326b0,91,0x20,0x20

    ,0x0083fc60,0x0083fc50,,10,ti_sysbios_family_c66_tci66xx_CpIntc_dispatch__F,0x00000011,0x0c0145c0,107,0x400,0x400

    ,0x008441a8,0x00844198,,7,ti_sysbios_family_c66_tci66xx_CpIntc_dispatch__F,0x00000008,0x00000000,104,0x80,0x80

    ,0x008441d8,0x008441c8,,12,ti_sysbios_family_c66_tci66xx_CpIntc_dispatch__F,0x00000019,0x00000000,109,0x1000,0x1000

    ,0x00844208,0x008441f8,,9,ti_sysbios_family_c66_tci66xx_CpIntc_dispatch__F,0x00000010,0x00000000,106,0x200,0x200

    ,0x00844238,0x00844228,,15,ti_sysbios_family_c66_tci66xx_CpIntc_dispatch__F,0x00000018,0x00000000,108,0x8000,0x8000

    ,0x00844268,0x00844258,,6,ti_sysbios_family_c66_tci66xx_CpIntc_dispatch__F,0x00000001,0x00000000,103,0x40,0x40

    ,0x00844298,0x00844288,,4,MsiIrqHandler,0x0085e280,0x00000000,17,0x10,0x10

    ,0x008442c8,0x008442b8,,8,ti_sysbios_family_c66_tci66xx_CpIntc_dispatch__F,0x00000009,0x00000000,105,0x100,0x100

     The ROV basic view of the Timer is as follows:

     

    ,0x0085be30,0x0085c220,,0,StartMode_AUTO,RunMode_CONTINUOUS,166666,PeriodType_COUNTS,Half_LOWER,,14,ti_sysbios_knl_Clock_doTick__I,0x00000000,0x0,0x0,0x85c218

     

    Do I have to use CSL or BIOS to create timer?

    Regards,

     

    Dongning

  • I would create the timers with SYS/BIOS. Here are the reasons:

    • It plugs the vector table for you.
    • It helps avoid using the same timer id.
    • It allows you to call SYS/BIOS functions in your timer (e.g. Semaphore_post, or Swi_post, etc.)
    • ROV and logging support
    • It's more portable.

    Todd