uboot启动流程(针对SH4架构st)

uboot程序流程
1.
 cpu/sh/start.S
   _start:
     set_sr://(设置特殊寄存器MD=1,RB=0,BL=0,FD=0,IMASK=0XF)
      MOV_CONST32_R0 0x400000F0
      ldc r0, sr
      
     disable_watchdog://(禁止看门狗定时器)
      MOV_CONST32_R0 ST40_CPG_WTCSR
      mov r0,r1
      MOV_CONST16_R0 0xA500 /* WTCSR.TME=0 */
      mov.w   r0, @r1
     #ifdef CFG_BOOT_FROM_NAND  //NAND启动;在config.h中配置
     #if defined(CFG_NAND_SKIP_BAD_BLOCKS_ON_RELOCATING)//自动跳过坏区
     #if defined(CFG_BOOT_FROM_SPI) //从SPI启动,默认fast read
     #if defined(CONFIG_SH_FLI7510)//定义则ST40_EMI_SPI_CLOCKDIV = 6,否则为4
     #if defined(CONFIG_SH_STB7100)  /* LMI-Sys UN-cached */
     #elif defined(CONFIG_SH_STX5197) && defined(CONFIG_SH_MB704)
     #elif defined(CONFIG_SH_STX5197) && defined(CONFIG_SH_5197CAB)
     #elif defined(CONFIG_SH_STX7105) && defined(CONFIG_SH_MB680)
     ..........//定义各种板子的执行
     #if defined(CFG_ENV_IS_IN_EEPROM)
 lib_sh/board.c
   void start_sh4boot (void)
   通过此循环依次完成soc_init,timer_init,board_init,env_init,init_baudrate,serial_init,console_init_f,check_board,display_banner,init_func_ram等功能。
   for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
  if ((*init_fnc_ptr) () != 0) {
   hang ();
  }
 }
 然后配置有效flash bank,完成内存初始化mem_malloc_init ()。然后执行spi_init();将CFG_CTRL_M的SPI_BOOTNOTCOMMS位设置为1。使用SSC0,PIO1[7:6]无效,设置波特率发生器,禁止I2C,执行软中断。使能SSC控制器,spi_probe_serial_flash(chipsel)。
 env_relocate()重置环境,env_crc_update ();CRC校验。
 getenv ("ethaddr");获取MAC环境;getenv_IPaddr ("ipaddr");获取网卡IP地址
 devices_init()初始化各种设备,drv_system_init ();初始化串口和Null设备
 jumptable_init ();命令初始化。
 console_init_r ();控制台初始化
 for(;;)main_loop();

你可能感兴趣的:(c,timer,Flash,null,System)