Ignore:
Timestamp:
Jun 27, 2017, 10:53:32 AM (7 years ago)
Author:
ertl-honda
Message:

3.1.0を反映

Location:
asp3_wo_tecs/trunk/arch/arm_gcc/common
Files:
2 added
18 edited

Legend:

Unmodified
Added
Removed
  • asp3_wo_tecs/trunk/arch/arm_gcc/common/Makefile.core

    r304 r306  
    22#               Makefileのコア依存部(ARM用)
    33#
    4 #  $Id: Makefile.core 484 2016-01-03 15:13:38Z ertl-hiro $
     4#  $Id: Makefile.core 572 2016-02-01 14:40:09Z ertl-hiro $
    55#
    66
  • asp3_wo_tecs/trunk/arch/arm_gcc/common/arm.h

    r305 r306  
    5252 *  の責任を負わない.
    5353 *
    54  *  $Id: arm.h 523 2016-01-14 11:01:04Z ertl-hiro $
     54 *  $Id: arm.h 694 2016-03-23 13:17:48Z ertl-hiro $
    5555 */
    5656
     
    127127#define CP15_SCTLR_VECTOR               UINT_C(0x00002000)
    128128#define CP15_SCTLR_ICACHE               UINT_C(0x00001000)
     129#define CP15_SCTLR_BP                   UINT_C(0x00000800)
    129130#define CP15_SCTLR_DCACHE               UINT_C(0x00000004)
    130131#define CP15_SCTLR_MMU                  UINT_C(0x00000001)
     
    308309
    309310/*
     311 *  分岐予測をイネーブル
     312 */
     313Inline void
     314arm_enable_bp(void)
     315{
     316        uint32_t        reg;
     317
     318        CP15_READ_SCTLR(reg);
     319        reg |= CP15_SCTLR_BP;
     320        CP15_WRITE_SCTLR(reg);
     321}
     322
     323/*
     324 *  分岐予測をディスエーブル
     325 */
     326Inline void
     327arm_disable_bp(void)
     328{
     329        uint32_t        reg;
     330
     331        CP15_READ_SCTLR(reg);
     332        reg &= ~CP15_SCTLR_BP;
     333        CP15_WRITE_SCTLR(reg);
     334}
     335
     336/*
    310337 *  プロセッサ番号の取得
    311338 *
     
    413440
    414441/*
     442 *  分岐予測の無効化
     443 */
     444Inline void
     445arm_invalidate_bp(void)
     446{
     447        CP15_INVALIDATE_BP();
     448        data_sync_barrier();
     449        inst_sync_barrier();
     450}
     451
     452/*
    415453 *  TLBの無効化
    416454 */
  • asp3_wo_tecs/trunk/arch/arm_gcc/common/arm_insn.h

    r304 r306  
    5252 *  の責任を負わない.
    5353 *
    54  *  $Id: arm_insn.h 547 2016-01-16 06:26:08Z ertl-hiro $
     54 *  $Id: arm_insn.h 694 2016-03-23 13:17:48Z ertl-hiro $
    5555 */
    5656
     
    245245#define CP15_INVALIDATE_ICACHE() \
    246246                                                                Asm("mcr p15, 0, %0, c7, c5, 0"::"r"(0))
     247
     248/* 分岐予測å
     249¨ä½“の無効化 */
     250#define CP15_INVALIDATE_BP()    Asm("mcr p15, 0, %0, c7, c5, 6"::"r"(0))
    247251
    248252/* データキャッシュå
     
    435439}
    436440
     441/*
     442 *  CP15のセキュリティ拡張レジスタ操作マクロ(ARMv7のみ)
     443 */
     444#if __TARGET_ARCH_ARM == 7
     445
     446/* ベクタベースアドレスレジスタ */
     447#define CP15_READ_VBAR(reg)             Asm("mrc p15, 0, %0, c12, c0, 0":"=r"(reg))
     448#define CP15_WRITE_VBAR(reg)    Asm("mcr p15, 0, %0, c12, c0, 0"::"r"(reg))
     449
     450#endif /* __TARGET_ARCH_ARM == 7 */
    437451#endif /* TOPPERS_ARM_INSN_H */
  • asp3_wo_tecs/trunk/arch/arm_gcc/common/core_asm.inc

    r302 r306  
    33 *      Toyohashi Open Platform for Embedded Real-Time Systems
    44 *
    5  *  Copyright (C) 2011-2014 by Embedded and Real-Time Systems Laboratory
     5 *  Copyright (C) 2011-2016 by Embedded and Real-Time Systems Laboratory
    66 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    77 *
     
    5050 *  の責任を負わない.
    5151 *
    52  *  $Id: core_asm.inc 349 2015-07-25 05:25:27Z ertl-hiro $
     52 *  $Id: core_asm.inc 714 2016-03-31 05:52:19Z ertl-hiro $
    5353 */
    5454
     
    8282#define BSS_END                 __end_bss
    8383
     84/*
     85 *  データメモリバリア
     86 */
     87        .macro  asm_data_memory_barrier reg1
     88#ifdef ASM_DATA_MEMORY_BARRIER
     89        ASM_DATA_MEMORY_BARRIER(reg1)
     90#elif __TARGET_ARCH_ARM <= 6
     91        mov             \reg1, #0
     92        mcr             p15, 0, \reg1, c7, c10, 5
     93#else /* __TARGET_ARCH_ARM <= 6 */
     94        dmb
     95#endif
     96        .endm
     97
     98/*
     99 *  データ同期バリア
     100 */
     101        .macro  asm_data_sync_barrier reg1
     102#ifdef ASM_DATA_SYNC_BARRIER
     103        ASM_DATA_SYNC_BARRIER(reg1)
     104#elif __TARGET_ARCH_ARM <= 6
     105        mov             \reg1, #0
     106        mcr             p15, 0, \reg1, c7, c10, 4
     107#else /* __TARGET_ARCH_ARM <= 6 */
     108        dsb
     109#endif
     110        .endm
     111
     112/*
     113 *  命令同期バリア
     114 */
     115        .macro  asm_inst_sync_barrier reg1
     116#ifdef ASM_INST_SYNC_BARRIER
     117        ASM_INST_SYNC_BARRIER(reg1)
     118#elif __TARGET_ARCH_ARM <= 6
     119        mov             \reg1, #0
     120        mcr             p15, 0, \reg1, c7, c5, 4
     121#else /* __TARGET_ARCH_ARM <= 6 */
     122        isb
     123#endif
     124        .endm
     125
    84126#endif /* TOPPERS_CORE_ASM_INC */
  • asp3_wo_tecs/trunk/arch/arm_gcc/common/core_check.trb

    r305 r306  
    33#               ãƒ‘ス3の生成スクリプトのコア依存部(ARM用)
    44#
    5 #  $Id: core_check.trb 588 2016-02-05 12:54:58Z ertl-hiro $
     5#  $Id: core_check.trb 730 2016-04-03 02:04:52Z ertl-hiro $
    66#
    77
    8 # 
     8#
    99#  ターゲット非依存部のインクルード
    10 # 
     10#
    1111IncludeTrb("kernel/kernel_check.trb")
    1212
     
    2727    error_wrong_id("E_PAR", params, :inthdr, :inhno, "not aligned")
    2828  end
    29   if $CHECK_FUNC_NONNULL == 1 && inthdr == 0
     29  if $CHECK_FUNC_NONNULL && inthdr == 0
    3030    error_wrong_id("E_PAR", params, :inthdr, :inhno, "null")
    3131  end
     
    4747    error_wrong_id("E_PAR", params, :exchdr, :excno, "not aligned")
    4848  end
    49   if $CHECK_FUNC_NONNULL == 1 && exchdr == 0
     49  if $CHECK_FUNC_NONNULL && exchdr == 0
    5050    error_wrong_id("E_PAR", params, :exchdr, :excno, "null")
    5151  end
  • asp3_wo_tecs/trunk/arch/arm_gcc/common/core_kernel.h

    r302 r306  
    66 *  Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
    77 *                              Toyohashi Univ. of Technology, JAPAN
    8  *  Copyright (C) 2004-2015 by Embedded and Real-Time Systems Laboratory
     8 *  Copyright (C) 2004-2016 by Embedded and Real-Time Systems Laboratory
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
     
    5353 *  の責任を負わない.
    5454 *
    55  *  $Id: core_kernel.h 454 2015-08-16 03:18:46Z ertl-hiro $
     55 *  $Id: core_kernel.h 718 2016-04-01 15:05:01Z ertl-hiro $
    5656 */
    5757
     
    109109        uint32_t        r3;
    110110        uint32_t        r4;
     111        uint32_t        r5;
    111112        uint32_t        r12;
    112113        uint32_t        lr;
     
    125126        uint32_t        r3;
    126127        uint32_t        r4;
     128        uint32_t        r5;
    127129        uint32_t        r12;
    128130        uint32_t        lr;
  • asp3_wo_tecs/trunk/arch/arm_gcc/common/core_kernel.trb

    r304 r306  
    5353#   ã®è²¬ä»»ã‚’負わない.
    5454#
    55 #   $Id: core_kernel.trb 572 2016-02-01 14:40:09Z ertl-hiro $
     55#   $Id: core_kernel.trb 662 2016-02-27 02:33:51Z ertl-hiro $
    5656#
    5757
     
    9696#  割込み要求ライン設定テーブル
    9797#
    98 if $USE_INTCFG_TABLE == 1
     98if $USE_INTCFG_TABLE
    9999  $kernelCfgC.comment_header("Interrupt Configuration Table")
    100100
  • asp3_wo_tecs/trunk/arch/arm_gcc/common/core_kernel_impl.h

    r304 r306  
    66 *  Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
    77 *                              Toyohashi Univ. of Technology, JAPAN
    8  *  Copyright (C) 2006-2015 by Embedded and Real-Time Systems Laboratory
     8 *  Copyright (C) 2006-2016 by Embedded and Real-Time Systems Laboratory
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
     
    5353 *  の責任を負わない.
    5454 *
    55  *  $Id: core_kernel_impl.h 546 2016-01-16 06:00:09Z ertl-hiro $
     55 *  $Id: core_kernel_impl.h 664 2016-02-29 16:32:29Z ertl-hiro $
    5656 */
    5757
     
    7979#endif /* __thumb__ */
    8080#define CHECK_FUNC_NONNULL                      /* 関数の非NULLチェック */
    81 #define CHECK_STACK_ALIGN       4               /* スタック領域のアライン単位 */
     81#define CHECK_STACK_ALIGN       8               /* スタック領域のアライン単位 */
    8282#define CHECK_STACK_NONNULL                     /* スタック領域の非NULLチェック */
    8383#define CHECK_MPF_ALIGN         4               /* 固定長メモリプール領域のアライン単位 */
  • asp3_wo_tecs/trunk/arch/arm_gcc/common/core_rename.def

    r302 r306  
    4242irc_end_exc
    4343
     44# pl310.c
     45pl310_initialize
     46pl310_disable
     47pl310_invalidate_all
     48pl310_clean_and_invalidate_all
     49
    4450# target_kernel_impl.c
    4551arm_tnum_memory_area
  • asp3_wo_tecs/trunk/arch/arm_gcc/common/core_rename.h

    r304 r306  
    5858
    5959/*
     60 *  pl310.c
     61 */
     62#define pl310_initialize                        _kernel_pl310_initialize
     63#define pl310_disable                           _kernel_pl310_disable
     64#define pl310_invalidate_all            _kernel_pl310_invalidate_all
     65#define pl310_clean_and_invalidate_all  _kernel_pl310_clean_and_invalidate_all
     66
     67/*
    6068 *  target_kernel_impl.c
    6169 */
  • asp3_wo_tecs/trunk/arch/arm_gcc/common/core_sil.h

    r302 r306  
    55 *  Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
    66 *                              Toyohashi Univ. of Technology, JAPAN
    7  *  Copyright (C) 2004-2014 by Embedded and Real-Time Systems Laboratory
     7 *  Copyright (C) 2004-2016 by Embedded and Real-Time Systems Laboratory
    88 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    99 *
     
    5252 *  の責任を負わない.
    5353 *
    54  *  $Id: core_sil.h 352 2015-07-25 06:36:42Z ertl-hiro $
     54 *  $Id: core_sil.h 714 2016-03-31 05:52:19Z ertl-hiro $
    5555 */
    5656
     
    155155#define SIL_UNL_INT()   (TOPPERS_set_fiq_irq(TOPPERS_fiq_irq_mask))
    156156
    157 /*
    158  *  微少時間å¾
    159 ã¡
    160  */
    161 Inline void
    162 sil_dly_nse(ulong_t dlytim) throw()
    163 {
    164         register uint32_t r0 asm("r0") = (uint32_t) dlytim;
    165         Asm("bl _sil_dly_nse" : "=g"(r0) : "0"(r0) : "lr","cc");
    166 }
    167 
    168157#endif /* TOPPERS_MACRO_ONLY */
    169158#endif /* TOPPERS_CORE_SIL_H */
  • asp3_wo_tecs/trunk/arch/arm_gcc/common/core_support.S

    r302 r306  
    66 *  Copyright (C) 2000-2004 by Embedded and Real-Time Systems Laboratory
    77 *                              Toyohashi Univ. of Technology, JAPAN
    8  *  Copyright (C) 2006-2015 by Embedded and Real-Time Systems Laboratory
     8 *  Copyright (C) 2006-2016 by Embedded and Real-Time Systems Laboratory
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
     
    5353 *  の責任を負わない.
    5454 *
    55  *  $Id: core_support.S 459 2015-08-29 13:03:42Z ertl-hiro $
     55 *  $Id: core_support.S 733 2016-04-03 09:10:54Z ertl-hiro $
    5656 */
    5757
     
    7272 *  例外ベクタ
    7373 */
    74         ASECTION(vector)
     74        ASECTION(.vector)
     75        AALIGN(5)
    7576        AGLOBAL(vector_table)
    7677ALABEL(vector_table)
     
    122123‹ã§å‘¼ã³å‡ºã•ã‚Œã‚‹ï¼Ž
    123124         */
    124         push    {lr}                                    /* 戻り番地を保存 */
     125        push    {r12,lr}                                /* 戻り番地を保存,r12はダミー */
    125126#ifdef TOPPERS_SUPPORT_OVRHDR
    126127        bl              ovrtimer_stop
     
    139140        bl              ovrtimer_start
    140141#endif /* TOPPERS_SUPPORT_OVRHDR */
    141         pop             {lr}                                    /* 戻り番地を復帰 */
     142        pop             {r12,lr}                                /* 戻り番地を復帰 */
    142143        bx              lr
    143144
     
    325326         */
    326327        msr             cpsr_c, #(CPSR_SVC_MODE AOR CPSR_IRQ_BIT)
    327         stmfd   sp!, {r0-r4,r12,lr,pc}          /* pcはスペース確保のため */
     328        stmfd   sp!, {r0-r5,r12,lr,pc}          /* pcはスペース確保のため */
    328329
    329330        /*
     
    339340         */
    340341        msr             cpsr_c, #(CPSR_SVC_MODE AOR CPSR_IRQ_BIT)
    341         str             r2, [sp,#0x1c]                  /* 戻り番地をスタックに保存 */
     342        str             r2, [sp,#0x20]                  /* 戻り番地をスタックに保存 */
    342343        push    {r1}                                    /* spsrをスタックに保存 */
    343344#else /* __TARGET_ARCH_ARM < 6 */
     
    354355         */
    355356        cps             #CPSR_SVC_MODE
    356         stmfd   sp!, {r0-r4,r12,lr}
     357        stmfd   sp!, {r0-r5,r12,lr}
    357358#endif /* __TARGET_ARCH_ARM < 6 */
     359
     360        /*
     361         *  スタックポインタの調整
     362         */
     363        and             r1, sp, #4
     364        sub             sp, sp, r1
     365        push    {r0,r1}                                 /* r0はスペース確保のため */
    358366
    359367        /*
     
    378386         *  非タスクコンテキスト用のスタックに切り換える.
    379387         */
    380         mov             r1, sp                                  /* この時点のスタックポインタをr1に */
     388        mov             r3, sp                                  /* この時点のスタックポインタをr3に */
    381389        ldr             r2, =istkpt                             /* 非タスクコンテキスト用のスタックに */
    382390        ldr             sp, [r2]
    383         push    {r1}                                    /* 切換え前のスタックポインタを保存 */
    384 
     391        push    {r0,r3}                                 /* 切換え前のスタックポインタを保存 */
     392                                                                        /* r0はスペース確保のため */
    385393ALABEL(irq_handler_1)
    386394        /*
     
    388396         */
    389397        bl              irc_begin_int
    390         cmp             r4, #TNUM_INHNO                 /* スプリアス割込みなら */
    391         bhs             irq_handler_2                   /*  irq_handler_2に分岐 */
    392 
     398#if TNUM_INHNO <= 256 || __TARGET_ARCH_ARM <= 6
     399        cmp             r4, #TNUM_INHNO                 /* TNUM_INHNOの値によってはエラーになる */
     400#else /* TNUM_INHNO <= 256 || __TARGET_ARCH_ARM <= 6 */
     401        movw    r3, #TNUM_INHNO
     402        cmp             r4, r3                 
     403#endif /* TNUM_INHNO <= 256 || __TARGET_ARCH_ARM <= 6 */
     404        bhs             irq_handler_2                   /* スプリアス割込みなら */
     405                                                                        /*  irq_handler_2に分岐 */
    393406        /*
    394407         *  CPUロック解除状æ
     
    447460ALABEL(irq_handler_2)
    448461        bl              irc_end_int
    449 #endif /* OMIT_IRQ_HANDLER */
    450462
    451463        /*
     
    462474         *  タスク用のスタックに戻す.
    463475         */
    464         pop             {r1}
    465         mov     sp, r1
     476        pop             {r0,r3}
     477        mov     sp, r3
    466478
    467479        /*
     
    469481要か判定する.
    470482         */
    471 ALABEL(ret_int_1)
    472483        ldr             r0, =p_runtsk                   /* p_runtsk → r0 */
    473484        ldr             r0, [r0]
     
    482493        tst             r0, r0                                  /* p_runtskがNULLならdispatcher_0へ */
    483494        beq             dispatcher_0
    484         stmfd   sp!, {r5-r11}                   /* 非スクラッチレジスタの保存 */
     495        stmfd   sp!, {r6-r11}                   /* 非スクラッチレジスタの保存 */
    485496        str             sp, [r0,#TCB_sp]                /* スタックポインタを保存 */
    486497        adr             r1, ret_int_r                   /* 実行再開番地を保存 */
     
    492503         *  コンテキストを復帰する.
    493504         */
    494         ldmfd   sp!, {r5-r11}                   /* 非スクラッチレジスタの復帰 */
     505        ldmfd   sp!, {r6-r11}                   /* 非スクラッチレジスタの復帰 */
    495506
    496507#ifdef TOPPERS_SUPPORT_OVRHDR
     
    516527#endif /* TOPPERS_SUPPORT_OVRHDR */
    517528ALABEL(irq_handler_3)
     529        pop             {r0,r1}                                 /* スタックポインタの調整 */
     530        add             sp, sp, r1
    518531#if __TARGET_ARCH_ARM < 6
    519532        ldmfd   sp!, {r0}                               /* 戻りå
    520533ˆã®cpsrをspsrに設定 */
    521534        msr             spsr_cxsf, r0
    522         ldmfd   sp!, {r0-r4,r12,lr,pc}^ /* コンテキストの復帰 */
     535        ldmfd   sp!, {r0-r5,r12,lr,pc}^ /* コンテキストの復帰 */
    523536                                                                        /* ^付きなので,spsr → cpsr */
    524537#else /* __TARGET_ARCH_ARM < 6 */
    525         ldmfd   sp!, {r0-r4,r12,lr}
     538        ldmfd   sp!, {r0-r5,r12,lr}
    526539        rfefd   sp!
    527540#endif /* __TARGET_ARCH_ARM < 6 */
     
    536549        b               irq_handler_3
    537550#endif /* TOPPERS_SUPPORT_OVRHDR */
     551#endif /* OMIT_IRQ_HANDLER */
    538552
    539553/*
     
    560574         */
    561575        msr             cpsr_c, #(CPSR_SVC_MODE AOR CPSR_FIQ_IRQ_BIT)
    562         stmfd   sp!, {r0-r4,r12,lr,pc}          /* pcはスペース確保のため */
     576        stmfd   sp!, {r0-r5,r12,lr,pc}          /* pcはスペース確保のため */
    563577
    564578        /*
     
    573587         */
    574588        msr             cpsr_c, #(CPSR_SVC_MODE AOR CPSR_FIQ_IRQ_BIT)
    575         str             r2, [sp,#0x1c]                  /* 戻り番地をスタックに保存 */
     589        str             r2, [sp,#0x20]                  /* 戻り番地をスタックに保存 */
    576590        push    {r1}                                    /* spsrをスタックに保存 */
    577591#else /* __TARGET_ARCH_ARM < 6 */
     
    587601         */
    588602        cps             #CPSR_SVC_MODE
    589         stmfd   sp!, {r0-r4,r12,lr}
     603        stmfd   sp!, {r0-r5,r12,lr}
    590604#endif /* __TARGET_ARCH_ARM < 6 */
    591605        mov             r4, #EXCNO_UNDEF
     
    609623         */
    610624        msr             cpsr_c, #(CPSR_SVC_MODE AOR CPSR_FIQ_IRQ_BIT)
    611         stmfd   sp!, {r0-r4,r12,lr,pc}          /* pcはスペース確保のため */
     625        stmfd   sp!, {r0-r5,r12,lr,pc}          /* pcはスペース確保のため */
    612626
    613627        /*
     
    620634         *  戻り番地とspsrを保存する.
    621635         */
    622         str             r2, [sp,#0x1c]                  /* 戻り番地をスタックに保存 */
     636        str             r2, [sp,#0x20]                  /* 戻り番地をスタックに保存 */
    623637        push    {r1}                                    /* spsrをスタックに保存 */
    624638#else /* __TARGET_ARCH_ARM < 6 */
     
    634648         */
    635649        cps             #CPSR_SVC_MODE                  /* 不要と思われる */
    636         stmfd   sp!, {r0-r4,r12,lr}
     650        stmfd   sp!, {r0-r5,r12,lr}
    637651#endif /* __TARGET_ARCH_ARM < 6 */
    638652        mov             r4, #EXCNO_SVC
     
    657671         */
    658672        msr             cpsr_c, #(CPSR_SVC_MODE AOR CPSR_FIQ_IRQ_BIT)
    659         stmfd   sp!, {r0-r4,r12,lr,pc}          /* pcはスペース確保のため */
     673        stmfd   sp!, {r0-r5,r12,lr,pc}          /* pcはスペース確保のため */
    660674
    661675        /*
     
    670684         */
    671685        msr             cpsr_c, #(CPSR_SVC_MODE AOR CPSR_FIQ_IRQ_BIT)
    672         str             r2, [sp,#0x1c]                  /* 戻り番地をスタックに保存 */
     686        str             r2, [sp,#0x20]                  /* 戻り番地をスタックに保存 */
    673687        push    {r1}                                    /* spsrをスタックに保存 */
    674688#else /* __TARGET_ARCH_ARM < 6 */
     
    684698         */
    685699        cps             #CPSR_SVC_MODE
    686         stmfd   sp!, {r0-r4,r12,lr}
     700        stmfd   sp!, {r0-r5,r12,lr}
    687701#endif /* __TARGET_ARCH_ARM < 6 */
    688702        mov             r4, #EXCNO_PABORT
     
    720734         */
    721735        msr             cpsr_c, #(CPSR_SVC_MODE AOR CPSR_FIQ_IRQ_BIT)
    722         stmfd   sp!, {r0-r4,r12,lr,pc}          /* pcはスペース確保のため */
     736        stmfd   sp!, {r0-r5,r12,lr,pc}          /* pcはスペース確保のため */
    723737
    724738        /*
     
    733747         */
    734748        msr             cpsr_c, #(CPSR_SVC_MODE AOR CPSR_FIQ_IRQ_BIT)
    735         str             r2, [sp,#0x1c]                  /* 戻り番地をスタックに保存 */
     749        str             r2, [sp,#0x20]                  /* 戻り番地をスタックに保存 */
    736750        push    {r1}                                    /* spsrをスタックに保存 */
    737751#else /* __TARGET_ARCH_ARM < 6 */
     
    747761         */
    748762        cps             #CPSR_SVC_MODE
    749         stmfd   sp!, {r0-r4,r12,lr}
     763        stmfd   sp!, {r0-r5,r12,lr}
    750764#endif /* __TARGET_ARCH_ARM < 6 */
    751765        mov             r4, #EXCNO_DABORT
     
    766780        ldr             sp, =istkpt
    767781        ldr             sp, [sp]
    768         stmfd   sp!, {r0-r4,r12,lr,pc}          /* pcはスペース確保のため */
     782        stmfd   sp!, {r0-r5,r12,lr,pc}          /* pcはスペース確保のため */
    769783
    770784        /*
     
    779793         */
    780794        msr             cpsr_c, #(CPSR_SVC_MODE AOR CPSR_FIQ_IRQ_BIT)
    781         str             r2, [sp,#0x1c]                  /* 戻り番地をスタックに保存 */
     795        str             r2, [sp,#0x20]                  /* 戻り番地をスタックに保存 */
    782796        push    {r1}                                    /* spsrをスタックに保存 */
    783797#else /* __TARGET_ARCH_ARM < 6 */
     
    786800         *  クポインタを初期化する.
    787801         */
    788         cpsid   if,#CPSR_SVC_MODE
     802        cpsid   if, #CPSR_SVC_MODE
    789803        ldr             sp, =istkpt
    790804        ldr             sp, [sp]
     
    802816         */
    803817        cps             #CPSR_SVC_MODE
    804         stmfd   sp!, {r0-r4,r12,lr}
     818        stmfd   sp!, {r0-r5,r12,lr}
    805819#endif /* __TARGET_ARCH_ARM < 6 */
    806820
     
    833847         */
    834848        msr             cpsr_c, #(CPSR_SVC_MODE AOR CPSR_FIQ_IRQ_BIT)
    835         stmfd   sp!, {r0-r4,r12,lr,pc}          /* pcはスペース確保のため */
     849        stmfd   sp!, {r0-r5,r12,lr,pc}          /* pcはスペース確保のため */
    836850
    837851        /*
     
    846860         */
    847861        msr             cpsr_c, #(CPSR_SVC_MODE AOR CPSR_FIQ_IRQ_BIT)
    848         str             r2, [sp,#0x1c]                  /* 戻り番地をスタックに保存 */
     862        str             r2, [sp,#0x20]                  /* 戻り番地をスタックに保存 */
    849863        push    {r1}                                    /* spsrをスタックに保存 */
    850864#else /* __TARGET_ARCH_ARM < 6 */
     
    860874         */
    861875        cps             #CPSR_SVC_MODE
    862         stmfd   sp!, {r0-r4,r12,lr}
     876        stmfd   sp!, {r0-r5,r12,lr}
    863877#endif /* __TARGET_ARCH_ARM < 6 */
    864878        mov             r4, #EXCNO_FIQ
     
    875889 * 【この時点のレジスタ状æ
    876890‹ã€‘
    877  *  r0:CPU例外ハンドラ番号
     891 *  r4:CPU例外ハンドラ番号
    878892 */
    879893ALABEL(exc_handler_1)
     
    889903        ldr             r3, [r2]
    890904        push    {r3}                                    /* 例外ネストカウントを保存 */
    891         mov             r12, sp                                 /* CPU例外のæƒ
     905        mov             r5, sp                                  /* CPU例外のæƒ
    892906報を記憶している領域の */
    893                                                                         /*                              å
    894 ˆé ­ç•ªåœ°ã‚’r12に保存 */
     907                                                                        /*                                å
     908ˆé ­ç•ªåœ°ã‚’r5に保存 */
     909        /*
     910         *  スタックポインタの調整
     911         */
     912        and             r1, sp, #4
     913        sub             sp, sp, r1
     914        push    {r0,r1}                                 /* r0はスペース確保のため */
     915
    895916        /*
    896917         *  カーネル管理外のCPU例外か判定する
     
    905926         *  のいずれかがセットされているなら,これ該当する.
    906927         */
    907         ldr             r1, [r12,#T_EXCINF_cpsr]        /* 例外フレームからcpsrを取得 */
     928        ldr             r1, [r5,#T_EXCINF_cpsr]         /* 例外フレームからcpsrを取得 */
    908929        ands    r1, r1, #CPSR_FIQ_IRQ_BIT
    909930        bne             nk_exc_handler_1                /* カーネル管理外のCPU例外の処理へ */
     
    915936         *  r3:excpt_nest_countの値
    916937         *  r4:CPU例外ハンドラ番号
    917          *  r12:CPU例外のæƒ
     938         *  r5:CPU例外のæƒ
    918939報を記憶している領域のå
    919940ˆé ­ç•ªåœ°
     
    932953         *  オーバランタイマを停止する.
    933954         */
    934         push    {r12}
    935955        bl              ovrtimer_stop
    936         pop             {r12}
    937956#endif /* TOPPERS_SUPPORT_OVRHDR */
    938957
     
    943962        ldr             r2, =istkpt                             /* 非タスクコンテキスト用のスタックに */
    944963        ldr             sp, [r2]
    945         push    {r3}                                    /* 切換え前のスタックポインタを保存 */
    946 
     964        push    {r0,r3}                                 /* 切換え前のスタックポインタを保存 */
     965                                                                        /* r0はスペース確保のため */
    947966ALABEL(exc_handler_2)
    948967        /*
     
    950969‹ã€‘
    951970         *  r4:CPU例外ハンドラ番号
    952          *  r12:CPU例外のæƒ
     971         *  r5:CPU例外のæƒ
    953972報を記憶している領域のå
    954973ˆé ­ç•ªåœ°
     
    9821001         */
    9831002#ifdef LOG_EXC_ENTER
    984         push    {r12}
    9851003        mov             r0, r4                                  /* CPU例外番号をパラメータに渡す */
    9861004        bl              log_exc_enter
    987         pop             {r12}
    9881005#endif /* LOG_EXC_ENTER */
    9891006
     
    9931010        ldr             r2, =exc_table                  /* CPU例外ハンドラテーブルの読込み */
    9941011        ldr             r3, [r2,r4,lsl #2]              /* CPU例外ハンドラの番地 → r3 */
    995         mov             r0, r12                                 /* CPU例外のæƒ
     1012        mov             r0, r5                                  /* CPU例外のæƒ
    9961013報を記憶している領域の */
    9971014                                                                        /*              å
     
    10351052        ldr             r3, [r2]
    10361053        subs    r3, r3, #1
    1037         str             r3, [r2]
     1054        str             r3, [r2]                                /* 戻りå
     1055ˆãŒéžã‚¿ã‚¹ã‚¯ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆãªã‚‰ */
     1056        bne             exc_handler_3                   /*                              exc_handler_3に分岐 */
    10381057
    10391058        /*
    10401059         *  タスク用のスタックに戻す.
    10411060         */
    1042         popeq   {r1}                                    /* 戻りå
    1043 ˆãŒã‚¿ã‚¹ã‚¯ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆãªã‚‰ */
    1044         moveq   sp, r1                                  /*               ã‚¿ã‚¹ã‚¯ç”¨ã®ã‚¹ã‚¿ãƒƒã‚¯ã«æˆ»ã™ */
     1061        pop             {r0,r3}
     1062        mov             sp, r3
     1063
     1064        /*
     1065         *  ディスパッチがå¿
     1066要か判定する.
     1067         */
     1068        ldr             r0, =p_runtsk                   /* p_runtsk → r0 */
     1069        ldr             r0, [r0]
     1070        ldr             r1, =p_schedtsk                 /* p_schedtsk → r1 */
     1071        ldr             r1, [r1]
     1072        teq             r0, r1                                  /* p_runtskとp_schedtskが同じなら */
     1073        beq             exc_handler_4                   /*                                exc_handler_4へ */
     1074
     1075        /*
     1076         *  コンテキストを保存する.
     1077         */
     1078        tst             r0, r0                                  /* p_runtskがNULLならdispatcher_0へ */
     1079        beq             dispatcher_0
     1080        stmfd   sp!, {r6-r11}                   /* 非スクラッチレジスタの保存 */
     1081        str             sp, [r0,#TCB_sp]                /* スタックポインタを保存 */
     1082        adr             r1, ret_exc_r                   /* 実行再開番地を保存 */
     1083        str             r1, [r0,#TCB_pc]
     1084        b               dispatcher                              /* r0にはp_runtskが格納されている */
     1085
     1086ALABEL(ret_exc_r)
     1087        /*
     1088         *  コンテキストを復帰する.
     1089         */
     1090        ldmfd   sp!, {r6-r11}                   /* 非スクラッチレジスタの復帰 */
     1091
     1092#ifdef TOPPERS_SUPPORT_OVRHDR
     1093        /*
     1094         *  オーバランタイマを動作開始する.
     1095         */
     1096        bl              ovrtimer_start
     1097#endif /* TOPPERS_SUPPORT_OVRHDR */
     1098
     1099        /*
     1100         *  CPU例外処理からのリターン
     1101         *
     1102         *  CPU例外処理からのリターンにより,CPUロック解除状æ
     1103‹ã«é·ç§»ã™ã‚‹ã‚ˆ
     1104         *  うにするå¿
     1105要があるが,ARMはCPSRのビットによってCPUロック状æ
     1106‹ã‚’
     1107         *  表しているため,CPSRをå
     1108ƒã«æˆ»ã—てリターンすればよい.
     1109         */
     1110#ifndef TOPPERS_SUPPORT_OVRHDR
     1111ALABEL(exc_handler_4)
     1112#endif /* TOPPERS_SUPPORT_OVRHDR */
     1113ALABEL(exc_handler_3)
     1114        pop             {r0,r1}                                 /* スタックポインタの調整 */
     1115        add             sp, sp, r1
    10451116        add             sp, sp, #8                              /* スタック上のæƒ
    10461117報を捨てる */
    1047         beq             ret_int_1                               /* ret_int_1に分岐 */
    1048 
    1049         /*
    1050          *  CPU例外処理からのリターン(irq_handler_3と同じ処理å†
    1051 å®¹ï¼‰
    1052          */
    10531118#if __TARGET_ARCH_ARM < 6
    10541119        ldmfd   sp!, {r0}                               /* 戻りå
    10551120ˆã®cpsrをspsrに設定 */
    10561121        msr             spsr_cxsf, r0
    1057         ldmfd   sp!, {r0-r4,r12,lr,pc}^ /* コンテキストの復帰 */
     1122        ldmfd   sp!, {r0-r5,r12,lr,pc}^ /* コンテキストの復帰 */
    10581123                                                                        /* ^付きなので,spsr → cpsr */
    10591124#else /* __TARGET_ARCH_ARM < 6 */
    1060         ldmfd   sp!, {r0-r4,r12,lr}
     1125        ldmfd   sp!, {r0-r5,r12,lr}
    10611126        rfefd   sp!
    10621127#endif /* __TARGET_ARCH_ARM < 6 */
     1128
     1129#ifdef TOPPERS_SUPPORT_OVRHDR
     1130ALABEL(exc_handler_4)
     1131        /*
     1132         *  オーバランタイマを動作開始する.
     1133         */
     1134        tst             r0, r0                                  /* p_runtskがNULLでない場合 */
     1135        blne    ovrtimer_start
     1136        b               exc_handler_3
     1137#endif /* TOPPERS_SUPPORT_OVRHDR */
    10631138
    10641139/*
     
    10741149         *  r3:excpt_nest_countの値
    10751150         *  r4:CPU例外ハンドラ番号
    1076          *  r12:CPU例外のæƒ
     1151         *  r5:CPU例外のæƒ
    10771152報を記憶している領域のå
    10781153ˆé ­ç•ªåœ°
     
    10931168        ldr             r2, =istkpt                             /* 非タスクコンテキスト用のスタックに */
    10941169        ldr             sp, [r2]
    1095         push    {r3}                                    /* 切換え前のスタックポインタを保存 */
    1096 
     1170        push    {r0,r3}                                 /* 切換え前のスタックポインタを保存 */
     1171                                                                        /* r0はスペース確保のため */
    10971172ALABEL(nk_exc_handler_2)
    10981173        /*
     
    11091184        ldr             r2, =exc_table                  /* CPU例外ハンドラテーブルの読込み */
    11101185        ldr             r3, [r2,r4,lsl #2]              /* CPU例外ハンドラの番地 → r3 */
    1111         mov             r0, r12                                 /* CPU例外のæƒ
     1186        mov             r0, r5                                  /* CPU例外のæƒ
    11121187報を記憶している領域の */
    11131188                                                                        /*              å
     
    11231198        ldr             r3, [r2]
    11241199        subs    r3, r3, #1
    1125         str             r3, [r2]
     1200        str             r3, [r2]                                /* 戻りå
     1201ˆãŒéžã‚¿ã‚¹ã‚¯ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆãªã‚‰ */
     1202        bne             exc_handler_3                   /*                              exc_handler_3に分岐 */
    11261203
    11271204        /*
    11281205         *  タスク用のスタックに戻す.
    11291206         */
    1130         popeq   {r1}                                    /* 戻りå
    1131 ˆãŒã‚¿ã‚¹ã‚¯ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆãªã‚‰ */
    1132         moveq   sp, r1                                  /*               ã‚¿ã‚¹ã‚¯ç”¨ã®ã‚¹ã‚¿ãƒƒã‚¯ã«æˆ»ã™ */
    1133         add             sp, sp, #8                              /* スタック上のæƒ
    1134 å ±ã‚’捨てる */
    1135 
    1136         /*
    1137          *  CPU例外処理からのリターン(irq_handler_3と同じ処理å†
    1138 å®¹ï¼‰
    1139          */
    1140 #if __TARGET_ARCH_ARM < 6
    1141         ldmfd   sp!, {r0}                               /* 戻りå
    1142 ˆã®cpsrをspsrに設定 */
    1143         msr             spsr_cxsf, r0
    1144         ldmfd   sp!, {r0-r4,r12,lr,pc}^ /* コンテキストの復帰 */
    1145                                                                         /* ^付きなので,spsr → cpsr */
    1146 #else /* __TARGET_ARCH_ARM < 6 */
    1147         ldmfd   sp!, {r0-r4,r12,lr}
    1148         rfefd   sp!
    1149 #endif /* __TARGET_ARCH_ARM < 6 */
    1150 
    1151 /*
    1152  *  微少時間å¾
    1153 ã¡
    1154  */
    1155         ATEXT
    1156         AALIGN(2)
    1157         AGLOBAL(_sil_dly_nse)
    1158 ALABEL(_sil_dly_nse)
    1159         subs    r0, r0, #SIL_DLY_TIM1
    1160         bxls    lr
    1161 ALABEL(_sil_dly_nse1)
    1162         subs    r0, r0, #SIL_DLY_TIM2
    1163         bhi             _sil_dly_nse1
    1164         bx              lr
     1207        pop             {r0,r3}
     1208        mov             sp, r3
     1209        b               exc_handler_3
    11651210
    11661211/*
     
    11861231
    11871232#endif /* __thumb__ */
     1233
     1234/*
     1235 *  微少時間å¾
     1236ち
     1237 *
     1238 *  キャッシュラインのどの場所にあるかのよって実行時間が変わるため,大
     1239 *  きめの単位でアラインしている.
     1240 */
     1241        ATEXT
     1242        AALIGN(8)
     1243        AGLOBAL(sil_dly_nse)
     1244ALABEL(sil_dly_nse)
     1245        mov             r1, #0
     1246        mcr             p15, 0, r1, c7, c5, 6           /* 分岐予測å
     1247¨ä½“の無効化 */
     1248        asm_inst_sync_barrier r3
     1249        subs    r0, r0, #SIL_DLY_TIM1
     1250        bxls    lr
     1251ALABEL(sil_dly_nse1)
     1252        mcr             p15, 0, r1, c7, c5, 6           /* 分岐予測å
     1253¨ä½“の無効化 */
     1254        asm_inst_sync_barrier r3
     1255        subs    r0, r0, #SIL_DLY_TIM2
     1256        bhi             sil_dly_nse1
     1257        bx              lr
  • asp3_wo_tecs/trunk/arch/arm_gcc/common/core_sym.def

    r304 r306  
    11TARGET_ARCH_ARM,__TARGET_ARCH_ARM
    2 USE_INTCFG_TABLE,1,,defined(USE_INTCFG_TABLE)
     2USE_INTCFG_TABLE,true,bool,defined(USE_INTCFG_TABLE)
    33sizeof_TCB,sizeof(TCB)
    44offsetof_TCB_p_tinib,"offsetof(TCB,p_tinib)"
  • asp3_wo_tecs/trunk/arch/arm_gcc/common/core_unrename.h

    r304 r306  
    5959
    6060/*
     61 *  pl310.c
     62 */
     63#undef pl310_initialize
     64#undef pl310_disable
     65#undef pl310_invalidate_all
     66#undef pl310_clean_and_invalidate_all
     67
     68/*
    6169 *  target_kernel_impl.c
    6270 */
  • asp3_wo_tecs/trunk/arch/arm_gcc/common/gic_kernel_impl.c

    r305 r306  
    11/*
    2  *  TOPPERS/ASP Kernel
    3  *      Toyohashi Open Platform for Embedded Real-Time Systems/
    4  *      Advanced Standard Profile Kernel
     2 *  TOPPERS Software
     3 *      Toyohashi Open Platform for Embedded Real-Time Systems
    54 *
    65 *  Copyright (C) 2006-2016 by Embedded and Real-Time Systems Laboratory
     
    5150 *  の責任を負わない.
    5251 *
    53  *  $Id: gic_kernel_impl.c 522 2016-01-14 06:56:53Z ertl-hiro $
     52 *  $Id: gic_kernel_impl.c 714 2016-03-31 05:52:19Z ertl-hiro $
    5453 */
    5554
     
    138137         *  すべての割込みをグループ1(IRQ)に設定
    139138         */
    140         for (i = 0; i < GIC_TNUM_INTNO / 32; i++) {
     139        for (i = 0; i < (GIC_TNUM_INTNO + 31) / 32; i++) {
    141140                sil_wrw_mem(GICD_IGROUPR(i), 0xffffffffU);
    142141        }
     
    146145         *  すべての割込みを禁止
    147146         */
    148         for (i = 0; i < GIC_TNUM_INTNO / 32; i++) {
     147        for (i = 0; i < (GIC_TNUM_INTNO + 31) / 32; i++) {
    149148                sil_wrw_mem(GICD_ICENABLER(i), 0xffffffffU);
    150149        }
     
    153152         *  すべての割込みペンディングをクリア
    154153         */
    155         for (i = 0; i < GIC_TNUM_INTNO / 32; i++) {
     154        for (i = 0; i < (GIC_TNUM_INTNO + 31) / 32; i++) {
    156155                sil_wrw_mem(GICD_ICPENDR(i), 0xffffffffU);
    157156        }
     
    161160ˆåº¦ã«è¨­å®š
    162161         */
    163         for (i = 0; i < GIC_TNUM_INTNO / 4; i++){
     162        for (i = 0; i < (GIC_TNUM_INTNO + 3) / 4; i++){
    164163                sil_wrw_mem(GICD_IPRIORITYR(i), 0xffffffffU);
    165164        }
     
    169168±æœ‰ãƒšãƒªãƒ•ã‚§ãƒ©ãƒ«å‰²è¾¼ã¿ã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚’プロセッサ0に設定
    170169         */
    171         for (i = GIC_INTNO_SPI0 / 4; i < GIC_TNUM_INTNO / 4; i++) {
     170        for (i = GIC_INTNO_SPI0 / 4; i < (GIC_TNUM_INTNO + 3) / 4; i++) {
    172171                sil_wrw_mem(GICD_ITARGETSR(i), 0x01010101U);
    173172        }
     
    176175         *  すべてのペリフェラル割込みをレベルトリガに設定
    177176         */
    178         for (i = GIC_INTNO_PPI0 / 16; i < GIC_TNUM_INTNO / 16; i++) {
     177        for (i = GIC_INTNO_PPI0 / 16; i < (GIC_TNUM_INTNO + 15) / 16; i++) {
    179178#ifdef GIC_ARM11MPCORE
    180179                sil_wrw_mem(GICD_ICFGR(i), 0x55555555U);
     
    198197        sil_wrw_mem(GICD_CTLR, GICD_CTLR_DISABLE);
    199198}
     199
     200#ifndef OMIT_GIC_INITIALIZE_INTERRUPT
    200201
    201202/*
     
    273274        }
    274275}
     276
     277#endif /* OMIT_GIC_INITIALIZE_INTERRUPT */
  • asp3_wo_tecs/trunk/arch/arm_gcc/common/gic_kernel_impl.h

    r305 r306  
    11/*
    2  *  TOPPERS/ASP Kernel
    3  *      Toyohashi Open Platform for Embedded Real-Time Systems/
    4  *      Advanced Standard Profile Kernel
     2 *  TOPPERS Software
     3 *      Toyohashi Open Platform for Embedded Real-Time Systems
    54 *
    65 *  Copyright (C) 2006-2016 by Embedded and Real-Time Systems Laboratory
     
    5150 *  の責任を負わない.
    5251 *
    53  *  $Id: gic_kernel_impl.h 535 2016-01-16 00:42:29Z ertl-hiro $
     52 *  $Id: gic_kernel_impl.h 714 2016-03-31 05:52:19Z ertl-hiro $
    5453 */
    5554
     
    176175#define GICD_TYPER                      GIC_REG(GICD_BASE, 0x004)
    177176#define GICD_IIDR                       GIC_REG(GICD_BASE, 0x008)
    178 #define GICD_IGROUPR(n)         GIC_REG(GICD_BASE, 0x080 + n * 4)
    179 #define GICD_ISENABLER(n)       GIC_REG(GICD_BASE, 0x100 + n * 4)
    180 #define GICD_ICENABLER(n)       GIC_REG(GICD_BASE, 0x180 + n * 4)
    181 #define GICD_ISPENDR(n)         GIC_REG(GICD_BASE, 0x200 + n * 4)
    182 #define GICD_ICPENDR(n)         GIC_REG(GICD_BASE, 0x280 + n * 4)
    183 #define GICD_ISACTIVER(n)       GIC_REG(GICD_BASE, 0x300 + n * 4)
    184 #define GICD_ICACTIVER(n)       GIC_REG(GICD_BASE, 0x380 + n * 4)
    185 #define GICD_IPRIORITYR(n)      GIC_REG(GICD_BASE, 0x400 + n * 4)
    186 #define GICD_ITARGETSR(n)       GIC_REG(GICD_BASE, 0x800 + n * 4)
    187 #define GICD_ICFGR(n)           GIC_REG(GICD_BASE, 0xc00 + n * 4)
    188 #define GICD_NSCAR(n)           GIC_REG(GICD_BASE, 0xe00 + n * 4)
     177#define GICD_IGROUPR(n)         GIC_REG(GICD_BASE, 0x080 + (n) * 4)
     178#define GICD_ISENABLER(n)       GIC_REG(GICD_BASE, 0x100 + (n) * 4)
     179#define GICD_ICENABLER(n)       GIC_REG(GICD_BASE, 0x180 + (n) * 4)
     180#define GICD_ISPENDR(n)         GIC_REG(GICD_BASE, 0x200 + (n) * 4)
     181#define GICD_ICPENDR(n)         GIC_REG(GICD_BASE, 0x280 + (n) * 4)
     182#define GICD_ISACTIVER(n)       GIC_REG(GICD_BASE, 0x300 + (n) * 4)
     183#define GICD_ICACTIVER(n)       GIC_REG(GICD_BASE, 0x380 + (n) * 4)
     184#define GICD_IPRIORITYR(n)      GIC_REG(GICD_BASE, 0x400 + (n) * 4)
     185#define GICD_ITARGETSR(n)       GIC_REG(GICD_BASE, 0x800 + (n) * 4)
     186#define GICD_ICFGR(n)           GIC_REG(GICD_BASE, 0xc00 + (n) * 4)
     187#define GICD_NSCAR(n)           GIC_REG(GICD_BASE, 0xe00 + (n) * 4)
    189188#define GICD_SGIR                       GIC_REG(GICD_BASE, 0xf00)
    190 #define GICD_CPENDSGIR(n)       GIC_REG(GICD_BASE, 0xf10 + n * 4)
    191 #define GICD_SPENDSGIR(n)       GIC_REG(GICD_BASE, 0xf20 + n * 4)
     189#define GICD_CPENDSGIR(n)       GIC_REG(GICD_BASE, 0xf10 + (n) * 4)
     190#define GICD_SPENDSGIR(n)       GIC_REG(GICD_BASE, 0xf20 + (n) * 4)
    192191
    193192/*
     
    200199 *  割込みコンフィギュレーションレジスタ(GICD_ICFGRn)の設定値
    201200 *
    202  *  第1ビットは,ARM11 MPCoreでは割込みの通知å
    203 ˆãƒ—ロセッサを設定するため
    204  *  に使用されているが,GICv1およびGICv2では予約ビットとなっている.
     201 *  第1ビットは,ARM11 MPCoreおよびGICの早い時期の実è£
     202では割込みの通知
     203 *  å
     204ˆãƒ—ロセッサを設定するために使用されている.
    205205 */
    206206#define GICD_ICFGRn_LEVEL       UINT_C(0x00)
  • asp3_wo_tecs/trunk/arch/arm_gcc/common/gic_support.S

    r305 r306  
    11/*
    2  *  TOPPERS/ASP Kernel
    3  *      Toyohashi Open Platform for Embedded Real-Time Systems/
    4  *      Advanced Standard Profile Kernel
     2 *  TOPPERS Software
     3 *      Toyohashi Open Platform for Embedded Real-Time Systems
    54 *
    65 *  Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
     
    5352 *  の責任を負わない.
    5453 *
    55  *  $Id: gic_support.S 522 2016-01-14 06:56:53Z ertl-hiro $
     54 *  $Id: gic_support.S 718 2016-04-01 15:05:01Z ertl-hiro $
    5655 */
    5756
     
    7978報(割込み発生前の割込み
    8079 *  優å
    81 ˆåº¦ãƒžã‚¹ã‚¯ï¼‰ã‚’,スタックに保存する.
     80ˆåº¦ãƒžã‚¹ã‚¯ï¼‰ã‚’,スタックのå
     81ˆé ­ã«ä¿å­˜ã™ã‚‹ï¼Ž
    8282 */
    8383        ATEXT
     
    104104        str             r0, [r1]                        /* 新しい割込み優å
    105105ˆåº¦ãƒžã‚¹ã‚¯ã‚’セットする */
    106 //      DATA_SYNC_BARRIER                       /* 割込み優å
     106        asm_data_sync_barrier r0        /* 割込み優å
    107107ˆåº¦ãƒžã‚¹ã‚¯ãŒã‚»ãƒƒãƒˆã•ã‚Œã‚‹ã®ã‚’å¾
    108108つ */
    109 #if __TARGET_ARCH_ARM == 6
    110         mov             r0, #0
    111         mcr             p15, 0, r0, c7, c10, 4
    112 #elif __TARGET_ARCH_ARM == 7
    113         dsb
    114 #endif /* __TARGET_ARCH_ARM == 7 */
    115         push    {r2}                            /* irc_end_intで用いるæƒ
     109        str             r2, [sp]                        /* irc_end_intで用いるæƒ
    116110報を保存 */
    117111
     
    141135ƒã«æˆ»ã™ï¼Ž
    142136         */
    143         pop             {r2}                            /* irc_begin_intで保存したæƒ
     137        ldr             r2, [sp]                        /* irc_begin_intで保存したæƒ
    144138報を復帰 */
    145139        ldr             r1, =GICC_PMR           /* 割込み優å
     
    178172報(CPU例外発生前の割込み優å
    179173ˆåº¦ãƒžã‚¹ã‚¯ï¼‰ã‚’,スタッ
    180  *      クに保存する.
     174 *      クのå
     175ˆé ­ã«ä¿å­˜ã™ã‚‹ï¼Ž
    181176 */
    182177        ATEXT
     
    191186ˆåº¦ã‚’取得 */
    192187        ldr             r2, [r1]
    193         push    {r2}                            /* irc_end_excで用いるæƒ
     188        str             r2, [sp]                        /* irc_end_excで用いるæƒ
    194189報を保存 */
    195190        bx              lr
     
    207202ƒã«æˆ»ã™ï¼Ž
    208203         */
    209         pop             {r2}                            /* irc_begin_excで保存したæƒ
     204        ldr             r2, [sp]                        /* irc_begin_excで保存したæƒ
    210205報を復帰 */
    211206        ldr             r1, =GICC_PMR           /* 割込み優å
  • asp3_wo_tecs/trunk/arch/arm_gcc/common/uart_pl011.h

    r302 r306  
    66 *  Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
    77 *                              Toyohashi Univ. of Technology, JAPAN
    8  *  Copyright (C) 2006-2015 by Embedded and Real-Time Systems Laboratory
     8 *  Copyright (C) 2006-2016 by Embedded and Real-Time Systems Laboratory
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
     
    5353 *  の責任を負わない.
    5454 *
    55  *  $Id: uart_pl011.h 359 2015-07-26 10:27:20Z ertl-hiro $
     55 *  $Id: uart_pl011.h 509 2016-01-12 06:06:14Z ertl-hiro $
    5656 */
    5757
Note: See TracChangeset for help on using the changeset viewer.