gonzui


Format: Advanced Search

mtkernel_3/kernel/sysdepend/cpu/core/rxv2/reset_main.cbare sourcepermlink (0.01 seconds)

Search this content:

    1: /*
    2:  *----------------------------------------------------------------------
    3:  *    micro T-Kernel 3.00.03
    4:  *
    5:  *    Copyright (C) 2006-2021 by Ken Sakamura.
    6:  *    This software is distributed under the T-License 2.2.
    7:  *----------------------------------------------------------------------
    8:  *
    9:  *    Released by TRON Forum(http://www.tron.org) at 2021/03/31.
   10:  *
   11:  *----------------------------------------------------------------------
   12:  */
   13: 
   14: #include <sys/machine.h>
   15: #ifdef CPU_CORE_RXV2
   16: 
   17: /*
   18:  *      reset_main.c (RXv2)
   19:  *      Reset handler Main routine (Called from reset_hdl.S)
   20:  */
   21: 
   22: #include "kernel.h"
   23: #include "../../../sysdepend.h"
   24: 
   25: #include <tm/tmonitor.h>
   26: 
   27: 
   28: /* Low level memory manager information */
   29: EXPORT  void     *knl_lowmem_top;            // Head of area (Low address)
   30: EXPORT  void     *knl_lowmem_limit;          // End of area (High address)
   31: 
   32: IMPORT  const void *_data_org;
   33: IMPORT  const void *_data_start;
   34: IMPORT  const void *_data_end;
   35: IMPORT  const void *_bss_start;
   36: IMPORT  const void *_bss_end;
   37: #if USE_NOINIT
   38: IMPORT  const void *_noinit_end;
   39: #endif
   40: 
   41: /* ------------------------------------------------------------------------ */
   42: /*
   43:  * Reset Handler Main routine (Called from reset_hdl.S)
   44:  */
   45: 
   46: EXPORT void reset_main(void)
   47: {
   48:         UW     *src, *top, *end;
   49:         INT    i;
   50: 
   51:         /* Startup Hardware */
   52:         knl_startup_hw();
   53: 
   54: #if !USE_STATIC_IVT
   55:         /* Load Interrupt Vector Table from ROM to RAM */
   56:         src = (UW*)knl_int_vect_rom;;
   57:         top = (UW*)knl_int_vect_ram;
   58:         for(i=0; i < (N_INTVEC); i++) {
   59:                 *top++ = *src++;
   60:         }
   61:         /* Set Vector Table offset to SRAM */
   62:         knl_set_intb((UW)knl_int_vect_ram);
   63: 
   64:         /* Load HLL-Interrupt Handler Table from ROM to RAM */
   65:         src = (UW*)knl_hll_inthdr_rom;;
   66:         top = (UW*)knl_hll_inthdr_ram;
   67:         for(i=0; i < (N_INTVEC); i++) {
   68:                 *top++ = *src++;
   69:         }
   70: #endif
   71: 
   72:         /* Load .data to ram */
   73:         src = (UW*)&_data_org;;
   74:         top = (UW*)&_data_start;
   75:         end = (UW*)&_data_end;
   76:         while(top != end) {
   77:                 *top++ = *src++;
   78:         }
   79: 
   80:         /* Initialize .bss */
   81: #if USE_NOINIT
   82:         top = (UW*)&_noinit_end;
   83: #else 
   84:         top = (UW*)&_bss_start;
   85: #endif
   86:         for(i = ((INT)&_bss_end - (INT)&_bss_start)/sizeof(UW); i > 0 ; i--) {
   87:                 *top++ = 0;
   88:         }
   89: 
   90: #if USE_IMALLOC
   91:         /* Set System memory area */
   92:         if(INTERNAL_RAM_START > SYSTEMAREA_TOP) {
   93:                 knl_lowmem_top = (UW*)INTERNAL_RAM_START;
   94:         } else {
   95:                 knl_lowmem_top = (UW*)SYSTEMAREA_TOP;
   96:         }
   97:         if((UW)knl_lowmem_top < (UW)&_bss_end) {
   98:                 knl_lowmem_top = (UW*)&_bss_end;
   99:         }
  100: 
  101:         if((SYSTEMAREA_END != 0) && (INTERNAL_RAM_END > CNF_SYSTEMAREA_END)) {
  102:                 knl_lowmem_limit = (UW*)(SYSTEMAREA_END - EXC_STACK_SIZE);
  103:         } else {
  104:                 knl_lowmem_limit = (UW*)(INTERNAL_RAM_END - EXC_STACK_SIZE);
  105:         }
  106: #endif
  107: 
  108:         /* Startup Kernel */
  109:         main();                /**** No return ****/
  110:         while(1);      /* guard - infinite loops */
  111: }
  112: 
  113: #endif  /* CPU_CORE_RXV2 */