void banzai() { // Disable all interrupts __disable_irq(); // Set bootflag to run SAM-BA bootloader at restart const int EEFC_FCMD_CGPB = 0x0C; const int EEFC_KEY = 0x5A; while (EFC0->EEFC_FSR & EEFC_FSR_FRDY == 0); EFC0->EEFC_FCR = EEFC_FCR_FCMD(EEFC_FCMD_CGPB) | EEFC_FCR_FARG(1) | EEFC_FCR_FKEY(EEFC_KEY); while (EFC0->EEFC_FSR & EEFC_FSR_FRDY == 0); // From here flash memory is no more available. // Memory swap needs some time to stabilize for (uint32_t i=0; i<1000000; i++) // force compiler to not optimize this __asm__ __volatile__(""); // BANZAIIIIIII!!! const int RSTC_KEY = 0xA5; RSTC->RSTC_CR = RSTC_CR_KEY(RSTC_KEY) | RSTC_CR_PROCRST | RSTC_CR_PERRST; while (true); }
void banzai() { // Disable all interrupts __disable_irq(); // Set bootflag to run SAM-BA bootloader at restart const int EEFC_FCMD_CGPB = 0x0C; const int EEFC_KEY = 0x5A; while ((EFC0->EEFC_FSR & EEFC_FSR_FRDY) == 0); EFC0->EEFC_FCR = EEFC_FCR_FCMD(EEFC_FCMD_CGPB) | EEFC_FCR_FARG(1) | EEFC_FCR_FKEY(EEFC_KEY); while ((EFC0->EEFC_FSR & EEFC_FSR_FRDY) == 0); // From here flash memory is no more available. // BANZAIIIIIII!!! const int RSTC_KEY = 0xA5; RSTC->RSTC_CR = RSTC_CR_KEY(RSTC_KEY) | RSTC_CR_PROCRST | RSTC_CR_PERRST; while (true); }
// SAM3XA software restart void cmd_boot(void) { // See SAM3X data sheet for reference information. This is a software // reset of processor, peripherals, and raises the NRST pin. Pretty // much everything that can be reset is reset. // REG_RSTC_CR = (RSTC_CR_PROCRST | RSTC_CR_PERRST | RSTC_CR_EXTRST | RSTC_CR_KEY(0xA5)); while(1); }
void brick_reset(void) { logd("brick_reset\n\r"); RSTC->RSTC_MR = RSTC_MR_URSTEN | (10 << RSTC_MR_ERSTL_Pos) | RSTC_MR_KEY(0xA5); RSTC->RSTC_CR = RSTC_CR_EXTRST | RSTC_CR_PERRST | RSTC_CR_PROCRST | RSTC_CR_KEY(0xA5); }
static void ctrl_sam3ucfg_cb(void) { switch(udd_g_ctrlreq.req.wValue & 0xFF) { /* Turn on slow clock */ case 0x01: osc_enable(OSC_MAINCK_XTAL); osc_wait_ready(OSC_MAINCK_XTAL); pmc_switch_mck_to_mainck(CONFIG_SYSCLK_PRES); break; /* Turn off slow clock */ case 0x02: pmc_switch_mck_to_pllack(CONFIG_SYSCLK_PRES); break; /* Jump to ROM-resident bootloader */ case 0x03: /* Turn off connected stuff */ board_power(0); /* Clear ROM-mapping bit. */ efc_perform_command(EFC0, EFC_FCMD_CGPB, 1); /* Disconnect USB (will kill connection) */ udc_detach(); /* With knowledge that I will rise again, I lay down my life. */ while (RSTC->RSTC_SR & RSTC_SR_SRCMP); RSTC->RSTC_CR |= RSTC_CR_KEY(0xA5) | RSTC_CR_PERRST | RSTC_CR_PROCRST; while(1); break; #ifdef PLATFORMCW1180 /* 0xA0 starts CW1180 Specific Commands */ case 0xA0: enable_lcd(); redraw_background(); break; #endif /* Oh well, sucks to be you */ default: break; } }
// Reset peripherals and cpu void HAL::resetHardware() { //Davinci Specific, fancy effect playsound (1000,400); RSTC->RSTC_CR = RSTC_CR_KEY(0xA5) | RSTC_CR_PERRST | RSTC_CR_PROCRST; }
// Reset peripherals and cpu void HAL::resetHardware() { RSTC->RSTC_CR = RSTC_CR_KEY(0xA5) | RSTC_CR_PERRST | RSTC_CR_PROCRST; }