TMDSCNCD28388D: Unable to control GPIO4, GPIO5, GPIO6 from boot code (assembly), but works from C code

Part Number: TMDSCNCD28388D
Other Parts Discussed in Thread: TMS320F28388D, C2000WARE

Hello,

I'm working with the TMS320F28388D and experiencing an unusual issue where GPIO4, GPIO5, and GPIO6 cannot be controlled from assembly boot code, but they work perfectly fine from C code after initialization.

Environment:

  • Device: TMS320F28388D
  • Boot mode: Flash boot
  • Code Composer Studio v12.x
  • C2000Ware v5.03.00.00

What I'm trying to do: In f2838x_codestartbranch.asm (the boot entry point), I need to set GPIO0-6, GPIO15, and GPIO16 HIGH immediately after watchdog disable, before jumping to _c_int00. This is critical for safety - these pins control power IGBTs and must default to HIGH (safe state).

What works:

  • GPIO0, GPIO1, GPIO2, GPIO3, GPIO15, GPIO16 >> Successfully set HIGH from assembly
  • All GPIOs (0-6, 15-16) >> Successfully controlled from C code

What doesn't work:

  • GPIO4, GPIO5, GPIO6 >> Remain LOW when set from assembly, despite identical register operations

Assembly code:

    EALLOW

    ; Set GPIOs as outputs and HIGH
    MOVZ DP, #7C00h>>6
    MOV AL, #807Fh
    MOV AH, #1h
    MOVL @0Ah, ACC

    MOVZ DP, #7F00h>>6
    MOV AL, #807Fh
    MOV AH, #1h
    MOVL @02h, ACC

    EDIS
    LB _c_int00

Questions:

  1. Are GPIO4, GPIO5, GPIO6 special in any way during boot on F2838x?
  2. Does Boot ROM configure these pins differently than GPIO0-3?
  3. Are there additional registers (beyond GPADIR, GPAMUX, GPALOCK, GPAODR) that might affect GPIO4-6?

Current Workaround:

We force GPIO 4-5-6 outputs HIGH in C code. However, there is a ~10ms gap between assembly boot code execution and the first C code that can control these peripherals (measured: 10.27ms between f2838x_codestartbranch.asm execution and Device_enableUnbondedGPIOPullups in device.c).

Any insights would be greatly appreciated.

Thank you in advance.

Regards,

Taygun Tuğran