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.

TMS320F28388D: Debugger Target Reset does not work - Jump always to address 0x3FD2AE

Part Number: TMS320F28388D
Other Parts Discussed in Thread: C2000WARE

Hello dear TI team & support,

I´m not able to neither run my target w/o Debugger nor when Debugger is attached with a "Target Reset" (I´m using Lauterbach)

The only way is to set the initial PC to the default entry point "_c_int00"

Register.Init
Register.Set PC _c_int00
Go main

The linker looks like 

....

  /* BEGIN is used for the "boot to Flash" bootloader mode   */
   BEGIN            : origin = 0x080000, length = 0x000002
...
   codestart           : > BEGIN, ALIGN(4)
....
 
Basically I´d like to run my code w/o debugger attached but it never works, once attached I see the code hanging somewhere at the address 0x3FD2AE.
Note: I´m using the dev board TMS320F28388D controlCARD and set coorectly the Bootmode to Flash as described in the user guide (Table 3. S2, Bootmode Selection Table)
Thanks in advance.
Regards,
Ivan
  • Hello Ivan,

    To rule out any linker command issues, can you try the LED blink example in c2000ware? Please be sure to select the flash config option when building the project. I will also ask if the code boots properly during warm boot (i.e. when you press the reset button on the controlCARD)? If so, the issue could be with a clock frequency check code implemented in the Device_init() function at startup. During cold boot (i.e. when you first power up the controlCARD), it takes a few ms for the external clock to start. Since the MCU will boot using internal oscillator, the frequency check code will fail and the code will go to a while(1) loop. This is fixed on c2000ware version 5.0.

  • Hi Gus,

    well I fixed the issue. There were two issues:

    1. I needed to implement my own start-up code to disable the watchdog during the start-up and then branch to _c_int00 (I took over the code f2838x_codestartbranch.asm from c2000ware examples)
    2. With the change above, the warm boot worked but cold start not yet. To get the cold start working I had to increase a delay used during the clock initialization phase, in particular the delay after setting SYSPLLCTL1.
      Here PLLCLKEN_WAITTIME has been increased from 120 to 1000.
      This new value is somehow, I assume, related to the 10ms you mentioned in your message, isnt?
        /* SYSPLL Clock                             */
        *SYSPLLCTL1 &= ~(1 << PLLCLKEN_BIT_NR);           /* bypass SYSPLL Clock                      */
        for (i = 0; i < PLLCLKEN_WAITTIME; i++) {
            __asm(" nop");
        }
    Regards,
    Ivan
  • This new value is somehow, I assume, related to the 10ms you mentioned in your message, isnt?

    Sounds like it. If you look at the controlCARD schematics, there is an external oscillator providing a clock input to the MCU. This clock oscillator takes several ms to power up. In your start up code you need to give some time for this oscillator to power up before switching to that clock source and starting the PLL.