示例#1
0
// Switch into boot mode and reset
void EraseAndReset()
{
	cpu_irq_disable();

#if SAM4S
# define IFLASH_ADDR				IFLASH0_ADDR
# define IFLASH_PAGE_SIZE			IFLASH0_PAGE_SIZE
# define IFLASH_NB_OF_PAGES			(IFLASH0_SIZE / IFLASH_PAGE_SIZE)
#endif

#if SAM3XA
# define IFLASH_ADDR				IFLASH0_ADDR
# define IFLASH_PAGE_SIZE			IFLASH0_PAGE_SIZE
# define IFLASH_NB_OF_PAGES			((IFLASH1_ADDR + IFLASH1_SIZE - IFLASH_ADDR) / IFLASH_PAGE_SIZE)
#endif

    for(size_t i = 0; i <= IFLASH_NB_OF_PAGES; i++)
    {
    	wdt_restart(WDT);
        size_t pageStartAddr = IFLASH_ADDR + i * IFLASH_PAGE_SIZE;
        flash_unlock(pageStartAddr, pageStartAddr + IFLASH_PAGE_SIZE - 1, nullptr, nullptr);
    }

    flash_clear_gpnvm(1);			// tell the system to boot from ROM next time
	rstc_start_software_reset(RSTC);
	for(;;) {}
}
示例#2
0
void ResetBoard ( const bool triggerWatchdogDuringWait )
{
  __disable_irq();

  rstc_start_software_reset( RSTC );

  while ( true )
  {
    // If we do not keep the watchdog happy and it times out during this wait,
    // the reset reason will be wrong when the board starts the next time around.

    if ( triggerWatchdogDuringWait )
      wdt_restart( WDT );
  }
}
示例#3
0
文件: telnet.c 项目: hkwi/ZodiacFX
/*
*	Commands within the debug context
*
*	@param command - pointer to the command string
*	@param param1 - pointer to parameter 1
*	@param param2- pointer to parameter 2
*	@param param2 - pointer to parameter 3
*/
void tcommand_debug(char *command, char *param1, char *param2, char *param3)
{
	if (strcmp(command, "exit")==0){
		TelnetContext = CLI_ROOT;
		return;
	}

	// Display help
	if (strcmp(command, "help") == 0)
	{
		//tprinthelp();
		return;
	}

	if (strcmp(command, "restart")==0)
	{
		rstc_start_software_reset(RSTC);
		while (1);
	}
}
示例#4
0
int 
mon_restart(int argc, char **argv){
  if(argc==2){
    //check for [bootloader] flag
    if(strcmp(argv[1],"bootloader")==0){
      //set the gpnvm bit to atmel bootloader
      efc_perform_command(EFC0, EFC_FCMD_CGPB, 1);
      rgb_led_set(LED_OFF,0);
      delay_ms(500);
      rgb_led_set(LED_GRAY,0); //indicate bootloader mode set
    }
    else{
      printf("[bootloader] to reboot with Atmel bootloader\n");
      return -1;
    }
  }
  //detach USB
  //  udc_detach();
  //software reset
  rstc_start_software_reset(RSTC);
  return 0;
}
/*
 * Initialize functions for DUE
 * (Called by AJ_PlatformInit())
 */
void _AJ_PlatformInit(void)
{
    /*
     * Init sequence for the DUE
     */
    const usart_serial_options_t usart_serial_options = {
        .baudrate   = 115200,
        .charlength = 0,
        .paritytype = UART_MR_PAR_NO,
        .stopbits   = false
    };
    sysclk_init();
    board_init();
    //configure_uart();
    stdio_serial_init(CONSOLE_UART, &usart_serial_options);
    AJ_WSL_ModuleInit();
    AJ_InitRNG();
}

uint16_t AJ_ByteSwap16(uint16_t x)
{
    return swap16(x);
}

uint32_t AJ_ByteSwap32(uint32_t x)
{
    return swap32(x);
}

uint64_t AJ_ByteSwap64(uint64_t x)
{
    return swap64(x);
}
void _AJ_Reboot(void)
{
    rstc_start_software_reset(RSTC);
}
示例#6
0
void Reset()
{
	rstc_start_software_reset(RSTC);
}
示例#7
0
文件: main.c 项目: AndreyMostovov/asf
/**
 * \brief Set the trigger for bootloader and perform a software reset to let
 * the bootloader to perform firmware update process.
 */
static void jump_to_bootloader(void)
{
	uint32_t ul_test_page_addr = TEST_PAGE_ADDRESS;
	uint32_t *pul_test_page = (uint32_t *)ul_test_page_addr;
	uint32_t ul_rc;
	uint32_t ul_idx;
	uint32_t temp_data;
	uint32_t i;

	for (ul_idx = 0; ul_idx < (IFLASH_PAGE_SIZE / 4); ul_idx++) {
		temp_data = pul_test_page[ul_idx];
		trigger_page[ul_idx * 4] = (uint8_t)(temp_data & 0xFF);
		trigger_page[ul_idx * 4 + 1] = (uint8_t)((temp_data >> 8) & 0xFF);
		trigger_page[ul_idx * 4 + 2] = (uint8_t)((temp_data >> 16) & 0xFF);
		trigger_page[ul_idx * 4 + 3] = (uint8_t)((temp_data >> 24) & 0xFF);
	}

	/* Set the trigger */
	trigger_page[0x14] = 0x01;
	trigger_page[0x15] = 0x00;
	trigger_page[0x16] = 0x00;
	trigger_page[0x17] = 0x00;

	for (i = 0; i < LANGUAGE_NUMBER; i++) {
		app_language++;
		app_language = app_language % LANGUAGE_NUMBER;
		/* Fill in firmware type used in bootloader */
		if (firmware_type & (0x01 << app_language)) {
			trigger_page[0x18] = file_name_ascii[app_language][0];
			trigger_page[0x19] = file_name_ascii[app_language][1];
			trigger_page[0x1A] = file_name_ascii[app_language][2];
			trigger_page[0x1B] = file_name_ascii[app_language][3];
			trigger_page[0x1C] = file_name_ascii[app_language][4];
			trigger_page[0x1D] = file_name_ascii[app_language][5];
			trigger_page[0x1E] = file_name_ascii[app_language][6];
			trigger_page[0x1F] = file_name_ascii[app_language][7];
			trigger_page[0x20] = file_name_ascii[app_language][8];
			trigger_page[0x21] = file_name_ascii[app_language][9];
			trigger_page[0x22] = file_name_ascii[app_language][10];
			trigger_page[0x23] = file_name_ascii[app_language][11];
			break;
		}
	}

	ul_rc = flash_unlock(ul_test_page_addr,
			ul_test_page_addr + IFLASH_PAGE_SIZE, NULL, NULL);

	ul_rc = flash_erase_page(ul_test_page_addr, IFLASH_ERASE_PAGES_8);
	if (ul_rc != FLASH_RC_OK) {
		return;
	}

	ul_rc = flash_write(ul_test_page_addr, trigger_page,
			IFLASH_PAGE_SIZE, 0);
	if (ul_rc != FLASH_RC_OK) {
		return;
	}

	/* Clear screen. */
	ssd1306_clear();

	/* End message on the screen. */
	multi_language_show_end_info();

	/* Perform the software reset. */
	rstc_start_software_reset(RSTC);

	/* Wait for reset. */
	delay_ms(100);
}