Пример #1
0
void main(void) {
    
    // configure PIC
    core_initialize();

    // init all peripherals
    periph_initialize();

    // start app logic
    app_initialize();

    // main program loop
    while (1) app_tick();

}
Пример #2
0
/*
 *  target dependent initialization
 */
void
target_initialize(void)
{
	/* in emstartkit, clock nand mem are already initialized when FPGA is configured */

	/*
	 *  to use target_fput_log, initialize UART
	 */
	emstartkit_uart_init((DW_APB_UART_STRUCT_PTR)REGBASE_UART1,
			LCR_WORD_LEN8 | LCR_1_STOP_BIT | LCR_PARITY_NONE, 115200);

	/*
	 *  core dependent initialization
	 */
	core_initialize();

}
Пример #3
0
/*
 *  ターゲット依存の初期化
 */
void
target_initialize(void)
{
    int i;
    
    /*
     *  ARM依存の初期化
     */
    core_initialize();


    /*
     * 割込み入力時に割込み要因を判定するためSVRに割込み番号をセットする
     */
    /*
     * 全割込み禁止
     */
    sil_wrw_mem((void*)(TADR_AIC_BASE+TOFF_AIC_ICCR), ~0U);

    /*
     * EOICRをセット
     */
    sil_wrw_mem((void*)(TADR_AIC_BASE+TOFF_AIC_EOICR), 0U);
    
    
    for(i = 0; i < TNUM_INT; i++){
        sil_wrw_mem((void*)(TADR_AIC_BASE+TOFF_AIC_SVR+(i*4)), (uint32_t)i);
    }
    
    /*
     * 各割込みの割込み要求禁止フラグ全禁止
     */
    idf = ~0U;

    /*
     * 割込み優先度マスクは0
     */ 
    ipm = 0U;

    /*
     * 全ての割込みをマスク
     */ 
    at91sam7s_disable_int(~0U);

    /*
     *  割込み属性が設定されているかを判別するための変数を初期化する.
     */
    bitpat_cfgint = 0U;
    
#ifndef VECTOR_KERNEL    
    /*
     *  例外ベクタテーブルへ割込みハンドラを登録
     */
    x_install_exc(EXCH_NO_IRQ, interrupt_handler);
    x_install_exc(EXCH_NO_UNDEF, undef_handler);
    x_install_exc(EXCH_NO_SWI, swi_handler);
    x_install_exc(EXCH_NO_PABORT, prefetch_handler);
    x_install_exc(EXCH_NO_DABORT, data_abort_handler);
    x_install_exc(EXCH_NO_FIQ, fiq_handler);
#endif /* VECTOR_KERNEL */
     
    /*
     *  target_fput_log が可能になるようにUARTを初期化
     */
    at91sam7s_init_uart();    
}
Пример #4
0
/*
 *  チップ依存の初期化
 */
void
chip_initialize(void)
{
	/*
	 *  ARM依存の初期化
	 */
	core_initialize();

    /*
     *  ベクタテーブルをHigh exception vectors(0xFFFF0000)にコピー
     */
    char *vt  = (char*)0xFFFF0000;
    char *vts = (char*)vector_table;
    for(int i = 0; i < 512; ++i)
        vt[i] = vts[i];

	/*
     *  Select high exception vectors (0xFFFF0000)
	 *  by setting V bit in CP15 c1 (control register).
	 */
	asm("mrc    p15, 0, r0, c1, c0, 0");
	asm("orr    r0, r0, #0x00002000");
	asm("mcr    p15, 0, r0, c1, c0, 0");

    /*
     *  AINTCの初期化
     */
    AINTC.GER  = 0x1;
    AINTC.HIER = 0x2;
    AINTC.EISR = 21;
    AINTC.CR   = 0x14;
    AINTC.VBR  = (uint32_t)ISR_VECTORS;
    AINTC.VSR  = 0;
    x_set_ipm(0); /* Set IPM to 0 */

    /**
     * 低レベル出力シリアルI/Oの初期化
     */
    sio_initialize_low();

	/*
	 * キャッシュを無効に
	 */
	uint32_t bits = 0;
	CP15_CONTROL_READ(bits);
	bits &= ~(CP15_CONTROL_I_BIT | CP15_CONTROL_C_BIT);
	CP15_CONTROL_WRITE(bits);
	//cache_disable();

#if !defined(TOPPERS_SUPPORT_PROTECT)
    section_table_init();
#endif

    /**
     * MMUを有効に
     */
	CP15_TTB0_WRITE((uintptr_t)section_table);
#if defined(TOPPERS_SUPPORT_PROTECT)
	CP15_DOMAINS_WRITE(0x01U/*D0_CLIENT*/);
#else
	CP15_DOMAINS_WRITE(0x03U/*D0_MANAGER*/);
#endif
	//CP15_ASID_SET(1);
	CP15_CONTROL_READ(bits);
	bits |= CP15_CONTROL_M_BIT;
	CP15_CONTROL_WRITE(bits);
    //*(uint32_t*)0x1E2608C = 0x0;
    //mmu_init();
    //MCR p15, 0, <Rd>, c2, c0, 0; write TTBR

	/*
	 * キャッシュを有効に
	 */
	CP15_CONTROL_READ(bits);
	bits |= (CP15_CONTROL_I_BIT | CP15_CONTROL_C_BIT);
	CP15_CONTROL_WRITE(bits);
}