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.

Integra DSP won't run SYS/BIOS Hello World example but will run non-SYS/BIOS Hello World example

We are bringing up a new TI Integra 6A8168 based product. We have been able to intialize the ARM and bring the DSP out of reset and connect to the DSP with our Spectrum Digital XDS560v2 STM emulator. We are able to get the canned non-SYS/BIOS Hello World example to run on the DSP. We have built several of the SYS/BIOS examples and all of them load into the target but when you run them they get lost before they ever reach the main() function. We have tried these same examples on an EVMCA816X evm card and they behave the same way as our product card -- making us think that this is a build problem and not a hardware problem.

  • Brad,

    I'm wondering if its a timer initialization problem.

    Are the DM Timers enabled and accessible by the DSP? Usually this is done either by the host CPU or by GEL commands.

    If you disabled the Clock module, the pre-main timer initialization is eliminated. If you get to main, then I suspect the problem is due to the DM Timers not being clocked our accessible by the DSPs.

    To disable the Clock module, add the following to your config script:

    BIOS.clockEnabled = false;

    Alan

  • Alan,

    You were correct. We added the disable command to the config script and then everything worked. Can you point me to the register(s) on the ARM side that we need to configure in order to get the TImer to initialize and function properly? I am looking through the Integra documents, however, it is not clear what needs to be initialized.

    Thanks,

    Brad

  • Brad,

    Here's a snippet of GEL script we use on our DM8168 evm board for enabling the timers:

    hotmenu enableTimers()
    {
        GEL_TextOut("\tPRCM for dmtimer Initialization in Progress \n","Output",1,1,1);
                                                                           
        WR_MEM_32(CM_ALWON_L3_SLOW_CLKSTCTRL, 2);
           
        WR_MEM_32(CM_ALWON_TIMER_1_CLKCTRL,   2);
            WR_MEM_32(CM_TIMER1_CLKSEL,   1); /* Use 32Khz source */
        /* Wait for IDLEST to read 0x0 indicating that the module is fully functional */
        while(((RD_MEM_32(CM_ALWON_TIMER_1_CLKCTRL)&0x30002)>>16)!=0);
           
        WR_MEM_32(CM_ALWON_TIMER_2_CLKCTRL,   2);
            WR_MEM_32(CM_TIMER2_CLKSEL,   1); /* Use 32Khz source */
        /* Wait for IDLEST to read 0x0 indicating that the module is fully functional */
        while(((RD_MEM_32(CM_ALWON_TIMER_2_CLKCTRL)&0x30002)>>16)!=0);
           
        WR_MEM_32(CM_ALWON_TIMER_3_CLKCTRL,   2);
            WR_MEM_32(CM_TIMER3_CLKSEL,   1); /* Use 32Khz source */
        /* Wait for IDLEST to read 0x0 indicating that the module is fully functional */
        while(((RD_MEM_32(CM_ALWON_TIMER_3_CLKCTRL)&0x30002)>>16)!=0);
       
        WR_MEM_32(CM_ALWON_TIMER_4_CLKCTRL,   2);
            WR_MEM_32(CM_TIMER4_CLKSEL,   1); /* Use 32Khz source */
        /* Wait for IDLEST to read 0x0 indicating that the module is fully functional */
        while(((RD_MEM_32(CM_ALWON_TIMER_4_CLKCTRL)&0x30002)>>16)!=0);
       
        WR_MEM_32(CM_ALWON_TIMER_5_CLKCTRL,   2);
            WR_MEM_32(CM_TIMER5_CLKSEL,   1); /* Use 32Khz source */
        /* Wait for IDLEST to read 0x0 indicating that the module is fully functional */
        while(((RD_MEM_32(CM_ALWON_TIMER_5_CLKCTRL)&0x30002)>>16)!=0);
       
        WR_MEM_32(CM_ALWON_TIMER_6_CLKCTRL,   2);
            WR_MEM_32(CM_TIMER6_CLKSEL,   1); /* Use 32Khz source */
        /* Wait for IDLEST to read 0x0 indicating that the module is fully functional */
        while(((RD_MEM_32(CM_ALWON_TIMER_6_CLKCTRL)&0x30002)>>16)!=0);
       
        WR_MEM_32(CM_ALWON_TIMER_7_CLKCTRL,   2);
            WR_MEM_32(CM_TIMER7_CLKSEL,   1); /* Use 32Khz source */
        /* Wait for IDLEST to read 0x0 indicating that the module is fully functional */
        while(((RD_MEM_32(CM_ALWON_TIMER_7_CLKCTRL)&0x30002)>>16)!=0);

            GEL_TextOut("\ttimer Accesses are PASSED \n","Output",1,1,1);                                                           
        GEL_TextOut("\ttimer Initialization in Done \n","Output",1,1,1);                                                            
    }

     

    The above command enables and routes the 32,768 Hz clock to the timers.