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.

TDA2x interrupt assertion

Other Parts Discussed in Thread: SYSBIOS

I want to operate Timer with interrupt in TDA2x EVM board.

I wrote code like this:

PRCM configure ->  

Timer interrupt init(cross bar connection, registering  ISR and enable interrupt) -> 

Timer configuration ->

Timer start

If the code is executed, the system assertion occur.

[Cortex_M4_IPU1_C0] ti.sysbios.family.arm.m3.Hwi: line 1277: ti.sysbios.family.arm.m3.Hwi: line 1277: E_noIsr: id = 54, pc = 84be11fa
Exception occurred in background thread at PC = 0x84be11fa.
Core 0: Exception occurred in ThreadType_Task.

How could I fix the error?

  • We have moved your post to the appropriate forum.
  • Hi Lee,
    Typically, similar problems occur if one or more module's clock(s) isn't enabled in PRCM. Please check this again.
    Can you please post here more details on PRCM, crossbar, timer config?
    Thanks,
    Stan
  • My environment is TDA2x(vision sdk 02_09_00 sysbios)
    I refered example code at "\ti_components\drivers\starterware_01_05_00_14\examples\timer\src\main_m4.c"
    and used function in the example.

    In under the code, I fixed some variable.(gXbarInst = 32, intrM4[gXbarInst - 1] = 54)
    gXbarInst is IRQ_CROSSBAR Instance number, and intrM4[gXbarInst - 1] is IRQ input line.
    (TDA2x_SR2.0_SR1.x_NDA_TRM_vAB.pdf@Table 17-5. IPU1_Cx_INTC Default Interrupt Mapping )


    /*Set PRCM for Timer4 */
    TimerPRCMConfigure();
    int status = invalid_ipu_id;
    uint8_t connectionStatus = 0;

    /*Unlock the Crossbar register */
    PlatformUnlockMMR();

    /* Connect the Xbar with interrupt source */
    status = IRQXBARConnect(SOC_IRQ_DMARQ_CROSSBAR_REGISTERS_BASE, CPU_IPU1,
    gXbarInst, TIMER4_IRQ);

    if (status == irq_xbar_success)
    {
    /* Check if xbar is indeed connected correctly */
    IRQXBARIsConnected(SOC_IRQ_DMARQ_CROSSBAR_REGISTERS_BASE, CPU_IPU1,
    gXbarInst, TIMER4_IRQ, &connectionStatus);
    if (connectionStatus == 1)
    {
    Vps_printf("XBar is sucessfully connected to inst: %d\n", gXbarInst);
    }
    else
    {
    Vps_printf("Wrong XBar Connection\n");
    // gTestStatus = STW_EFAIL;
    return -1;
    }
    }
    else
    {
    Vps_printf("XBar not able to connect\n");
    // gTestStatus = STW_EFAIL;
    return -1;
    }

    /* Initialize the interrupt control */
    Intc_Init();

    /* Enable the interrupt */
    Intc_IntEnable(0);

    /* Registering TimerIsr */
    Intc_IntRegister(intrM4[gXbarInst - 1], (IntrFuncPtr) TimerIsr, NULL);

    /* Set the priority */
    Intc_IntPrioritySet(intrM4[gXbarInst - 1], 2, 0);

    /* Enable the system interrupt */
    Intc_SystemEnable(intrM4[gXbarInst - 1]);


    I heard that vision sdk internally use some of timers.
    Could I know that information?
  • Hi Lee,

    If you are using timer with sysbios please ensure you have configuration in place.

    e.g. For M4, you can refer vision_sdk\src\main_app\tda2xx\ipu1_0\Ipu1_0.cfg, look for Clock and Timer module configuration.
  • Here is the ipu1_0.cfg
    If I use timer on M4, can I use timer9?
    And If I use timer 9, should I initialize timer and interrupt?

    /***********************************************
    * CLOCK Module Configuraion *
    ***********************************************/
    var Clock = xdc.useModule("ti.sysbios.knl.Clock");
    Clock.tickMode = Clock.TickMode_PERIODIC;
    Clock.tickSource = Clock.TickSource_USER;

    /***********************************************
    * Timer Module Configuraion *
    ***********************************************/
    var Timer = xdc.useModule('ti.sysbios.timers.dmtimer.Timer');

    Timer.intFreqs[8].hi = 0;
    /* system clock runs at 20 MHz */
    Timer.intFreqs[8].lo = 20000000;

    var timerParams = new Timer.Params();
    timerParams.period = 1000;
    timerParams.twer.ovf_wup_ena = 1;
    timerParams.tiocpCfg.emufree = 1;
    timerParams.tsicr.posted = 0;

    Timer.create(8, '&mainIPU1_C0TimerTick', timerParams);

    var DMTimer = xdc.useModule('ti.sysbios.timers.dmtimer.Timer');
    var timerParams2 = new DMTimer.Params();
    timerParams2.tsicr.posted = 0;

    DMTimer.intFreqs[10].hi = 0;
    DMTimer.intFreqs[10].lo = 20000000;
    var DMTimestampProvider = xdc.useModule("ti.sysbios.timers.dmtimer.TimestampProvider");
    DMTimestampProvider.timerId = 10;
    DMTimestampProvider.useClockTimer = false;
    var Timestamp = xdc.useModule("xdc.runtime.Timestamp");
    Timestamp.SupportProxy = DMTimestampProvider;

    /* allocate timer 9 to IPU0 */
    var TimerSupport = xdc.useModule('ti.sysbios.family.shared.vayu.TimerSupport');
    TimerSupport.availMask = 0x0500;
  • What is running on A15? Linux or sysbios? You need to see that timer is not used by anyone else, neither it is configured from 2 cores at same time. On bios side you can look under vision_sdk\src\main_app\tda2xx\ for all cores, if A15 has linux you need to look at respective .dts file in kernel.