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:
- Are GPIO4, GPIO5, GPIO6 special in any way during boot on F2838x?
- Does Boot ROM configure these pins differently than GPIO0-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