disableCaches() { __var Reg; __message("Disabling MPU and Caches..."); // Disable MPU, I and D caches Reg = __jtagCP15ReadReg(1, 0, 0, 0); Reg &= ~((1<<12) | (1<<2)); __jtagCP15WriteReg(1, 0, 0, 0, Reg); // Disable ECC cache Reg = __jtagCP15ReadReg(1, 0, 0, 1); Reg &= 0xFFFFFFC7; // Clear bits 5:3 Reg |= (0x4 << 3); __jtagCP15WriteReg(1, 0, 0, 1, Reg); } configureWatchdog() { if(!(__readMemory32(0xB060C048, "Memory") & 0x01000000)) // HWDG_CFG.LOCK == 0 { __writeMemory32(0xEDACCE55, 0xB060C000, "Memory"); // HWDG_PROT unlock key __writeMemory32(0x00000000, 0xB060C02C, "Memory"); // HWDG_TRG0CFG = 0 __writeMemory32(0xEDACCE55, 0xB060C000, "Memory"); // HWDG_PROT unlock key __writeMemory32(0x00000000, 0xB060C030, "Memory"); // HWDG_TRG1CFG = 0 __writeMemory32(0xEDACCE55, 0xB060C000, "Memory"); // HWDG_PROT unlock key __writeMemory32(0x00000000, 0xB060C034, "Memory"); // HWDG_RUNLLS = 0 __writeMemory32(0xEDACCE55, 0xB060C000, "Memory"); // HWDG_PROT unlock key __writeMemory32(0x01000000, 0xB060C038, "Memory"); // HWDG_RUNULS = 0x01000000 __writeMemory32(0xEDACCE55, 0xB060C000, "Memory"); // HWDG_PROT unlock key __writeMemory32(0x01000005, 0xB060C048, "Memory"); // HWDG_CFG, LOCK = 1, WDEN = 1, ALLOWSTOPCLK = 1 } } setup() { disableCaches(); configureWatchdog(); } execUserPreload() { setup(); }