Changeset 14 for asp_nios2


Ignore:
Timestamp:
Jan 11, 2012, 7:07:48 PM (12 years ago)
Author:
ertl-ichiba
Message:

ASP 1.7.0対応のNios2依存部を追加

Location:
asp_nios2/trunk/arch/nios2_gcc
Files:
2 added
1 deleted
10 edited

Legend:

Unmodified
Added
Removed
  • asp_nios2/trunk/arch/nios2_gcc/Makefile.prc

    r1 r14  
    1414
    1515#
     16#  プロセッサ依存部ディレクトリ名の定義 
     17#
     18PRCDIR = $(SRCDIR)/arch/$(PRC)_$(TOOL)
     19
     20#
    1621#  コンパイルオプション
    1722#
     
    2429#  カーネルに関する定義
    2530#
    26 KERNEL_DIR := $(KERNEL_DIR) $(SRCDIR)/arch/$(PRC)_$(TOOL)
     31KERNEL_DIR := $(KERNEL_DIR) $(PRCDIR)
    2732KERNEL_ASMOBJS := $(KERNEL_ASMOBJS) prc_support.o
    2833KERNEL_COBJS := $(KERNEL_COBJS) prc_config.o avalon_timer.o
     
    5459#
    5560kernel_cfg.timestamp: $(SRCDIR)/arch/$(PRC)_$(TOOL)/prc.tf
     61$(OBJFILE): $(PRCDIR)/prc_check.tf
     62
     63
     64#  コンフィギュレータ関係の変数の定義 
     65
     66CFG_TABS := $(CFG_TABS) --cfg1-def-table $(PRCDIR)/prc_def.csv   
     67
     68#
     69#  オフセットファイル生成のための定義
     70#
     71OFFSET_TF = $(PRCDIR)/prc_offset.tf
  • asp_nios2/trunk/arch/nios2_gcc/prc.tf

    r1 r14  
    2929$
    3030$INHNO_DEFINH_VALID = INHNO_VALID$
    31 
    32 $
    33 $  チェック方法の指定
    34 $
    35 $CHECK_STKSZ_ALIGN = 4$
    3631
    3732$
  • asp_nios2/trunk/arch/nios2_gcc/prc_cfg1_out.h

    r1 r14  
    99void sta_ker(void){}
    1010STK_T *const    _kernel_istkpt = 0x00;
     11
     12/* 
     13 *  オフセットファイルを生成するための定義 
     14 */
     15const uint8_t   MAGIC_1 = 0x12;
     16const uint16_t  MAGIC_2 = 0x1234;
     17const uint32_t  MAGIC_4 = 0x12345678;
     18
     19const TCB       TCB_enatex = {
     20        { NULL, NULL },                 /* task_queue */
     21        NULL,                                   /* p_tinib */
     22        0U,                                             /* tstat */
     23#ifdef TOPPERS_SUPPORT_MUTEX
     24        0U,                                             /* bpriority */
     25#endif /* TOPPERS_SUPPORT_MUTEX */
     26        0U,                                             /* priority */
     27        false,                                  /* acqeue */
     28        false,                                  /* wupque */
     29        true,                                   /* enatex */
     30        0U,                                             /* texprn */
     31        NULL,                                   /* p_winifo */
     32#ifdef TOPPERS_SUPPORT_MUTEX
     33        { NULL, NULL },                 /* mutex_queue */
     34#endif /* TOPPERS_SUPPORT_MUTEX */
     35        { NULL, NULL }                  /* tskctxb */
     36};
  • asp_nios2/trunk/arch/nios2_gcc/prc_check.tf

    r1 r14  
    44
    55$
    6 $  ƒ`ƒFƒbƒN•û–@‚ÌŽw’è
    7 $
    8 $CHECK_FUNC_ALIGN = 4$
    9 $CHECK_FUNC_NONNULL = 1$
    10 $CHECK_STACK_ALIGN = 4$
    11 $CHECK_STACK_NONNULL = 1$
    12 $CHECK_MPF_ALIGN = 4$
    13 $CHECK_MPF_NONNULL = 1$
    14 
    15 $
    166$  •W€ƒeƒ“ƒvƒŒ[ƒgƒtƒ@ƒCƒ‹‚̃Cƒ“ƒNƒ‹[ƒh
    177$
  • asp_nios2/trunk/arch/nios2_gcc/prc_config.h

    r1 r14  
    44 *      Advanced Standard Profile Kernel
    55 *
    6  *  Copyright (C) 2008 by Embedded and Real-Time Systems Laboratory
     6 *  Copyright (C) 2008-2011 by Embedded and Real-Time Systems Laboratory
    77 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    88 *
     
    5353
    5454/*
     55 *  エラーチェック方法の指定
     56 */
     57#define CHECK_STKSZ_ALIGN       8       /* スタックサイズのアライン単位 */
     58#define CHECK_FUNC_ALIGN        4       /* 関数のアライン単位 */
     59#define CHECK_FUNC_NONNULL              /* 関数の非NULLチェック */
     60#define CHECK_STACK_ALIGN       4       /* スタック領域のアライン単位 */
     61#define CHECK_STACK_NONNULL             /* スタック領域の非NULLチェック */
     62#define CHECK_MPF_ALIGN         4       /* 固定長メモリプール領域のアライン単位 */
     63#define CHECK_MPF_NONNULL               /* 固定長メモリプール領域の非NULLチェック */
     64#define CHECK_MB_ALIGN          4       /* 管理領域のアライン単位 */
     65
     66/*
    5567 *  例外の個数
    5668 */
     
    461473
    462474/*
    463  *  CPU例外の発生した時のコンテキストと割込み/CPUロック状態の参照
    464  *
    465  *  CPU例外の発生した時のシステム状態が,カーネル実行中でなく,タスクコ
    466  *  ンテキストであり,割込みロック状態でなく,CPUロック状態でない時に
    467  *  true,そうでない時にfalseを返す(CPU例外がカーネル管理外の割込み処
    468  *  理中で発生した場合にもfalseを返す).
    469  *
    470  */
    471 Inline bool_t
    472 exc_sense_unlock(void *p_excinf)
    473 {
    474         return(!exc_sense_context(p_excinf)
    475                    && !exc_sense_lock(p_excinf)
    476                    && !exc_sense_int_lock(p_excinf));
    477 }
    478 
    479 /*
    480475 *  プロセッサ依存の初期化
    481476 */
     
    539534        void    *sp;            /* スタックポインタ */
    540535        FP              pc;                     /* プログラムカウンタ */
    541 } CTXB;
     536} TSKCTXB;
    542537     
    543538/*
  • asp_nios2/trunk/arch/nios2_gcc/prc_kernel.h

    r1 r14  
    5454 *  サポートする機能の定義
    5555 */
    56 #define TOPPERS_SUPPORT_DIS_INT                 /* dis_intをサポートする */
    57 #define TOPPERS_SUPPORT_ENA_INT                 /* ena_intをサポートする */
    58 #define TOPPERS_SUPPORT_GET_UTM                 /* get_utmをサポートする */
     56#define TOPPERS_TARGET_SUPPORT_DIS_INT                  /* dis_intをサポートする */
     57#define TOPPERS_TARGET_SUPPORT_ENA_INT                  /* ena_intをサポートする */
     58#define TOPPERS_TARGET_SUPPORT_GET_UTM                  /* get_utmをサポートする */
    5959
    6060/*
  • asp_nios2/trunk/arch/nios2_gcc/prc_rename.def

    r1 r14  
    99exch_tbl
    1010int_bitmap_search_table
     11default_exc_handler
     12default_int_handler
    1113
    1214prc_initialize
  • asp_nios2/trunk/arch/nios2_gcc/prc_rename.h

    r1 r14  
    1616#define exch_tbl                                        _kernel_exch_tbl
    1717#define int_bitmap_search_table         _kernel_int_bitmap_search_table
     18#define default_exc_handler                     _kernel_default_exc_handler
     19#define default_int_handler                     _kernel_default_int_handler
    1820
    1921#define prc_initialize                          _kernel_prc_initialize
     
    4244#define _exch_tbl                                       __kernel_exch_tbl
    4345#define _int_bitmap_search_table        __kernel_int_bitmap_search_table
     46#define _default_exc_handler            __kernel_default_exc_handler
     47#define _default_int_handler            __kernel_default_int_handler
    4448
    4549#define _prc_initialize                         __kernel_prc_initialize
  • asp_nios2/trunk/arch/nios2_gcc/prc_support.S

    r1 r14  
    44 *      Advanced Standard Profile Kernel
    55 *
    6  *  Copyright (C) 2008 by Embedded and Real-Time Systems Laboratory
     6 *  Copyright (C) 2008-2011 by Embedded and Real-Time Systems Laboratory
    77 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    88 *
     
    5656
    5757/*
     58 * 標準外の例外を用いる
     59 */
     60#define USE_EXTRA_EXCEPTION
     61
     62/*
    5863 * スタック操作 : プッシュ
    5964 */
     
    9398interrupt:
    9499        addi ea, ea, -4      /* 戻り番地をデクリメント */
     100
    95101        /*
    96102         *  コンテキストの保存
     
    117123        stw   ra,  68(sp)
    118124        stw   ea,  72(sp)
    119 
    120         /*
    121          *  多重割込みか判定
    122          */
    123         ldw   r3, %gprel(except_nest_count)(gp)  /* ネスト回数のチェック */
    124         bltu  zero, r3,  nest_int
    125 
    126         /*
    127          * スタックポインタの入れ替え
    128          */
    129         ldw   r2, %gprel(_kernel_istkpt)(gp)
    130         addi  r2, r2, -4
    131         stw   sp, 0(r2)     /* スタックポインタの保存 */       
    132         mov   sp, r2        /* スタックポインタの入れ替え */
    133 
    134 nest_int:
    135         /*
    136          *  割込み・例外のネスト回数のインクリメント
    137          */
    138         addi  r3, r3, 1
    139         stw   r3, %gprel(except_nest_count)(gp)
    140125
    141126        /*
     
    179164
    180165        /*
     166         *  多重割込みか判定
     167         */
     168        ldw   r3, %gprel(except_nest_count)(gp)  /* ネスト回数のチェック */
     169        bltu  zero, r3,  nest_int
     170
     171        /*
     172         * スタックポインタの入れ替え
     173         */
     174        ldw   r2, %gprel(_kernel_istkpt)(gp)
     175        addi  r2, r2, -4
     176        stw   sp, 0(r2)     /* スタックポインタの保存 */       
     177        mov   sp, r2        /* スタックポインタの入れ替え */
     178
     179nest_int:
     180        /*
     181         *  割込み・例外のネスト回数のインクリメント
     182         */
     183        addi  r3, r3, 1
     184        stw   r3, %gprel(except_nest_count)(gp)
     185
     186        /*
    181187         *  割込み要因の割込み優先度を求め(モデル上の)割込み優先度マスクをセット
    182188         *  する.またその際,ハンドラ実行前の(モデル上の)割込み優先度マスクを
     
    245251        and   r3, r3, r4
    246252        wrctl status, r3
    247 test1:
    248253
    249254/*
     
    355360
    356361        /*
    357          * 多重割込みか判定
     362         * カーネル管理外のCPU例外か判定する
     363         *
     364         * カーネル管理外のCPU例外は,カーネル実行中,全割込みロック状態,
     365         * CPUロック状態,カーネル管理外の割込みハンドラ実行中に発生した
     366         * CPU例外である.
     367         * Nios2の場合は,PIEが'0'の場合が相当する.
     368         */
     369        rdctl r3, estatus
     370        andi  r3, r3, STATUS_PIE
     371        beq   r3, zero, kernel_unc_exception
     372
     373        /*
     374         * 例外発生元のコンテキストを判定
    358375         */
    359376        ldw   r3, %gprel(except_nest_count)(gp)  /* ネスト回数のチェック */
     
    361378
    362379        /*
    363          * スタックポインタの入れ替え
     380         * 発生元がタスクの場合はスタックポインタの入れ替え
    364381         */
    365382        ldw   r2, %gprel(_kernel_istkpt)(gp)
     
    376393
    377394        /*
    378          *  CPU例外番号の取得(4倍されている)
     395         *  CPU例外ハンドラ番号の取得(4倍されている)
    379396         */
    380397#ifdef USE_EXTRA_EXCEPTION
     
    420437
    421438        /*
    422          *  例外発生時CPUロック状態でなければCPUロック解除状態とする
    423          */
    424         rdctl r3, estatus
    425         andi  r3, r3, STATUS_PIE
    426         beq   r3, zero, call_exc_handler
     439         *  CPUロック解除状態とする
     440         */
    427441        rdctl r3, status
    428442        ori   r3, r3, STATUS_PIE
     
    431445call_exc_handler:
    432446#ifdef LOG_EXC_ENTER
    433         Push  r6         /* CPU例外番号保存               */
     447        Push  r6         /* CPU例外ハンドラ番号保存       */
    434448        Push  r5         /* CPU例外ハンドラアドレス保存   */
    435449        Push  r4         /* CPU例外フレームの先頭番地保存 */
    436         mov   r4, r6     /* CPU例外番号を引数に           */
     450        mov   r4, r6     /* CPU例外ハンドラ番号を引数に   */
    437451        call  log_exc_enter
    438452        Pop   r4         /* CPU例外フレームの先頭番地復帰 */
     
    446460
    447461#ifdef LOG_EXC_LEAVE
    448         Pop   r4         /* CPU例外番号復帰               */
     462        Pop   r4         /* CPU例外ハンドラ番号復帰        */
    449463        call  log_exc_leave
    450464#endif /* LOG_EXC_LEAVE */
     
    550564        beq  r6, zero, ret_int_4      /* enatex が false ならリターン */
    551565        ldw  r7, TCB_texptn(r4)       /* r7 <- texptn, texptnが0でなければ */
    552         beq  zero, r7, ret_int_4     
     566        beq  zero, r7, ret_int_4
     567        ldw  r7, %gprel(ipmflg)(gp)   /* r7 <- ipmflg      */
     568        beq  zero, r7, ret_int_4      /* ipmflgがfalseであればリターン */
    553569        call call_texrtn              /* タスク例外ルーチンの呼び出し */
    554570
     
    577593        eret
    578594
     595/*
     596 * カーネル管理外のCPU例外の出入口処理
     597 */
     598kernel_unc_exception:
     599        /*
     600         * 例外発生元のコンテキストを判定
     601         */
     602        ldw   r3, %gprel(except_nest_count)(gp)  /* ネスト回数のチェック */
     603        bltu  zero, r3,  nest_int_exc
     604
     605        /*
     606         * 発生元がタスクの場合はスタックポインタの入れ替え
     607         */
     608        ldw   r2, %gprel(_kernel_istkpt)(gp)
     609        addi  r2, r2, -4
     610        stw   sp, 0(r2)     /* スタックポインタの保存 */       
     611        mov   sp, r2        /* スタックポインタの入れ替え */
     612
     613nest_int_kernel_unc_exc:
     614        /*
     615         *  割込み・例外のネスト回数のインクリメント
     616         */
     617        addi  r4, r3, 1
     618        stw   r4, %gprel(except_nest_count)(gp)
     619
     620        /*
     621         *  CPU例外ハンドラ番号の取得(4倍されている)
     622         */
     623#ifdef USE_EXTRA_EXCEPTION
     624        rdctl r5, exception
     625#else
     626        mov   r5, zero
     627#endif /* USE_EXTRA_EXCEPTION */
     628        srli  r6, r5, 2
     629
     630        /*
     631         *  割込み発生前の割込み優先度マスクをスタックに保存
     632         */
     633        ldbu  r2, %gprel(iipm)(gp)
     634        Push  r2
     635
     636        /*
     637         *  例外フレームの作成            オフセット
     638         *    例外番号                        0
     639         *    ESTATUS(et)                     4
     640         *    割込み・例外ネストカウント(r3)  8
     641         *    戻りアドレス                   12 
     642         *    割込み優先度マスク(iipm)       16
     643         */
     644        addi  sp,  sp, -20
     645        stw   r6,  0(sp)
     646        stw   et,  4(sp)
     647        stw   r3,  8(sp)
     648        stw   ea, 12(sp)
     649        stw   r2, 16(sp)
     650
     651        /*
     652         *  例外フレームの先頭番地をCPU例外ハンドラの引数に設定(r4)
     653         */
     654        mov   r4, sp
     655
     656        /*
     657         *  例外ハンドラアドレスの取得
     658         */
     659        movhi r2, %hiadj(exch_tbl) 
     660        addi  r2, r2, %lo(exch_tbl)
     661        add   r2, r2, r5
     662        ldw   r5, 0(r2)
     663
     664        /*
     665         *  CPU例外ハンドラ呼び出し
     666         */
     667        callr r5
     668
     669        /*
     670         *  割込み禁止
     671         */
     672        rdctl r3, status
     673        movi  r4, ~STATUS_PIE
     674        and   r3, r3, r4
     675        wrctl status, r3
     676
     677        /*
     678         *  例外フレームを捨てる
     679         */
     680        addi  sp,  sp, 20
     681
     682        /*
     683         *  (モデル上の)割込み優先度マスクを元に戻す
     684         */
     685        Pop   r3                   /* 割込み前の(モデル上の)割込み優先度マスクを取得 */
     686        stb   r3, %gprel(iipm)(gp) /* (モデル上の)割込み優先度マスクをセット */
     687        slli  r3, r3, 2            /* 割込み優先度マスクを4倍してオフセットを生成    */
     688        movhi r2, %hiadj(iipm_mask_tbl) /* 割込み優先度マスクに対応した割込み禁止パターンを取得 */
     689        addi  r2, r2, %lo(iipm_mask_tbl)
     690        add   r2, r2, r3
     691        ldw   r5, 0(r2)
     692        ldw   r8, %gprel(idf)(gp)       /* 各割込みの割込み要求禁止フラグの状態を取得     */
     693        nor   r8, r8, r5                /* 両者のORの否定を生成                           */
     694        wrctl ienable, r8               /* 指定した割り込みのみ許可                       */
     695
     696        /*
     697         *  割込み・例外のネスト回数のデクリメント
     698         */
     699        ldw   r3, %gprel(except_nest_count)(gp)
     700        addi  r3, r3, -1
     701        stw   r3, %gprel(except_nest_count)(gp)
     702
     703        bltu  zero, r3, ret_int_1_kernel_unc_exc /* ネスト回数が1以上ならスタックポインタを変更しない */
     704
     705        ldw   r2, 0(sp)              /* スタックポインタを戻す    */
     706        mov   sp, r2
     707
     708ret_int_1_kernel_unc_exc:
     709        ldw   et,   0(sp)  /* レジスタの復帰 */
     710        wrctl estatus, et
     711        ldw   at,   4(sp)
     712        ldw   r2,   8(sp)
     713        ldw   r3,  12(sp)
     714        ldw   r4,  16(sp)
     715        ldw   r5,  20(sp)
     716        ldw   r6,  24(sp)
     717        ldw   r7,  28(sp)
     718        ldw   r8,  32(sp)
     719        ldw   r9,  36(sp)
     720        ldw   r10, 40(sp)
     721        ldw   r11, 44(sp)
     722        ldw   r12, 48(sp)
     723        ldw   r13, 52(sp)
     724        ldw   r14, 56(sp)
     725        ldw   r15, 60(sp)
     726        ldw   fp,  64(sp)
     727        ldw   ra,  68(sp)
     728        ldw   ea,  72(sp)
     729        addi  sp, sp, 76       
     730        eret   
    579731
    580732/*
     
    631783        beq  r6, zero, dispatch_r_1   /* enatex が false ならリターン */
    632784        ldw  r7, TCB_texptn(r4)       /* r7 <- texptn, texptnが0でなければ */
    633         beq  r7, zero, dispatch_r_1   
     785        beq  r7, zero, dispatch_r_1
     786        ldw  r7, %gprel(ipmflg)(gp)   /* r7 <- ipmflg      */
     787        beq  zero, r7, dispatch_r_1   /* ipmflgがfalseであればリターン */
    634788        call call_texrtn              /* タスク例外ルーチンの呼び出し */
    635789
     
    767921        ldw   r4, TINIB_exinf(r3)     /* r4  <- 引数(exinf)         */
    768922        ldw   r2, TINIB_task(r3)      /* r2 <- タスクの実行番地       */
    769         addi  sp, sp, 8
    770923        movhi ra, %hiadj(ext_tsk)
    771924        addi  ra, ra, %lo(ext_tsk)
  • asp_nios2/trunk/arch/nios2_gcc/prc_unrename.h

    r1 r14  
    1717#undef exch_tbl
    1818#undef int_bitmap_search_table
     19#undef default_exc_handler
     20#undef default_int_handler
    1921
    2022#undef prc_initialize
     
    4345#undef _exch_tbl
    4446#undef _int_bitmap_search_table
     47#undef _default_exc_handler
     48#undef _default_int_handler
    4549
    4650#undef _prc_initialize
Note: See TracChangeset for help on using the changeset viewer.