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.

Execute code in standalone

Other Parts Discussed in Thread: CONTROLSUITE, C2000WARE

Hello,

To develop a project, I'm using the ControlCard F28377D before have our own hardware.

I used the integrated JTAG debuger Xds100 and now I'm using the Blackhawk USB560 v2.

Then I compile and flash the software under CCS v7.

All run correctly, the controlCard is plugged on a motherboard IDDK on which I added some part like 7 segments display.

But now, when I flash the board, run with the debuger it is Ok. So I power off the board, unplug the JTAG link and then power on the board, I'm expecting the last flashed software run in "standalone".

But no! nothing run, no data is send over the serial, the display 7 segments is not managed. So like if no code is executing.

What I have missed to make run the board in "standalone" mode?

Thank you

  • Hi,

    You need to run the code through flash as currently the same is running from RAM. Simply go through this thread:
    e2e.ti.com/.../1360423

    Regards,
    Gautam
  • Hi,

    Thank for your help, but I already seen this post without success:

    My current project is issued from the IDDK exemple.

    Today, If I test with this exemple, standalone run correctly, but not my application!...

    I tested this exemple with the compiler v17.3.0 and then my current cmd file with the new ".TI.ramfunc" section. So with this , the predefine "_FLASH" is not present, the main call first "InitSysCtrl()" and then the "InitFlash()" => with these modification, the IDDK exemple run correctly in standalone.

    But not my application.

    I'm currently try to check the properties project difference! I simplified both main by the reduced following code:

    void main(void)
    {
      
      InitSysCtrl();
      InitFlash();    /* Call the flash wrapper init function */
      
      GPIO_SetupPinMux(31, GPIO_MUX_CPU1, 0);
      GPIO_SetupPinOptions(31, GPIO_OUTPUT, GPIO_PUSHPULL);
    
    for(;;)
    {
      uint32_t  i;
        //
        // Turn on LED
        //
        GPIO_WritePin(31, 0);
    
        //
        // Delay for a bit.
        //
        //DELAY_US(1000*500);
        for (i=0; i < 500000 ; i++)
        {
        }
    
        //
        // Turn off LED
        //
        GPIO_WritePin(31, 1);
    
        //
        // Delay for a bit.
        //
        //DELAY_US(1000*500);
        for (i=0; i < 500000 ; i++)
        {
        }
    }
    

    The only difference that can I see today is the address where is linked the function "InitFlash".

    0x8000 in IDDK exemple, 0xBDB8 in my current project (because there have other Ramfunction in my project event if never called because the main() is reduced...)


     

  • Ok
    I just find the problem!

    In fact, the IDDK exemple used the ControlSuite library v170 (C:\ti\controlSUITE\device_support\F2837xD\v170)

    When I start my project, I also used this library and make update with new library release V190, V200, V210 and then I passed to the C2000ware recently.

    I make a difference between v210 and C2000Ware, there are no major difference which can explain the problem.
    But I made a difference between the V200 and V210.
    In F2837xD_CodeStartBranch.asm :
    V200:
    WD_DISABLE .set 1 ;set to 1 to disable WD, else set to 0

    V210:
    WD_DISABLE .set 0 ;set to 1 to disable WD, else set to 0

    So in a case, the Watchdog was disabled on the very first code start, not in the second case.

    I think this work on the IDDK exemple because the .TI.ramfunc copy duration is small. So the watchdog not overflow before the call of main()\InitSysCtrl()\DisableDog().

    But on my real application, this section is larger and the copy take more time. So I think the Watchdog reset before reach the main()!

    Then I think this is a problem to do not desactivate the watchdog in the codeStartBranch.asm since the compiler can make an 'automatic" ramfun copy with the linker option .TI.ramfunc...table(BINIT)... Or during this copy, the watchdog should be refreshed...

  • I am assuming that you have made sure that BOOTPINS are set for BOOT to Flash.

    Vivek Singh
  • Yes of course, Standalone worked fine with the IDDK exemple.
    Like said in my last post, problem was resolve, this come from the Watchdog which is no disabled on the CodeStartbranch since device version v210 and later.