Пример #1
0
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);
}
Пример #2
0
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);
}
Пример #3
0
// 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);
}
Пример #4
0
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);
}
Пример #5
0
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;
	}
}
Пример #6
0
// 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;
}
Пример #7
0
// Reset peripherals and cpu
void HAL::resetHardware() {
    RSTC->RSTC_CR = RSTC_CR_KEY(0xA5) | RSTC_CR_PERRST | RSTC_CR_PROCRST;
}