/* ============================================================================ * FULL DSS SCRIPT FOR J784S4 * Configure & Test: * - MAIN GPIO0_11 as GPIO Output * - WKUP GPIO0_9 as GPIO Output * * Base addresses from cslr_soc_baseaddress.h: * MAIN PADCONFIG = 0x0010_0000 (CSL_CTRL_MMR0_CFG0_BASE) * WKUP PADCONFIG = 0x4300_0000 (CSL_WKUP_CTRL_MMR0_CFG0_BASE) * MAIN GPIO0 = 0x0060_0000 (CSL_GPIO0_BASE) * WKUP GPIO0 = 0x4211_0000 (CSL_WKUP_GPIO0_BASE) * ========================================================================== */ importPackage(Packages.com.ti.debug.engine.scripting); importPackage(Packages.com.ti.ccstudio.scripting.environment); importPackage(Packages.java.lang); /* --- Debug Server & Session --- */ var debugServer = script.getServer("DebugServer.1"); var ds = debugServer.openSession(".*MCU_Cortex_R5_0"); /* ------------------------------------------- * 1. BASE ADDRESSES * ------------------------------------------- */ var MAIN_PADCFG_BASE = 0x00100000; // CSL_CTRL_MMR0_CFG0_BASE var WKUP_PADCFG_BASE = 0x43000000; // CSL_WKUP_CTRL_MMR0_CFG0_BASE var MAIN_GPIO0_BASE = 0x00600000; // CSL_GPIO0_BASE var WKUP_GPIO0_BASE = 0x42110000; // CSL_WKUP_GPIO0_BASE /* ------------------------------------------- * 2. PADCONFIG OFFSETS (from J784S4_pinmux.h) * ------------------------------------------- */ var PIN_GPIO0_11_OFFSET = 0x02C; // MAIN GPIO0_11 var PIN_WKUP_GPIO0_9_OFFSET = 0x0E4; // WKUP_GPIO0_9 /* ------------------------------------------- * 3. GPIO register offsets (bank 0/1) * ------------------------------------------- */ var GPIO_DIR01_OFFSET = 0x10; // DIR, bit = 0 -> output var GPIO_OUT_DATA01_OFFSET = 0x14; // not used but defined var GPIO_SET_DATA01_OFFSET = 0x18; var GPIO_CLR_DATA01_OFFSET = 0x1C; var GPIO_IN_DATA01_OFFSET = 0x20; /* ------------------------------------------- * 4. PADCONFIG bitfields * ------------------------------------------- */ var MUXMODE_MASK = 0xF; // bits [3:0] var GPIO_MODE = 7; // MUX = 7 -> GPIO var PIN_OUTPUT_DISABLE = (1 << 21); // bit 21 = disable driver /* ------------------------------------------- * UTILITIES * ------------------------------------------- */ function readReg(addr) { return ds.memory.readWord(0, addr) >>> 0; } function writeReg(addr, val) { ds.memory.writeWord(0, addr, val >>> 0); } /* ------------------------------------------- * Configure one PADCONFIG as GPIO output * ------------------------------------------- */ function configPadAsGpioOutput(baseAddr, offset, padName) { var addr = (baseAddr + offset) >>> 0; var val = readReg(addr); script.traceWrite("\n[" + padName + "] PADCFG addr=0x" + addr.toString(16) + " before=0x" + val.toString(16)); // 1) Set muxmode = 7 (GPIO) val &= ~MUXMODE_MASK; // clear bits [3:0] val |= (GPIO_MODE & MUXMODE_MASK); // OR with GPIO mode // 2) Enable output driver: clear bit 21 (OUTPUT_DISABLE) val &= ~PIN_OUTPUT_DISABLE; writeReg(addr, val); var after = readReg(addr); script.traceWrite("[" + padName + "] PADCFG addr=0x" + addr.toString(16) + " after =0x" + after.toString(16)); } /* ------------------------------------------- * Set GPIO direction = OUTPUT * DIR bit = 0 -> OUTPUT * ------------------------------------------- */ function setGpioDirOutput(base, pin, name) { var addr = base + GPIO_DIR01_OFFSET; var before = readReg(addr); var after = before & ~(1 << pin); // clear bit -> output writeReg(addr, after); script.traceWrite("[" + name + "] DIR addr=0x" + addr.toString(16) + " before=0x" + before.toString(16) + " after=0x" + after.toString(16)); } /* ============================================================================ * Toggle GPIO pin * Uses: DIR, SET_DATA, CLR_DATA, IN_DATA registers * ========================================================================== */ function toggleGpioPin(gpioBase, pin, cycles, delayMs, name) { var dirAddr = gpioBase + GPIO_DIR01_OFFSET; var setAddr = gpioBase + GPIO_SET_DATA01_OFFSET; var clrAddr = gpioBase + GPIO_CLR_DATA01_OFFSET; var inAddr = gpioBase + GPIO_IN_DATA01_OFFSET; // 1. Ensure direction = output var dirBefore = readReg(dirAddr); var dirAfter = dirBefore & ~(1 << pin); writeReg(dirAddr, dirAfter); script.traceWrite("[TOGGLE] " + name + " DIR before=0x" + dirBefore.toString(16) + " after=0x" + dirAfter.toString(16)); // 2. Toggle loop for (var i = 0; i < cycles; i++) { // Set pin high writeReg(setAddr, (1 << pin)); java.lang.Thread.sleep(delayMs); // Set pin low writeReg(clrAddr, (1 << pin)); java.lang.Thread.sleep(delayMs); // Optional: read back input var inVal = readReg(inAddr); var bit = (inVal >> pin) & 1; script.traceWrite("[TOGGLE] " + name + " cycle=" + i + " IN_DATA bit=" + bit); } script.traceWrite("[TOGGLE] Completed for " + name); } /* ------------------------------------------- * MAIN EXECUTION * ------------------------------------------- */ script.traceWrite("=== BEGIN PADCONFIG + GPIO SETUP ==="); // MAIN GPIO0_11 configPadAsGpioOutput(MAIN_PADCFG_BASE, PIN_GPIO0_11_OFFSET, "MAIN GPIO0_11"); setGpioDirOutput(MAIN_GPIO0_BASE, 11, "MAIN GPIO0_11"); // WKUP GPIO0_9 configPadAsGpioOutput(WKUP_PADCFG_BASE, PIN_WKUP_GPIO0_9_OFFSET, "WKUP GPIO0_9"); setGpioDirOutput(WKUP_GPIO0_BASE, 9, "WKUP GPIO0_9"); script.traceWrite("=== PADCONFIG + DIR DONE, START TOGGLE TEST ==="); // Toggle tests toggleGpioPin(MAIN_GPIO0_BASE, 11, 10, 1000, "MAIN GPIO0_11"); toggleGpioPin(WKUP_GPIO0_BASE, 9, 10, 1000, "WKUP GPIO0_9"); script.traceWrite("=== ALL DONE ===");