Ignore:
Timestamp:
Jun 2, 2015, 3:39:53 PM (9 years ago)
Author:
nmir-saito
Message:

ファイルの mime-type 変更

Location:
ssp_qb_r5f100le_cs/trunk/arch/arm_m_gcc
Files:
24 edited

Legend:

Unmodified
Added
Removed
  • ssp_qb_r5f100le_cs/trunk/arch/arm_m_gcc/MANIFEST

    • Property svn:mime-type set to text/plain; charset=shift_jis
  • ssp_qb_r5f100le_cs/trunk/arch/arm_m_gcc/Makefile.prc

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    44
    55#
    6 #               Makefile ‚̃vƒƒZƒbƒTˆË‘¶•”iARM-M—pj
     6#               Makefile のプロセッサ依存部(ARM-M用)
    77#
    88
    99#
    10 ƒRƒ“ƒpƒCƒ‹ƒIƒvƒVƒ‡ƒ“
     10コンパイルオプション
    1111#
    1212COPTS := $(COPTS) -mthumb
     
    1717
    1818#
    19 ƒJ[ƒlƒ‹‚ÉŠÖ‚·‚é’è‹`
     19カーネルに関する定義
    2020#
    2121KERNEL_DIR := $(KERNEL_DIR) $(SRCDIR)/arch/$(PRC)_$(TOOL)
     
    2424
    2525#
    26 #  ƒRƒ“ƒtƒBƒMƒ
    27 ƒŒ[ƒ^ŠÖŒW‚̕ϐ”‚Ì’è‹`
     26#  コンフィギュレータ関係の変数の定義
    2827#
    2928CFG_TABS := $(CFG_TABS) --cfg1-def-table $(SRCDIR)/arch/$(PRC)_$(TOOL)/prc_def.csv
    3029
    3130#
    32 ˆË‘¶ŠÖŒW‚Ì’è‹`
     31依存関係の定義
    3332#
    3433cfg1_out.c: $(SRCDIR)/arch/$(PRC)_$(TOOL)/prc_def.csv
  • ssp_qb_r5f100le_cs/trunk/arch/arm_m_gcc/arm_m.h

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    66 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    77 *
    8  *  ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì(1)`(4)‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
    9  *  ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü
    10  *  •ÏEÄ”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
    11  *  (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
    12  *      Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
    13  *      ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    14  *  (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    15  *      —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ
    16 ƒƒ“ƒgi—˜—p
    17  *      ŽÒƒ}ƒjƒ
    18 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
    19  *      ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    20  *  (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    21  *      —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
    22  *      ‚ƁD
    23  *    (a) Ä”z•z‚É”º‚¤ƒhƒLƒ
    24 ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ
    25 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
    26  *        ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    27  *    (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
    28  *        •ñ‚·‚邱‚ƁD
    29  *  (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
    30  *      ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
    31  *      ‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝
    32  *      —R‚ÉŠî‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð
    33  *      –Ɛӂ·‚邱‚ƁD
     8 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     9 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     10 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     11 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     12 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     13 *      スコード中に含まれていること.
     14 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     15 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     16 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     17 *      の無保証規定を掲載すること.
     18 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     19 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     20 *      と.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     24 *        報告すること.
     25 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     26 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     27 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     28 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     29 *      免責すること.
    3430 *
    35  *  –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
    36  *  ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I
    37  *  ‚ɑ΂·‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒF
    38  *  ƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»
    39  *  ‚̐ӔC‚𕉂í‚È‚¢D
     31 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     32 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     33 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     34 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     35 *  の責任を負わない.
    4036 *
    4137 *  @(#) $Id: arm_m.h 1304 2008-08-27 07:28:36Z ertl-honda $
     
    4339
    4440/*
    45  *  ARMVx-M‚̃n[ƒhƒEƒFƒAŽ‘Œ¹‚Ì’è‹`
     41 *  ARMVx-Mのハードウェア資源の定義
    4642 */
    4743
     
    5147
    5248/*
    53  *  EPSR‚ÌTƒrƒbƒg
     49 *  EPSRのTビット
    5450 */
    5551#define EPSR_T   0x01000000
    5652
    5753/*
    58  * IPSR‚Ì ISR NUMBER
     54 * IPSR ISR NUMBER
    5955 */
    6056#define IPSR_ISR_NUMBER 0x1ff
    6157
    6258/*
    63  *  —áŠOEŠ„ž‚Ý”­¶Žž‚ɃXƒ^ƒbƒNã‚ɐς܂ê‚é•Û‘¶—̈æ‚̃TƒCƒY
    64  *  –{ƒJ[ƒlƒ‹‚Å‚Í—áŠOƒtƒŒ[ƒ€‚ƌĂÔ
     59 *  例外・割込み発生時にスタック上に積まれる保存領域のサイズ
     60 *  本カーネルでは例外フレームと呼ぶ
    6561 */
    6662#define EXC_FRAME_SIZE         (8*4)
    6763
    6864/*
    69  *  —áŠOEŠ„ž‚Ý”­¶Žž‚ÉLR‚ɐݒ肳‚ê‚éEXC_RETURN‚Ì’l
     65 *  例外・割込み発生時にLRに設定されるEXC_RETURNの値
    7066 */
    7167#define EXC_RETURN_HANDLER      0x0
     
    7571
    7672/*
    77  *  CONTROLƒŒƒWƒXƒ^
     73 *  CONTROLレジスタ
    7874 */
    7975#define CONTROL_PSP            0x02
     
    8177
    8278/*
    83  *  —áŠO”ԍ†
     79 *  例外番号
    8480 */
    8581#define EXCNO_NMI         2
     
    9389
    9490/*
    95  *  —áŠO”ԍ†‚̍ŏ¬’l‚ƍőå’l
     91 *  例外番号の最小値と最大値
    9692 */
    9793#define TMIN_EXCNO   2
     
    9995
    10096/*
    101  *  Š„ž‚ݔԍ†
     97 *  割込み番号
    10298 */
    10399#define IRQNO_SYSTICK    15
    104100
    105101/*
    106  *  Š„ž‚ݔԍ†‚̍ŏ¬’l
     102 *  割込み番号の最小値
    107103 */
    108104#define TMIN_INTNO       15
    109105
    110106/*
    111  *  —áŠOƒtƒŒ[ƒ€‚̃IƒtƒZƒbƒg
     107 *  例外フレームのオフセット
    112108 */
    113109#define P_EXCINF_OFFSET_EXC_RETURN  0x00
     
    117113
    118114/*
    119  *  NVICŠÖ˜A
     115 *  NVIC関連
    120116 */
    121117
    122118/*
    123  *  ƒRƒ“ƒgƒ[ƒ‹ƒŒƒWƒXƒ^
     119 *  コントロールレジスタ
    124120 */
    125121#define NVIC_INT_CTRL       0xe000ed04
     
    128124
    129125/*
    130  *  ƒVƒXƒeƒ€ƒnƒ“ƒhƒ‰[ƒRƒ“ƒgƒ[ƒ‹ƒŒƒWƒXƒ^
     126 *  システムハンドラーコントロールレジスタ
    131127 */
    132128#define NVIC_SYS_HND_CTRL   0xE000ED24
    133129
    134130/*
    135  *  Še—áŠO‚Ì‹–‰Âƒrƒbƒg
     131 *  各例外の許可ビット
    136132 */
    137133#define NVIC_SYS_HND_CTRL_USAGE 0x00040000
     
    140136
    141137/*
    142  *  —Dæ“xÝ’背ƒWƒXƒ^
     138 *  優先度設定レジスタ
    143139 */
    144140#define NVIC_SYS_PRI1       0xE000ED18  // Sys. Handlers 4 to 7 Priority
     
    148144
    149145/*
    150  *  Š„ž‚Ý‹–‰ÂƒŒƒWƒXƒ^
     146 *  割込み許可レジスタ
    151147 */
    152148#define NVIC_SETENA0        0xE000E100  // IRQ 0 to 31 Set Enable Register
    153149
    154150/*
    155  *  Š„ž‚Ý‹ÖŽ~ƒŒƒWƒXƒ^
     151 *  割込み禁止レジスタ
    156152 */
    157153#define NVIC_CLRENA0        0xE000E180  // IRQ 0 to 31 Set Disable Register
    158154
    159155/*
    160  *  ƒxƒNƒ^ƒe[ƒuƒ‹ƒIƒtƒZƒbƒgƒŒƒWƒXƒ^
     156 *  ベクタテーブルオフセットレジスタ
    161157 */
    162158#define NVIC_VECTTBL        0xE000ED08
     
    164160
    165161/*
    166  *  SYSTICŠÖ˜AƒŒƒWƒXƒ^
     162 *  SYSTIC関連レジスタ
    167163 */
    168164#define SYSTIC_CONTROL_STATUS 0xE000E010
  • ssp_qb_r5f100le_cs/trunk/arch/arm_m_gcc/prc.tf

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    11$
    2 $     ƒpƒX2‚̃A[ƒLƒeƒNƒ`ƒƒˆË‘¶ƒeƒ“ƒvƒŒ[ƒgiARM-M—pj
     2$     パス2のアーキテクチャ依存テンプレート(ARM-M用)
    33$
    44
    55$
    6 —LŒø‚ÈŠ„ž‚ݔԍ†CŠ„ž‚݃nƒ“ƒhƒ‰”ԍ†
     6有効な割込み番号,割込みハンドラ番号
    77$
    88$INTNO_VALID = RANGE(15, TMAX_INTNO)$
     
    1010
    1111$
    12 —LŒø‚ÈCPU—áŠO”ԍ†
     12有効なCPU例外番号
    1313$
    1414$EXCNO_VALID = { 2,3,4,5,6,11,12,14 }$
    1515
    1616$
    17 $  ATT_ISR‚ÅŽg—p‚Å‚«‚銄ž‚ݔԍ†‚Æ‚»‚ê‚ɑΉž‚·‚銄ž‚݃nƒ“ƒhƒ‰”ԍ†
     17$  ATT_ISRで使用できる割込み番号とそれに対応する割込みハンドラ番号
    1818$
    1919$INTNO_ATTISR_VALID = INTNO_VALID$
     
    2121
    2222$
    23 $  DEF_INT^DEF_EXC‚ÅŽg—p‚Å‚«‚銄ž‚݃nƒ“ƒhƒ‰”ԍ†^CPU—áŠOƒnƒ“ƒhƒ‰”ԍ†
     23$  DEF_INT/DEF_EXCで使用できる割込みハンドラ番号/CPU例外ハンドラ番号
    2424$
    2525$INHNO_DEFINH_VALID = INHNO_VALID$
     
    2727
    2828$
    29 ƒ`ƒFƒbƒN•û–@‚ÌŽw’è
     29チェック方法の指定
    3030$
    3131$CHECK_STKSZ_ALIGN = 8$
    3232
    3333$
    34 $  CFG_INT‚ÅŽg—p‚Å‚«‚銄ž‚ݔԍ†‚ÆŠ„ž‚Ý—Dæ“x
     34$  CFG_INTで使用できる割込み番号と割込み優先度
    3535$
    3636$INTNO_CFGINT_VALID = INTNO_VALID$
     
    3838
    3939$
    40 Š„ž‚Ý‘®«’†‚̃^[ƒQƒbƒgˆË‘¶‚É—p‚¢‚éƒrƒbƒg
     40割込み属性中のターゲット依存に用いるビット
    4141$
    4242$ TARGET_INTATR = $
    4343           
    4444$
    45 •W€ƒeƒ“ƒvƒŒ[ƒgƒtƒ@ƒCƒ‹‚̃Cƒ“ƒNƒ‹[ƒh
     45標準テンプレートファイルのインクルード
    4646$
    4747$INCLUDE "kernel/kernel.tf"$
     
    5353
    5454$
    55 ƒxƒNƒ^[ƒe[ƒuƒ‹
     55ベクターテーブル
    5656$
    5757
     
    118118
    119119$
    120 $  _kernel_bitpat_cfgint‚̐¶¬
     120$  _kernel_bitpat_cfgintの生成
    121121$
    122122
  • ssp_qb_r5f100le_cs/trunk/arch/arm_m_gcc/prc_cfg1_out.h

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    44
    55/*
    6  *              cfg1_out.c‚ðƒŠƒ“ƒN‚·‚邽‚ß‚É•K—v‚ȃXƒ^ƒu‚Ì’è‹`
     6 *              cfg1_out.cをリンクするために必要なスタブの定義
    77 */
    88
  • ssp_qb_r5f100le_cs/trunk/arch/arm_m_gcc/prc_check.tf

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    11$
    2 $               ƒpƒX3‚̃vƒƒZƒbƒTˆË‘¶ƒeƒ“ƒvƒŒ[ƒgiARM-M—pj
     2$               パス3のプロセッサ依存テンプレート(ARM-M用)
    33$
    44
    55$
    6 ƒ`ƒFƒbƒN•û–@‚ÌŽw’è
     6チェック方法の指定
    77$
    88$CHECK_FUNC_ALIGN = 1$
     
    1414
    1515$
    16 •W€ƒeƒ“ƒvƒŒ[ƒgƒtƒ@ƒCƒ‹‚̃Cƒ“ƒNƒ‹[ƒh
     16標準テンプレートファイルのインクルード
    1717$
    1818$ $INCLUDE "kernel/kernel_check.tf"$
  • ssp_qb_r5f100le_cs/trunk/arch/arm_m_gcc/prc_config.c

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    77 *  Copyright (C) 2010 by Meika Sugimoto
    88 *
    9  *  ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì(1)`(4)‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
    10  *  ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü
    11  *  •ÏEÄ”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
    12  *  (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
    13  *      Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
    14  *      ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    15  *  (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    16  *      —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ
    17 ƒƒ“ƒgi—˜—p
    18  *      ŽÒƒ}ƒjƒ
    19 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
    20  *      ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    21  *  (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    22  *      —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
    23  *      ‚ƁD
    24  *    (a) Ä”z•z‚É”º‚¤ƒhƒLƒ
    25 ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ
    26 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
    27  *        ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    28  *    (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
    29  *        •ñ‚·‚邱‚ƁD
    30  *  (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
    31  *      ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
    32  *      ‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝
    33  *      —R‚ÉŠî‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð
    34  *      –Ɛӂ·‚邱‚ƁD
    35  *
    36  *  –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
    37  *  ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I
    38  *  ‚ɑ΂·‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒF
    39  *  ƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»
    40  *  ‚̐ӔC‚𕉂í‚È‚¢D
     9 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     10 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     11 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     21 *      と.
     22 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     23 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     24 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     25 *        報告すること.
     26 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     27 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     28 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     29 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     30 *      免責すること.
     31 *
     32 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     33 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     34 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     35 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     36 *  の責任を負わない.
    4137 *
    4238 *  @(#) $Id: prc_config.c 1304 2008-08-27 07:28:36Z ertl-honda $
     
    4440
    4541/*
    46  *              ƒvƒƒZƒbƒTˆË‘¶ƒ‚ƒWƒ
    47 [ƒ‹iARM-M—pj
     42 *              プロセッサ依存モジュール(ARM-M用)
    4843 */
    4944
     
    5550
    5651/*
    57  *  CPUƒƒbƒNƒtƒ‰ƒOŽÀŒ»‚Ì‚½‚߂̕ϐ”
    58  */
    59 volatile bool_t         lock_flag;              /* CPUƒƒbƒNƒtƒ‰ƒO‚Ì’l‚ð•ÛŽ‚·‚é•Ï” */
    60 volatile uint32_t       saved_iipm;             /* Š„ž‚Ý—Dæ“xƒ}ƒXƒN‚ð•Û‘¶‚·‚é•Ï” */
    61 
    62 /* Š„ž‚݃lƒXƒg”‚ÌŠÇ— */
     52 *  CPUロックフラグ実現のための変数
     53 */
     54volatile bool_t         lock_flag;              /* CPUロックフラグの値を保持する変数 */
     55volatile uint32_t       saved_iipm;             /* 割込み優先度マスクを保存する変数 */
     56
     57/* 割込みネスト数の管理 */
    6358uint8_t intnest;
    6459
    6560/*
    66  *  ƒxƒNƒ^ƒe[ƒuƒ‹(kernel_cfg.c)
     61 *  ベクタテーブル(kernel_cfg.c)
    6762 */
    6863extern const FP vector_table[];
    6964
    7065/*
    71  *  ƒVƒXƒeƒ€—áŠOEŠ„ž‚݂́i—áŠO”ԍ† 4`15j
    72  *  Š„ž‚Ý—Dæ“xÝ’背ƒWƒXƒ^‚ւ̃AƒNƒZƒX‚Ì‚½‚ß‚Ì”z—ñ
     66 *  システム例外・割込みの(例外番号 4〜15)
     67 *  割込み優先度設定レジスタへのアクセスのための配列
    7368 */
    7469static const unsigned int nvic_sys_pri_reg[] = {
     
    8075
    8176/*
    82  *  —áŠO‚ÆŠ„ž‚Ý‚ÌŠ„ž‚Ý—Dæ“x‚ðƒZƒbƒg
     77 *  例外と割込みの割込み優先度をセット
    8378 *
    84  *  excno‚ÍARM-M‚Å’è‚ß‚ç‚ê‚Ä‚¢‚é Exception Number ‚ðŽw’èD
     79 *  excnoはARM-Mで定められている Exception Number を指定.
    8580 */
    8681void
     
    8984
    9085        /*
    91          *  Š„ž‚Ý—Dæ“xÝ’背ƒWƒXƒ^‚ÌŒˆ’è
     86         *  割込み優先度設定レジスタの決定
    9287         */
    9388        if ((EXCNO_MPU <= excno) && (excno <= IRQNO_SYSTICK)) {
    9489                /*
    95                  * Exception Number 4(Memory Management)‚©‚ç
    96                  * Exception Number 15(SysTick)‚Ü‚Å‚ÌŠ„ž‚Ý—Dæ“x‚̓VƒXƒeƒ€—Dæ“x
    97                  * ƒŒƒWƒXƒ^‚É‚æ‚èÝ’èD
     90                 * Exception Number 4(Memory Management)から
     91                 * Exception Number 15(SysTick)までの割込み優先度はシステム優先度
     92                 * レジスタにより設定.
    9893                 */
    9994                reg = nvic_sys_pri_reg[excno >> 2];
     
    10196        else if ((TMIN_INTNO < excno) && (excno <= TMAX_INTNO)){
    10297                /*
    103                  * IRQŠ„ž‚Ý‚È‚ç
     98                 * IRQ割込みなら
    10499                 */
    105100                reg = NVIC_PRI0 + (((excno - (TMIN_INTNO + 1)) >> 2) * 4);
     
    116111
    117112/*
    118  *  —áŠO‚Ì‹–‰Â
     113 *  例外の許可
    119114 *
    120  *  Memory Management, Bus Fault, Usage Fault ‚Í‹ÖŽ~E‹–‰Â‚ª”ƒ‚¨‚¤
     115 *  Memory Management, Bus Fault, Usage Fault は禁止・許可が買おう
    121116 */
    122117void
     
    145140
    146141/*
    147  *  —áŠO‚Ì‹ÖŽ~
     142 *  例外の禁止
    148143 */
    149144void
     
    173168
    174169/*
    175  *  ƒvƒƒZƒbƒTˆË‘¶‚̏‰Šú‰»
     170 *  プロセッサ依存の初期化
    176171 */
    177172void
     
    179174{
    180175        /*
    181          *  CPUƒƒbƒNƒtƒ‰ƒOŽÀŒ»‚Ì‚½‚߂̕ϐ”‚̏‰Šú‰»
     176         *  CPUロックフラグ実現のための変数の初期化
    182177         */
    183178        lock_flag = true;
    184179        saved_iipm = IIPM_ENAALL;
    185180       
    186         /* Š„ž‚݃lƒXƒg”‚̏‰Šú‰» */
     181        /* 割込みネスト数の初期化 */
    187182        intnest = 0u;
    188183
    189184        /*
    190          *  ƒxƒNƒ^ƒe[ƒuƒ‹‚ðÝ’è
     185         *  ベクタテーブルを設定
    191186         */
    192187        sil_wrw_mem((void*)NVIC_VECTTBL, (uint32_t)vector_table);
    193188
    194189        /*
    195          *  SVCƒnƒ“ƒhƒ‰‚Ì—Dæ“x‚ðÝ’è
     190         *  SVCハンドラの優先度を設定
    196191         */
    197192        set_exc_int_priority(EXCNO_SVCALL, 0);
    198193
    199194        /*
    200          *  SVCƒnƒ“ƒhƒ‰‚ð—LŒø‚É
     195         *  SVCハンドラを有効に
    201196         */
    202197        x_enable_int(EXCNO_SVCALL);     
     
    204199
    205200/*
    206  *  ƒvƒƒZƒbƒTˆË‘¶‚̏I—¹ˆ—
     201 *  プロセッサ依存の終了処理
    207202 */
    208203void
     
    214209
    215210/*
    216  *  Š„ž‚Ý—v‹ƒ‰ƒCƒ“‘®«‚̐ݒè
     211 *  割込み要求ライン属性の設定
    217212 */
    218213void
     
    223218
    224219        /*
    225          *  ˆê’UŠ„ž‚Ý‚ð‹ÖŽ~‚·‚é
     220         *  一旦割込みを禁止する
    226221         */   
    227222        (void)x_disable_int(intno);
     
    229224
    230225        /*
    231          *  Š„ž‚Ý—Dæ“x‚ðƒZƒbƒg
     226         *  割込み優先度をセット
    232227         */
    233228        set_exc_int_priority(intno, intpri);
    234229
    235230        /*
    236          *  Š„ž‚Ý—v‹ƒ}ƒXƒN‰ðœ(•K—v‚ȏꍇ)
    237          *  “¯Žž‚ÉŠ„ž‚Ý—Dæ“x‚àƒZƒbƒg‚³‚ê‚é
     231         *  割込み要求マスク解除(必要な場合)
     232         *  同時に割込み優先度もセットされる
    238233         */
    239234        if ((intatr & TA_ENAINT) != 0U) {
     
    245240#ifndef OMIT_DEFAULT_EXC_HANDLER
    246241/*
    247  *  TrapaˆÈŠO‚Ì—áŠO‚Å“o˜^‚³‚ê‚Ä‚¢‚È‚¢—áŠO‚ª”­¶‚·‚é‚ƌĂяo‚³‚ê‚é
     242 *  Trapa以外の例外で登録されていない例外が発生すると呼び出される
    248243 */
    249244void
     
    265260#ifndef OMIT_DEFAULT_INT_HANDLER
    266261/*
    267  *  –¢“o˜^‚ÌŠ„ž‚Ý‚ª”­¶‚µ‚½ê‡‚ɌĂяo‚³‚ê‚é
     262 *  未登録の割込みが発生した場合に呼び出される
    268263 */
    269264void
  • ssp_qb_r5f100le_cs/trunk/arch/arm_m_gcc/prc_config.h

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    88 *             Nagoya Municipal Industrial Research Institute, JAPAN
    99 *
    10  *  ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì(1)`(4)‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
    11  *  ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü
    12  *  •ÏEÄ”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
    13  *  (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
    14  *      Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
    15  *      ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    16  *  (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    17  *      —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ
    18 ƒƒ“ƒgi—˜—p
    19  *      ŽÒƒ}ƒjƒ
    20 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
    21  *      ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    22  *  (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    23  *      —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
    24  *      ‚ƁD
    25  *    (a) Ä”z•z‚É”º‚¤ƒhƒLƒ
    26 ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ
    27 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
    28  *        ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    29  *    (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
    30  *        •ñ‚·‚邱‚ƁD
    31  *  (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
    32  *      ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
    33  *      ‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝
    34  *      —R‚ÉŠî‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð
    35  *      –Ɛӂ·‚邱‚ƁD
     10 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     11 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     12 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     13 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     14 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     15 *      スコード中に含まれていること.
     16 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     17 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     18 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     19 *      の無保証規定を掲載すること.
     20 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     21 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     22 *      と.
     23 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     24 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     25 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     26 *        報告すること.
     27 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     28 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     29 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     30 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     31 *      免責すること.
    3632 *
    37  *  –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
    38  *  ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I
    39  *  ‚ɑ΂·‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒF
    40  *  ƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»
    41  *  ‚̐ӔC‚𕉂í‚È‚¢D
     33 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     34 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     35 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     36 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     37 *  の責任を負わない.
    4238 *
    4339 *  @(#) $Id: prc_config.h 1304 2008-08-27 07:28:36Z ertl-honda $
     
    4541
    4642/*
    47  *              ƒvƒƒZƒbƒTˆË‘¶ƒ‚ƒWƒ
    48 [ƒ‹iARM-M—pj
    49  *
    50  *  ‚±‚̃Cƒ“ƒNƒ‹[ƒhƒtƒ@ƒCƒ‹‚́Ctarget_config.hi‚Ü‚½‚́C‚»‚±‚©‚çƒCƒ“ƒN
    51  *  ƒ‹[ƒh‚³‚ê‚éƒtƒ@ƒCƒ‹j‚Ì‚Ý‚©‚çƒCƒ“ƒNƒ‹[ƒh‚³‚ê‚éD‘¼‚̃tƒ@ƒCƒ‹‚©‚ç
    52  *  ’¼ÚƒCƒ“ƒNƒ‹[ƒh‚µ‚Ä‚Í‚È‚ç‚È‚¢D
     43 *              プロセッサ依存モジュール(ARM-M用)
     44 *
     45 *  このインクルードファイルは,target_config.h(または,そこからインク
     46 *  ルードされるファイル)のみからインクルードされる.他のファイルから
     47 *  直接インクルードしてはならない.
    5348 */
    5449
     
    5954
    6055/*
    61  *  ƒvƒƒZƒbƒT‚Ì“ÁŽê–½—߂̃Cƒ“ƒ‰ƒCƒ“ŠÖ”’è‹`
     56 *  プロセッサの特殊命令のインライン関数定義
    6257 */
    6358#include "prc_insn.h"
    6459
    6560/*
    66  *  ”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—p‚̃Xƒ^ƒbƒN‰Šú’l
     61 *  非タスクコンテキスト用のスタック初期値
    6762 */
    6863#define TOPPERS_ISTKPT(istk, istksz) ((STK_T *)((char *)(istk) + (istksz)))
     
    7368
    7469/*
    75  *  Š„ž‚݃lƒXƒg”
     70 *  割込みネスト数
    7671 */
    7772extern uint8_t intnest;
    7873
    7974/*
    80  *  ƒRƒ“ƒeƒLƒXƒg‚ÌŽQÆ
     75 *  コンテキストの参照
    8176 *
    8277 */
     
    9994
    10095/*
    101  *  TOPPERS•W€Š„ž‚ݏˆ—ƒ‚ƒfƒ‹‚ÌŽÀŒ»
    102  *
    103  *  Š„ž‚Ý—Dæ“xƒ}ƒXƒN‚Æ‚µ‚ẮCBASEPRI‚ð—p‚¢‚éD‘SŠ„ž‚Ý‚ð‹ÖŽ~‚·‚é
    104  *  ‹@”\‚Æ‚µ‚āCFAULTMASK‚âPRIMASK‚ª‚ ‚邪CƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚Ý‚ð
    105  *  ƒTƒ|[ƒg‚·‚邽‚߁C‚±‚ê‚ç‚ÍCPUƒƒbƒN‚Ì‚½‚ß‚É—p‚¢‚È‚¢D
    106  *  ‚»‚Ì‚½‚߁CBASEPRI‚ð—p‚¢‚Ä‹[Ž—“I‚ÉCPUƒƒbƒNƒtƒ‰ƒO‚ðŽÀŒ»‚·‚éD
    107  *
    108  *  ‚Ü‚¸CCPUƒƒbƒNó‘Ô‚ðŠÇ—‚·‚½‚߂̕ϐ”(lock_flag)‚ð—pˆÓ‚·‚éD
    109  *
    110  *  CPUƒƒbƒNƒtƒ‰ƒO‚ªƒNƒŠƒA‚³‚ê‚Ä‚¢‚éŠÔ‚́CBASEPRI‚ðƒ‚ƒfƒ‹ã‚ÌŠ„ž‚Ý
    111  *  —Dæ“xƒ}ƒXƒN‚Ì’l‚ɐݒ肷‚éD‚±‚̊Ԃ́Cƒ‚ƒfƒ‹ã‚ÌŠ„ž‚Ý—Dæ“xƒ}ƒX
    112  *  ƒN‚́CBASEPRI‚ð—p‚¢‚éD
     96 *  TOPPERS標準割込み処理モデルの実現
     97 *
     98 *  割込み優先度マスクとしては,BASEPRIを用いる.全割込みを禁止する
     99 *  機能として,FAULTMASKやPRIMASKがあるが,カーネル管理外の割込みを
     100 *  サポートするため,これらはCPUロックのために用いない.
     101 *  そのため,BASEPRIを用いて擬似的にCPUロックフラグを実現する.
     102 *
     103 *  まず,CPUロック状態を管理すための変数(lock_flag)を用意する.
     104 *
     105 *  CPUロックフラグがクリアされている間は,BASEPRIをモデル上の割込み
     106 *  優先度マスクの値に設定する.この間は,モデル上の割込み優先度マス
     107 *  クは,BASEPRIを用いる.
    113108 *
    114  *  ‚»‚ê‚ɑ΂µ‚ÄCPUƒƒbƒNƒtƒ‰ƒO‚ªƒZƒbƒg‚³‚ê‚¢‚éŠÔ‚́CBASEPRI‚ðCƒJ[ƒl
    115  *  ƒ‹ŠÇ—ŠO‚Ì‚à‚Ì‚ðœ‚­‚·‚ׂĂ̊„ž‚Ý—v‹‚ðƒ}ƒXƒN‚·‚é’l(TIPM_LOCK)‚ƁC
    116  *  ƒ‚ƒfƒ‹ã‚ÌŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‚Ƃ̍‚‚¢•û‚ɐݒ肷‚éD‚±‚̊Ԃ̃‚ƒfƒ‹ã
    117  *  ‚ÌŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‚́C‚»‚Ì‚½‚߂̕ϐ”(saved_iipm, “à•”•\Œ»‚Å•ÛŽ)
    118  *  ‚ð—pˆÓ‚µ‚Ä•ÛŽ‚·‚éD
    119  */
    120 
    121 /*
    122  *  Š„ž‚Ý—Dæ“xƒ}ƒXƒN‚ÌŠO•”•\Œ»‚Æ“à•”•\Œ»‚Ì•ÏŠ·
    123  *
    124  *  ƒAƒZƒ“ƒuƒŠŒ¾Œê‚̃\[ƒXƒtƒ@ƒCƒ‹‚©‚çƒCƒ“ƒNƒ‹[ƒh‚·‚éê‡‚Ì‚½‚߂ɁC
    125  *  CAST‚ðŽg—p
    126  *  Š„ž‚Ý—Dæ“x‚̃rƒbƒg•(TBITW_IPRI)‚ª 8 ‚̏ꍇ‚́C“à•”—Dæ“x 255
    127  *  ‚́CŠO•”—Dæ“x -1 ‚ɑΉž‚·‚éD
    128  */
    129 #define EXT_IPM(iipm)   (CAST(PRI,((iipm >> (8 - TBITW_IPRI)) - (1 << TBITW_IPRI))))       /* “à•”•\Œ»‚ðŠO•”•\Œ»‚É */
    130 #define INT_IPM(ipm)    (((1 << TBITW_IPRI) - CAST(uint8_t, -(ipm)))  << (8 - TBITW_IPRI)) /* ŠO•”•\Œ»‚ð“à•”•\Œ»‚É */
    131 
    132 /*
    133  *  CPUƒƒbƒNó‘Ô‚Å‚ÌŠ„ž‚Ý—Dæ“xƒ}ƒXƒN
     109 *  それに対してCPUロックフラグがセットされいる間は,BASEPRIを,カーネ
     110 *  ル管理外のものを除くすべての割込み要求をマスクする値(TIPM_LOCK)と,
     111 *  モデル上の割込み優先度マスクとの高い方に設定する.この間のモデル上
     112 *  の割込み優先度マスクは,そのための変数(saved_iipm, 内部表現で保持)
     113 *  を用意して保持する.
     114 */
     115
     116/*
     117 *  割込み優先度マスクの外部表現と内部表現の変換
     118 *
     119 *  アセンブリ言語のソースファイルからインクルードする場合のために,
     120 *  CASTを使用
     121 *  割込み優先度のビット幅(TBITW_IPRI)が 8 の場合は,内部優先度 255
     122 *  は,外部優先度 -1 に対応する.
     123 */
     124#define EXT_IPM(iipm)   (CAST(PRI,((iipm >> (8 - TBITW_IPRI)) - (1 << TBITW_IPRI))))       /* 内部表現を外部表現に */
     125#define INT_IPM(ipm)    (((1 << TBITW_IPRI) - CAST(uint8_t, -(ipm)))  << (8 - TBITW_IPRI)) /* 外部表現を内部表現に */
     126
     127/*
     128 *  CPUロック状態での割込み優先度マスク
    134129 */
    135130#define TIPM_LOCK    TMIN_INTPRI
    136131
    137132/*
    138  *  CPUƒƒbƒNó‘Ô‚Å‚ÌŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‚Ì“à•”•\Œ»
    139  *
    140  *  TIPM_LOCK‚́CCPUƒƒbƒNó‘Ô‚Å‚ÌBASEPRI‚Ì’lDƒJ[ƒlƒ‹ŠÇ—ŠO‚Ì‚à‚Ì‚ð
    141  *  œ‚­‚·‚ׂĂ̊„ž‚Ý‚ðƒ}ƒXƒN‚·‚é’l‚É’è‹`‚·‚éD 
     133 *  CPUロック状態での割込み優先度マスクの内部表現
     134 *
     135 *  TIPM_LOCKは,CPUロック状態でのBASEPRIの値.カーネル管理外のものを
     136 *  除くすべての割込みをマスクする値に定義する. 
    142137 */
    143138#define IIPM_LOCK    INT_IPM(TIPM_LOCK)
    144139
    145140/*
    146  *  TIPM_ENAALLiŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‘S‰ðœj‚Ì“à•”•\Œ»
    147  *
    148  *  BASEPRI‚É '0' ‚ðÝ’è‚·‚邱‚ƂŁC‘SŠ„ž‚Ý‚ð‹–‰Â‚·‚éD
     141 *  TIPM_ENAALL(割込み優先度マスク全解除)の内部表現
     142 *
     143 *  BASEPRIに '0' を設定することで,全割込みを許可する.
    149144 */
    150145#define IIPM_ENAALL  (0)
     
    154149
    155150/*
    156  *  CPUƒƒbƒNƒtƒ‰ƒOŽÀŒ»‚Ì‚½‚߂̕ϐ”
     151 *  CPUロックフラグ実現のための変数
    157152 *
    158  *  ‚±‚ê‚ç‚̕ϐ”‚́CCPUƒƒbƒNó‘Ô‚ÌŽž‚̂ݏ‘‚«Š·‚¦‚Ä‚à‚æ‚¢‚Æ‚·‚éD
    159  *  ƒCƒ“ƒ‰ƒCƒ“ŠÖ”’†‚ŁCƒAƒNƒZƒX‚̏‡˜‚ª•Ï‰»‚µ‚È‚¢‚悤Cvolatile ‚ðŽw’èD
    160  */
    161 extern volatile bool_t  lock_flag;    /* CPUƒƒbƒNƒtƒ‰ƒO‚Ì’l‚ð•ÛŽ‚·‚é•Ï” */
    162 extern volatile uint32_t saved_iipm;  /* Š„ž‚Ý—Dæ“x‚ðƒ}ƒXƒN‚·‚é•Ï” */
    163 
    164 /*
    165  *  CPUƒƒbƒNó‘Ԃւ̈ڍs
    166  *
    167  *  BASEPRIiƒn[ƒhƒEƒFƒA‚ÌŠ„ž‚Ý—Dæ“xƒ}ƒXƒNj‚ðCsaved_iipm‚É•Û‘¶‚µC
    168  *  ƒJ[ƒlƒ‹ŠÇ—ŠO‚Ì‚à‚Ì‚ðœ‚­‚·‚ׂĂ̊„ž‚Ý‚ðƒ}ƒXƒN‚·‚é’liTIPM_LOCKj
    169  *  ‚ɐݒ肷‚éD‚Ü‚½Clock_flag‚ðtrue‚É‚·‚éD
    170  *
    171  *  BASEPRI‚ªCÅ‰‚©‚çTIPM_LOCK‚Æ“¯‚¶‚©‚»‚ê‚æ‚荂‚¢ê‡‚ɂ́C‚»‚ê‚ð
    172  *  saved_iipm‚É•Û‘¶‚·‚é‚݂̂ŁCTIPM_LOCK‚ɂ͐ݒ肵‚È‚¢D‚±‚ê‚́Cƒ‚ƒfƒ‹
    173  *  ã‚ÌŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‚ªCTIPM_LOCK‚Æ“¯‚¶‚©‚»‚ê‚æ‚荂‚¢ƒŒƒxƒ‹‚ɐݒè
    174  *  ‚³‚ê‚Ä‚¢‚éó‘Ô‚É‚ ‚½‚éD
    175  *
    176  *  ‚±‚̊֐”‚́CCPUƒƒbƒNó‘ԁilock_flag‚ªtrue‚̏ó‘ԁj‚ŌĂ΂ê‚邱‚Æ‚Í
    177  *  ‚È‚¢‚à‚Ì‚Æ‘z’肵‚Ä‚¢‚éD
     153 *  これらの変数は,CPUロック状態の時のみ書き換えてもよいとする.
     154 *  インライン関数中で,アクセスの順序が変化しないよう,volatile を指定.
     155 */
     156extern volatile bool_t  lock_flag;    /* CPUロックフラグの値を保持する変数 */
     157extern volatile uint32_t saved_iipm;  /* 割込み優先度をマスクする変数 */
     158
     159/*
     160 *  CPUロック状態への移行
     161 *
     162 *  BASEPRI(ハードウェアの割込み優先度マスク)を,saved_iipmに保存し,
     163 *  カーネル管理外のものを除くすべての割込みをマスクする値(TIPM_LOCK)
     164 *  に設定する.また,lock_flagをtrueにする.
     165 *
     166 *  BASEPRIが,最初からTIPM_LOCKと同じかそれより高い場合には,それを
     167 *  saved_iipmに保存するのみで,TIPM_LOCKには設定しない.これは,モデル
     168 *  上の割込み優先度マスクが,TIPM_LOCKと同じかそれより高いレベルに設定
     169 *  されている状態にあたる.
     170 *
     171 *  この関数は,CPUロック状態(lock_flagがtrueの状態)で呼ばれることは
     172 *  ないものと想定している.
    178173 */
    179174Inline void
     
    183178
    184179        /*
    185          *  current_iipm()‚Ì•Ô‚è’l‚𒼐Úsaved_iipm‚É•Û‘¶‚¹‚¸CˆêŽž•Ï”iipm
    186          *  ‚ð—p‚¢‚Ä‚¢‚é‚̂́Ccurrent_iipm()‚ðŒÄ‚ñ‚¾’¼Œã‚ÉŠ„ž‚Ý‚ª”­¶‚µC
    187          *  ‹N“®‚³‚ꂽŠ„ž‚ݏˆ—‚Åsaved_iipm‚ª•ÏX‚³‚ê‚é‰Â”\«‚ª‚ ‚邽‚ß‚Å
    188          *  ‚ ‚éD
     180         *  current_iipm()の返り値を直接saved_iipmに保存せず,一時変数iipm
     181         *  を用いているのは,current_iipm()を呼んだ直後に割込みが発生し,
     182         *  起動された割込み処理でsaved_iipmが変更される可能性があるためで
     183         *  ある.
    189184         */
    190185        iipm = get_basepri();
     
    192187        saved_iipm = iipm;
    193188        lock_flag = true;
    194         /* ƒNƒŠƒeƒBƒJƒ‹ƒZƒNƒVƒ‡ƒ“‚Ì‘OŒã‚сƒ‚ƒŠ‚ª‘‚«Š·‚í‚é‰Â”\«‚ª‚ ‚é */
     189        /* クリティカルセクションの前後でメモリが書き換わる可能性がある */
    195190        Asm("":::"memory");
    196191}
     
    200195
    201196/*
    202  *  CPUƒƒbƒNó‘Ԃ̉ðœ
    203  *
    204  *  lock_flag‚ðfalse‚É‚µCIPMiƒn[ƒhƒEƒFƒA‚ÌŠ„ž‚Ý—Dæ“xƒ}ƒXƒNj‚ðC
    205  *  saved_iipm‚É•Û‘¶‚µ‚½’l‚É–ß‚·D
    206  *
    207  *  ‚±‚̊֐”‚́CCPUƒƒbƒNó‘ԁilock_flag‚ªtrue‚̏ó‘ԁj‚ł̂݌Ă΂ê‚é‚à
    208  *  ‚Ì‚Æ‘z’肵‚Ä‚¢‚éD
     197 *  CPUロック状態の解除
     198 *
     199 *  lock_flagをfalseにし,IPM(ハードウェアの割込み優先度マスク)を,
     200 *  saved_iipmに保存した値に戻す.
     201 *
     202 *  この関数は,CPUロック状態(lock_flagがtrueの状態)でのみ呼ばれるも
     203 *  のと想定している.
    209204 */
    210205Inline void
    211206x_unlock_cpu(void)
    212207{
    213         /* ƒNƒŠƒeƒBƒJƒ‹ƒZƒNƒVƒ‡ƒ“‚Ì‘OŒã‚сƒ‚ƒŠ‚ª‘‚«Š·‚í‚é‰Â”\«‚ª‚ ‚é */
     208        /* クリティカルセクションの前後でメモリが書き換わる可能性がある */
    214209        Asm("":::"memory");
    215210        lock_flag = false;
     
    221216
    222217/*
    223  *  CPUƒƒbƒNó‘Ô‚ÌŽQÆ
     218 *  CPUロック状態の参照
    224219 */
    225220Inline bool_t
     
    234229
    235230/*
    236  * iƒ‚ƒfƒ‹ã‚́jŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‚̐ݒè
    237  *
    238  *  CPUƒƒbƒNƒtƒ‰ƒO‚ªƒNƒŠƒA‚³‚ê‚Ä‚¢‚鎞‚́Cƒn[ƒhƒEƒFƒA‚ÌŠ„ž‚Ý—Dæ“xƒ}
    239  *  ƒXƒN‚ðÝ’è‚·‚éDCPUƒƒbƒNƒtƒ‰ƒO‚ªƒZƒbƒg‚³‚ê‚Ä‚¢‚鎞‚́Csaved_iipm
    240  *  ‚ðÝ’肵C‚³‚ç‚ɁCƒn[ƒhƒEƒFƒA‚ÌŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‚ðCÝ’肵‚悤‚Æ
    241  *  ‚µ‚½iƒ‚ƒfƒ‹ã‚́jŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‚ÆTIPM_LOCK‚̍‚‚¢•û‚ɐݒ肷‚éD
     231 * (モデル上の)割込み優先度マスクの設定
     232 *
     233 *  CPUロックフラグがクリアされている時は,ハードウェアの割込み優先度マ
     234 *  スクを設定する.CPUロックフラグがセットされている時は,saved_iipm
     235 *  を設定し,さらに,ハードウェアの割込み優先度マスクを,設定しようと
     236 *  した(モデル上の)割込み優先度マスクとTIPM_LOCKの高い方に設定する.
    242237 */
    243238Inline void
     
    263258
    264259/*
    265  * iƒ‚ƒfƒ‹ã‚́jŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‚ÌŽQÆ
    266  *
    267  *  CPUƒƒbƒNƒtƒ‰ƒO‚ªƒNƒŠƒA‚³‚ê‚Ä‚¢‚鎞‚̓n[ƒhƒEƒFƒA‚ÌŠ„ž‚Ý—Dæ“xƒ}
    268  *  ƒXƒN‚ðCƒZƒbƒg‚³‚ê‚Ä‚¢‚鎞‚Ísaved_iipm‚ðŽQÆ‚·‚éD
     260 * (モデル上の)割込み優先度マスクの参照
     261 *
     262 *  CPUロックフラグがクリアされている時はハードウェアの割込み優先度マ
     263 *  スクを,セットされている時はsaved_iipmを参照する.
    269264 */
    270265Inline PRI
     
    292287
    293288/*
    294  *  SVCƒnƒ“ƒhƒ‰iprc_support.Sj
     289 *  SVCハンドラ(prc_support.S)
    295290 */
    296291extern void svc_handler(void);
    297292
    298293/*
    299  *  ƒXƒ^[ƒgƒAƒbƒvƒ‹[ƒ`ƒ“istart.Sj
     294 *  スタートアップルーチン(start.S)
    300295 */
    301296extern void _start(void);
    302297
    303298/*
    304  *  ƒfƒBƒXƒpƒbƒ`ƒƒ‚Ì“®ìŠJŽniprc_support.Sj
    305  *
    306  *  start_dispatch‚́CƒJ[ƒlƒ‹‹N“®Žž‚ɌĂяo‚·‚ׂ«‚à‚̂ŁC‚·‚ׂĂ̊„ž
    307  *  ‚Ý‚ð‹ÖŽ~‚µ‚½ó‘ԁiŠ„ž‚݃ƒbƒNó‘Ô‚Æ“¯“™‚̏ó‘ԁj‚ŌĂяo‚³‚È‚¯‚ê‚Î
    308  *  ‚È‚ç‚È‚¢D
     299 *  ディスパッチャの動作開始(prc_support.S)
     300 *
     301 *  start_dispatchは,カーネル起動時に呼び出すべきもので,すべての割込
     302 *  みを禁止した状態(割込みロック状態と同等の状態)で呼び出さなければ
     303 *  ならない.
    309304 */
    310305extern void start_dispatch(void) NoReturn;
     
    312307
    313308/*
    314  *  ƒJ[ƒlƒ‹‚̏I—¹ˆ—‚̌ďo‚µiprc_support.Sj
    315  *
    316  *  call_exit_kernel‚́CƒJ[ƒlƒ‹‚̏I—¹Žž‚ɌĂяo‚·‚ׂ«‚à‚̂ŁC”ñƒ^ƒXƒN
    317  *  ƒRƒ“ƒeƒLƒXƒg‚ɐ؂芷‚¦‚āCƒJ[ƒlƒ‹‚̏I—¹ˆ—iexit_kernelj‚ðŒÄ‚яo
    318  *  ‚·D
     309 *  カーネルの終了処理の呼出し(prc_support.S)
     310 *
     311 *  call_exit_kernelは,カーネルの終了時に呼び出すべきもので,非タスク
     312 *  コンテキストに切り換えて,カーネルの終了処理(exit_kernel)を呼び出
     313 *  す.
    319314 */
    320315extern void call_exit_kernel(void) NoReturn;
    321316
    322317/*
    323  *  ƒAƒCƒhƒ‹ƒ‹[ƒv‚ÌŽÀ‘•
    324  *
    325  *  ’P‚ÉCPUƒƒbƒNó‘Ô‚ÆCPUƒƒbƒN‰ðœó‘Ô‚ðŒÄ‚яo‚·ŽÀ‘•‚Æ‚·‚éD
    326  *  ƒXƒŠ[ƒvƒ‚[ƒh‚É“ü‚ê‚éê‡‚Í–{ˆ—‚ðwfi–½—ß‚ð—p‚¢‚ď‘‚«Š·‚¦‚ê‚Ηǂ¢D
     318 *  アイドルループの実装
     319 *
     320 *  単にCPUロック状態とCPUロック解除状態を呼び出す実装とする.
     321 *  スリープモードに入れる場合は本処理をwfi命令を用いて書き換えれば良い.
    327322 */
    328323Inline void
     
    330325{
    331326        lock_flag = false;
    332         /* CPUƒAƒ“ƒƒbƒN => CPUƒƒbƒN  */
     327        /* CPUアンロック => CPUロック  */
    333328        Asm("\tmsr BASEPRI , %0" : : "r"(0) : "memory");
    334329        Asm("\tmsr BASEPRI , %0" : : "r"(IIPM_LOCK) : "memory");
     
    337332
    338333/*
    339  *  Š„ž‚ݔԍ†EŠ„ž‚݃nƒ“ƒhƒ‰”ԍ†
    340  *
    341  *  Š„ž‚݃nƒ“ƒhƒ‰”ԍ†(inhno)‚ÆŠ„ž‚ݔԍ†(intno)‚́CŠ„‚荞‚Ý”­¶Žž‚É
    342  *  EPSR‚ɐݒ肳‚ê‚é—áŠO”ԍ†‚Æ‚·‚éD
    343  */
    344 
    345 /*
    346  *  Š„ž‚ݔԍ†‚͈̔͂̔»’è
     334 *  割込み番号・割込みハンドラ番号
     335 *
     336 *  割込みハンドラ番号(inhno)と割込み番号(intno)は,割り込み発生時に
     337 *  EPSRに設定される例外番号とする.
     338 */
     339
     340/*
     341 *  割込み番号の範囲の判定
    347342 */
    348343#define VALID_INTNO(intno)           ((TMIN_INTNO <= (intno)) && ((intno) <= TMAX_INTNO))
     
    351346
    352347/*
    353  *  Š„ž‚݃nƒ“ƒhƒ‰‚̐ݒè
    354  *
    355  *  ƒxƒNƒgƒ‹”ԍ†inhno‚ÌŠ„ž‚݃nƒ“ƒhƒ‰‚Ì‹N“®”Ô’nint_entry‚ɐݒ肷‚éDŠ„ž‚Ý
    356  *  ƒnƒ“ƒhƒ‰ƒe[ƒuƒ‹
     348 *  割込みハンドラの設定
     349 *
     350 *  ベクトル番号inhnoの割込みハンドラの起動番地int_entryに設定する.割込み
     351 *  ハンドラテーブル
    357352 */
    358353Inline void
    359354x_define_inh(INHNO inhno, FP int_entry)
    360355{
    361         /* “Á‚ɍs‚¤ˆ—‚Í‚È‚¢ */
    362 }
    363 
    364 /*
    365  *  Š„ž‚݃nƒ“ƒhƒ‰‚̏o“üŒûˆ—‚̐¶¬ƒ}ƒNƒ
     356        /* 特に行う処理はない */
     357}
     358
     359/*
     360 *  割込みハンドラの出入口処理の生成マクロ
    366361 *
    367362 */
     
    370365
    371366/*
    372  *  Š„ž‚Ý—v‹‹ÖŽ~ƒtƒ‰ƒO
    373  */
    374 
    375 /*
    376  *  Š„ž‚Ý‘®«‚ªÝ’肳‚ê‚Ä‚¢‚é‚©‚ð”»•Ê‚·‚邽‚߂̕ϐ”ikernel_cfg.cj
     367 *  割込み要求禁止フラグ
     368 */
     369
     370/*
     371 *  割込み属性が設定されているかを判別するための変数(kernel_cfg.c)
    377372 */
    378373extern const uint32_t   bitpat_cfgint[];
    379374
    380375/*
    381  *  Š„ž‚Ý—v‹‹ÖŽ~ƒtƒ‰ƒO‚̃Zƒbƒg
    382  *
    383  *  Š„ž‚Ý‘®«‚ªÝ’肳‚ê‚Ä‚¢‚È‚¢Š„ž‚Ý—v‹ƒ‰ƒCƒ“‚ɑ΂µ‚ÄŠ„ž‚Ý—v‹‹ÖŽ~
    384  *  ƒtƒ‰ƒO‚ðƒNƒŠƒA‚µ‚悤‚Æ‚µ‚½ê‡‚ɂ́Cfalse‚ð•Ô‚·D 
     376 *  割込み要求禁止フラグのセット
     377 *
     378 *  割込み属性が設定されていない割込み要求ラインに対して割込み要求禁止
     379 *  フラグをクリアしようとした場合には,falseを返す. 
    385380 */
    386381Inline bool_t
     
    390385
    391386        /*
    392          *  Š„ž‚Ý‘®«‚ªÝ’肳‚ê‚Ä‚¢‚È‚¢ê‡
     387         *  割込み属性が設定されていない場合
    393388         */
    394389        if ((bitpat_cfgint[intno >> 5] & (1 << (intno & 0x1f))) == 0x00) {
     
    412407
    413408/*
    414  *  Š„ž‚Ý—v‹‹ÖŽ~ƒtƒ‰ƒO‚̉ðœ
    415  *
    416  *  Š„ž‚Ý‘®«‚ªÝ’肳‚ê‚Ä‚¢‚È‚¢Š„ž‚Ý—v‹ƒ‰ƒCƒ“‚ɑ΂µ‚ÄŠ„ž‚Ý—v‹‹ÖŽ~
    417  *  ƒtƒ‰ƒO‚ðƒNƒŠƒA‚µ‚悤‚Æ‚µ‚½ê‡‚ɂ́Cfalse‚ð•Ô‚·D
     409 *  割込み要求禁止フラグの解除
     410 *
     411 *  割込み属性が設定されていない割込み要求ラインに対して割込み要求禁止
     412 *  フラグをクリアしようとした場合には,falseを返す.
    418413 */
    419414Inline bool_t
     
    423418
    424419        /*
    425          *  Š„ž‚Ý‘®«‚ªÝ’肳‚ê‚Ä‚¢‚È‚¢ê‡
     420         *  割込み属性が設定されていない場合
    426421         */
    427422        if ((bitpat_cfgint[intno >> 5] & (1 << (intno & 0x1f))) == 0x00) {
     
    458453
    459454/*
    460  *  Š„ž‚Ý—v‹ƒ‰ƒCƒ“‚Ì‘®«‚̐ݒè
     455 *  割込み要求ラインの属性の設定
    461456 */
    462457extern void x_config_int(INTNO intno, ATR intatr, PRI intpri);
    463458
    464459/*
    465  *  Š„ž‚݃nƒ“ƒhƒ‰“üŒû‚Å•K—v‚ÈIRC‘€ì
     460 *  割込みハンドラ入口で必要なIRC操作
    466461 */
    467462Inline void
    468463i_begin_int(INTNO intno)
    469464{
    470         /* “Á‚ɍs‚¤ˆ—‚Í‚È‚¢ */
    471 }
    472 
    473 /*
    474  *  Š„ž‚݃nƒ“ƒhƒ‰‚̏oŒû‚Å•K—v‚ÈIRC‘€ì
     465        /* 特に行う処理はない */
     466}
     467
     468/*
     469 *  割込みハンドラの出口で必要なIRC操作
    475470 */
    476471Inline void
    477472i_end_int(INTNO intno)
    478473{
    479         /* “Á‚ɍs‚¤ˆ—‚Í‚È‚¢ */
    480 }
    481 
    482 /*
    483  *  CPU—áŠOƒnƒ“ƒhƒ‰ŠÖŒW
     474        /* 特に行う処理はない */
     475}
     476
     477/*
     478 *  CPU例外ハンドラ関係
    484479 */
    485480
    486481/*
    487  *  CPU—áŠOƒnƒ“ƒhƒ‰”ԍ†
     482 *  CPU例外ハンドラ番号
    488483 */
    489484#define VALID_EXCNO_DEFEXC(excno)    (TMIN_EXCNO <= (excno) && (excno) <= TMAX_EXCNO)
    490485
    491486/*
    492  *  CPU—áŠOƒnƒ“ƒhƒ‰‚Ì‹–‰Â
     487 *  CPU例外ハンドラの許可
    493488 */
    494489extern void enable_exc(EXCNO excno);
    495490
    496491/*
    497  *  CPU—áŠOƒnƒ“ƒhƒ‰‚Ì‹ÖŽ~
     492 *  CPU例外ハンドラの禁止
    498493 */
    499494extern void disable_exc(EXCNO excno);
    500495
    501496/*
    502  *  CPU—áŠOƒnƒ“ƒhƒ‰‚̐ݒè
     497 *  CPU例外ハンドラの設定
    503498 */
    504499Inline void
     
    506501{
    507502        /*
    508          *  ˆê•”‚Ì—áŠO‚Í‹–‰Â‚ðs‚¤•K—v‚ª‚ ‚é
     503         *  一部の例外は許可を行う必要がある
    509504         */
    510505        enable_exc(excno);
     
    512507
    513508/*
    514  *  CPU—áŠOƒnƒ“ƒhƒ‰‚Ì“üŒûˆ—‚̐¶¬ƒ}ƒNƒ
     509 *  CPU例外ハンドラの入口処理の生成マクロ
    515510 */
    516511#define EXC_ENTRY(excno, exchdr)    exchdr
     
    519514
    520515/*
    521  *  CPU—áŠOƒGƒ“ƒgƒŠiprc_support.Sj
     516 *  CPU例外エントリ(prc_support.S)
    522517 */
    523518extern void exc_entry(void);
    524519
    525520/*
    526  *  Š„ž‚݃Gƒ“ƒgƒŠiprc_support.Sj
     521 *  割込みエントリ(prc_support.S)
    527522 */
    528523extern void int_entry(void);
    529524
    530525/*
    531  *  ƒvƒƒZƒbƒTˆË‘¶‚̏‰Šú‰»
     526 *  プロセッサ依存の初期化
    532527 */
    533528extern void prc_initialize(void);
    534529
    535530/*
    536  *  ƒvƒƒZƒbƒTˆË‘¶‚̏I—¹Žžˆ—
     531 *  プロセッサ依存の終了時処理
    537532 */
    538533extern void prc_terminate(void) NoReturn;
    539534
    540535/*
    541  *  atexit‚̏ˆ—‚ƃfƒXƒgƒ‰ƒNƒ^‚ÌŽÀs
     536 *  atexitの処理とデストラクタの実行
    542537 */
    543538Inline void
     
    548543
    549544        /*
    550          *  software_term_hook‚ւ̃|ƒCƒ“ƒ^‚ðCˆê’UvolatileŽw’è‚Ì‚ ‚éfp‚É‘ã
    551          *  “ü‚µ‚Ä‚©‚çŽg‚¤‚̂́C0‚Æ‚Ì”äŠr‚ªÅ“K‰»‚ō폜‚³‚ê‚È‚¢‚悤‚É‚·‚邽
    552          *  ‚ß‚Å‚ ‚éD
     545         *  software_term_hookへのポインタを,一旦volatile指定のあるfpに代
     546         *  入してから使うのは,0との比較が最適化で削除されないようにするた
     547         *  めである.
    553548         */
    554549        if (fp != 0) {
     
    558553
    559554/*
    560  * “o˜^‚³‚ê‚Ä‚¢‚È‚¢—áŠO‚ª”­¶‚·‚é‚ƌĂяo‚³‚ê‚é
     555 * 登録されていない例外が発生すると呼び出される
    561556 */
    562557extern void default_exc_handler(void *p_excinf);
    563558
    564559/*
    565  * –¢“o˜^‚ÌŠ„ž‚Ý‚ª”­¶‚µ‚½ê‡‚ɌĂяo‚³‚ê‚é
     560 * 未登録の割込みが発生した場合に呼び出される
    566561 */
    567562extern void default_int_handler(void *p_excinf);
  • ssp_qb_r5f100le_cs/trunk/arch/arm_m_gcc/prc_def.csv

    • Property svn:mime-type set to text/plain; charset=shift_jis
  • ssp_qb_r5f100le_cs/trunk/arch/arm_m_gcc/prc_design.txt

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    11=====================================================================
    2                          ARM-MƒvƒƒZƒbƒTˆË‘¶•”ÝŒvƒƒ‚
     2                         ARM-Mプロセッサ依存部設計メモ
    33                                  Last Modified: 23 Aug 2008 21:54:54
    44=====================================================================
    55
    6 ›‚±‚̃hƒLƒ
    7 ƒƒ“ƒg‚̈ʒu‚¯
    8 
    9 ‚±‚̃hƒLƒ
    10 ƒƒ“ƒg‚́CTOPPERS/ASPƒJ[ƒlƒ‹‚ðARMvX-MƒvƒƒZƒbƒT‚ɈڐA‚·‚邽‚ß
    11 ‚̐݌vƒƒ‚‚Å‚ ‚éD
    12 
    13 
    14 ›ARMVx-M‚ÌŽd—l‚Ü‚Æ‚ß
    15 
    16 ARMvX-M‚ÌŽd—l‚Ì‚¤‚¿CƒJ[ƒlƒ‹‚̐݌v‚ÉŠÖŒW‚·‚鎖€‚ɂ‚¢‚Ä‚Ü‚Æ‚ß‚éD
    17 
    18 œƒŒƒWƒXƒ^
    19 
    20 ”Ä—pƒŒƒWƒXƒ^‚ÍR0`R15‚Ì16Ží—Þ‚ ‚èCR13‚Ì‚Ý‚ª2ƒoƒ“ƒN\¬iPSP,MSPj‚Æ‚È
    21 ‚Á‚Ä‚¢‚éDR15‚ÍPC, R14‚̓Šƒ“ƒNƒŒƒWƒXƒ^iLRj‚Æ‚È‚Á‚Ä‚¢‚éDR0`R3,R12‚Í
    22 ƒXƒNƒ‰ƒbƒ`ƒŒƒWƒXƒ^‚Å‚ ‚éD
    23 
    24 œƒR[ƒŠƒ“ƒOƒRƒ“ƒxƒ“ƒVƒ‡ƒ“
    25 
    26 R0`R4‚ªˆø”C‚»‚êˆÈã‚̓Xƒ^ƒbƒND–ß‚è’l‚́CR0`R1‚ÉŠi”[‚³‚ê‚éD(ARM‚É
    27 ‚æ‚è‹K’肳‚ê‚Ä‚¢‚邽‚߁CƒRƒ“ƒpƒCƒ‰‚Ɉˑ¶‚¹‚¸‚±‚̃‹[ƒ‹‚Æ‚È‚éD)
    28 
    29 œCONTROLƒŒƒWƒXƒ^
    30 
    31 PSP,MSP‚̐؂è‘Ö‚¦CPrivilage‚ÆUserƒ‚[ƒh‚̃ŒƒWƒXƒ^D•ÏXŒã‚́CƒCƒ“ƒXƒg
    32 ƒ‰ƒNƒVƒ‡ƒ“ƒoƒbƒtƒ@ƒtƒ‰ƒbƒVƒ
    33 –½—ß‚ðŽÀs‚·‚é•K—v‚ª‚ ‚éiisbjDCONTROLƒŒ
    34 ƒWƒXƒ^‚̏ڍׂ́CARMv7-M Architecture Application Level Reference
    35 Manual ‚Ì B1-9 ‚ðŽQÆ‚Ì‚±‚ƁD
    36 
    37 œŠ„ž‚݃xƒNƒ^
    38 
    39 ƒxƒNƒ^ƒe[ƒuƒ‹Œ^‚ŁCƒxƒNƒ^ƒe[ƒuƒ‹‚̃AƒhƒŒƒX‚́CƒŠƒZƒbƒgŽž‚Í0x00‚ŁC
    40 Vector Table Offset Registeriƒƒ‚ƒŠƒ}ƒbƒvƒhƒŒƒWƒXƒ^j ‚𑀍삷‚邱‚Æ
    41 ‚ŁC”CˆÓ‚̃AƒhƒŒƒX‚É”z’u‰Â”\‚Å‚ ‚éD
    42 
    43 œ—Dæ“x
    44 
    45 ’l‚ª¬‚³‚¢•û‚ª‚—Dæ“x‚Æ‚È‚éD
    46 
    47 —Dæ“x‚͍őå8bit‚Å‚ ‚èCSoC–ˆ‚ÉŽÀ‘•‚³‚ê‚Ä‚¢‚éƒrƒbƒg•‚ªˆÙ‚È‚éDŽÀ‘•‚³
    48 ‚ê‚éƒrƒbƒg‚ª8bitˆÈ‰º‚̏ꍇ‚́CLSB‚©‚ç–³Œø‚É‚È‚éD—Ⴆ‚΁CŽÀ‘•‚³‚ê‚Ä‚¢
    49 ‚éƒrƒbƒg•‚ª7bit‚̏ꍇ‚́Cƒrƒbƒg0‚ª–³Œø‚Æ‚È‚éD
    50 
    51 —Dæ“x‚̃rƒbƒgƒtƒB[ƒ‹ƒh‚ÌLSB‚©‚琔ƒrƒbƒg‚ðƒTƒu—Dæ“x‚ƌĂԃtƒB[ƒ‹ƒh
    52 ‚ɐݒ肷‚邱‚Æ‚ª‰Â”\‚Å‚ ‚éDŽc‚è‚̏ãˆÊƒrƒbƒg‚ðƒvƒŠƒGƒ“ƒvƒVƒ‡ƒ“—Dæ“x‚Æ
    53 ŒÄ‚ԁDƒvƒŠƒGƒ“ƒvƒVƒ‡ƒ“—Dæ“x‚ª“¯‚¶‚ŁCƒTƒu—Dæ“x‚ªˆÙ‚È‚é—Dæ“x‚̃Oƒ‹[
    54 ƒv‚́C‚¨ŒÝ‚¢‚ðƒvƒŠƒGƒ“ƒvƒg‚·‚邱‚Æ‚ª‚Å‚«‚È‚¢D
    55 
    56 Reset,NMI,Hard Fault ˆÈŠO‚Ì—áŠO‚ÍŠ„ž‚Ý‚Æ“¯—l‚É—Dæ“x‚ªÝ’è‰Â”\‚Å‚ ‚èC
    57 Š„ž‚݃}ƒXƒN‹@”\‚É‚æ‚èC”­¶‚ð‹ÖŽ~‚·‚邱‚Æ‚ª‰Â”\‚Å‚ ‚éD
    58 
    59 œCPUƒ‚[ƒh
    60 
    61 ƒvƒƒZƒbƒT‚́CThreadƒ‚[ƒh‚à‚µ‚­‚ÍHandlerƒ‚[ƒh‚Ì‚¢‚¸‚ê‚©‚̃‚[ƒh‚Æ‚È
    62 ‚éD
    63 
    64 œƒŠƒZƒbƒgŽž‚̏ó‘Ô
    65 
    66 ƒŠƒZƒbƒgŽž‚ÍThreadƒ‚[ƒhCMSP‚ª—LŒø‚Æ‚È‚Á‚Ä‚¢‚éD
    67 
    68 œHandlerƒ‚[ƒh
    69 
    70 —áŠO/Š„ž‚Ý‚ðŽó‚¯•t‚¯‚é‚Æ‘JˆÚ‚·‚郂[ƒhDŽó‚¯•t‚¯‚½—áŠO/Š„ž‚Ý‚Ì—áŠO”Ô
    71 †‚ªCIPSR‚ɃZƒbƒg‚³‚ê‚éD—áŠO”ԍ†‚́CTRM‚Å’è‚ß‚ç‚ê‚Ä‚¢‚é”ԍ†‚Å‚ ‚éD
    72 
    73         —áŠO              —áŠO”ԍ†
     6○このドキュメントの位置づけ
     7
     8このドキュメントは,TOPPERS/ASPカーネルをARMvX-Mプロセッサに移植するため
     9の設計メモである.
     10
     11
     12○ARMVx-Mの仕様まとめ
     13
     14ARMvX-Mの仕様のうち,カーネルの設計に関係する事項についてまとめる.
     15
     16●レジスタ
     17
     18汎用レジスタはR0〜R15の16種類あり,R13のみが2バンク構成(PSP,MSP)とな
     19っている.R15はPC, R14はリンクレジスタ(LR)となっている.R0〜R3,R12は
     20スクラッチレジスタである.
     21
     22●コーリングコンベンション
     23
     24R0〜R4が引数,それ以上はスタック.戻り値は,R0〜R1に格納される.(ARMに
     25より規定されているため,コンパイラに依存せずこのルールとなる.)
     26
     27●CONTROLレジスタ
     28
     29PSP,MSPの切り替え,PrivilageとUserモードのレジスタ.変更後は,インスト
     30ラクションバッファフラッシュ命令を実行する必要がある(isb).CONTROLレ
     31ジスタの詳細は,ARMv7-M Architecture Application Level Reference
     32Manual の B1-9 を参照のこと.
     33
     34●割込みベクタ
     35
     36ベクタテーブル型で,ベクタテーブルのアドレスは,リセット時は0x00で,
     37Vector Table Offset Register(メモリマップドレジスタ) を操作すること
     38で,任意のアドレスに配置可能である.
     39
     40●優先度
     41
     42値が小さい方が高優先度となる.
     43
     44優先度は最大8bitであり,SoC毎に実装されているビット幅が異なる.実装さ
     45れるビットが8bit以下の場合は,LSBから無効になる.例えば,実装されてい
     46るビット幅が7bitの場合は,ビット0が無効となる.
     47
     48優先度のビットフィールドのLSBから数ビットをサブ優先度と呼ぶフィールド
     49に設定することが可能である.残りの上位ビットをプリエンプション優先度と
     50呼ぶ.プリエンプション優先度が同じで,サブ優先度が異なる優先度のグルー
     51プは,お互いをプリエンプトすることができない.
     52
     53Reset,NMI,Hard Fault 以外の例外は割込みと同様に優先度が設定可能であり,
     54割込みマスク機能により,発生を禁止することが可能である.
     55
     56●CPUモード
     57
     58プロセッサは,ThreadモードもしくはHandlerモードのいずれかのモードとな
     59る.
     60
     61●リセット時の状態
     62
     63リセット時はThreadモード,MSPが有効となっている.
     64
     65●Handlerモード
     66
     67例外/割込みを受け付けると遷移するモード.受け付けた例外/割込みの例外番
     68号が,IPSRにセットされる.例外番号は,TRMで定められている番号である.
     69
     70        例外              例外番号
    7471  Reset                      1
    7572  Non-makable Interrupt      2
     
    8683  ..
    8784
    88 —áŠO/Š„ž‚Ý‚ðŽó‚¯•t‚¯‚é‚ƁCŽó‚¯•t‚¯‚½—áŠO/Š„ž‚Ý‚Ì—Dæ“xˆÈ‰º‚Ì—áŠO/Š„
    89 ž‚Ý‚ð‹ÖŽ~‚·‚éD‚±‚Ì—Dæ“xƒ}ƒXƒN‚ð"NVIC—Dæ“xƒ}ƒXƒN"‚ƌĂԁD‚±‚Ì—Dæ“x
    90 ‚́Cƒ\ƒtƒgƒEƒFƒA‚©‚ç•ÏX‚·‚邱‚Æ‚ª‚Å‚«‚¸C—áŠO/Š„ž‚݂̃Šƒ^[ƒ“‚É‚æ‚è
    91 Š„ž‚Ý‘O‚Ì’l‚ÉŽ©“®“I‚É–ß‚éD
    92 
    93 œƒXƒ^ƒbƒNƒ|ƒCƒ“ƒ^iPSP‚ÆMSPj
    94 
    95 ƒXƒ^ƒbƒNƒ|ƒCƒ“ƒ^‚́CPSP‚ÆMSP‚ª‚ ‚èC”r‘¼“I‚ÉŽg—p‰Â”\‚Å‚ ‚éDHandlerƒ‚
    96 [ƒh‚Å‚ÍMSP‚Ì‚ÝŽg—p‰Â”\‚Å‚ ‚èCThreadƒ‚[ƒh‚Å‚ÍCONTROLƒŒƒWƒXƒ^‚Å‘I‘ð‰Â
    97 ”\‚Å‚ ‚éDCONTROLƒŒƒWƒXƒ^‚Ì1ƒrƒbƒg–Ú‚ðƒZƒbƒg‚·‚é‚ÆPSP‚ª—LŒø‚ɁCƒNƒŠƒA
    98 ‚·‚é‚ƁCMSP‚ª—LŒø‚É‚È‚éD
    99 
    100 œThreadƒ‚[ƒh‚ÆHandlerƒ‚[ƒh‚Ì‘JˆÚ
    101 
    102 Threadƒ‚[ƒh‚©‚çHandlerƒ‚[ƒh‚Ö‚Ì‘JˆÚ‚́C—áŠO/Š„ž‚Ý‚ðŽó‚¯•t‚¯‚邱‚Æ‚Å
    103 ”­¶‚·‚éDˆê•ûCHandlerƒ‚[ƒh‚©‚çThreadƒ‚[ƒh‚Ö‚Ì‘JˆÚ‚́CPC‚É
    104 EXC_RETURN(0xfffffffx)‚Ì’l‚ðÝ’è‚·‚邱‚Æ‚É‚æ‚ès‚¤i—áŠOƒŠƒ^[ƒ“ˆ—‚Æ
    105 ŒÄ‚ԁjDEXC_RETURN‚̉ºˆÊ4bit‚É‚æ‚èC‘JˆÚæ‚̃‚[ƒh‚âŽg—p‚·‚éƒXƒ^ƒbƒNƒ|
    106 ƒCƒ“ƒ^‚ð•ÏX‰Â”\‚Å‚ ‚éD—áŠOƒŠƒ^[ƒ“‚É‚æ‚èCPRIMASK‚âBASEPRI‚Ì’l‚͕ω»
    107 ‚µ‚È‚¢Dˆê•ûCFAULTMASK‚Ì’l‚Í'0'‚ɃNƒŠƒA‚³‚¹‚éD
    108 
    109 œEXC_RETURN
    110 
    111 —áŠO/Š„ž‚ÝŽó•t‚¯Žž‚Élr‚ɐݒ肳‚ê‚é’lDƒrƒbƒg31`4ƒrƒbƒg‚Í‘S‚Ä'1'‚ŁC
    112 ‰ºˆÊ4bit‚́CŽó•t‚¯Žž‚ÌCPUƒ‚[ƒh‚âƒXƒ^ƒbƒN‚𔽉f‚µ‚½’l‚Æ‚È‚Á‚Ä‚¢‚éD
    113 
    114  0b0001 : Handlerƒ‚[ƒh
    115  0b1001 : Threadƒ‚[ƒh with MSP
    116  0b1101 : Threadƒ‚[ƒh with PSP
    117 
    118 œThreadƒ‚[ƒh‚ÆHandlerƒ‚[ƒh‚Ì”»’è
    119 
    120 Œ»ó‚̃‚[ƒh‚ð”»’è‚·‚é‚ɂ́CIPSR‚ðŒ©‚ÄC'0'‚È‚çThreadƒ‚[ƒhC‚»‚êˆÈŠO
    121 ‚È‚çCHandlerƒ‚[ƒh‚Æ‚È‚éD
    122 
    123 œBASEPRIƒŒƒWƒXƒ^
    124 
    125 Ý’肵‚½—Dæ“xˆÈ‰º‚Ì—Dæ“x‚ÌŠ„ž‚Ý‚ÌŽó•t‚ð‹ÖŽ~‚·‚éD‚±‚Ì—Dæ“xƒ}ƒXƒN‚ð
    126 "BASEPRI—Dæ“xƒ}ƒXƒN"‚ƌĂԁD'0'‚ðÝ’è‚·‚é‚ƁC‘S‚Ä‚ÌŠ„ž‚Ý‚ð‹–‰Â‚·‚éD
    127 —áŠO/Š„ž‚Ý‚ÌŽó•t‚ƃŠƒ^[ƒ“‚É‚æ‚è•Ï‰»‚µ‚È‚¢D—áŠO/Š„ž‚݂ɑ΂·‚銄ž‚Ý
    128 —Dæ“xƒ}ƒXƒN‚́CNVIC—Dæ“xƒ}ƒXƒN‚ÆBASEPRI‚̐ݒè’l‚̍‚‚¢•ûi’l‚ª¬‚³‚¢
    129 •ûj‚Æ‚È‚éD
    130 
    131 œFAULTMASK
    132 
    133 FAULTMASK‚Í'1'‚ðƒZƒbƒg‚·‚邱‚Æ‚É‚æ‚èCNMIˆÈŠO‚Ì‘S‚Ä‚ÌŠ„ž‚Ý‚ð‹ÖŽ~‚·‚éD
    134 FAULTMASK‚́C—áŠO‚̃Šƒ^[ƒ“ˆ—‚É‚æ‚è'0'‚ɃNƒŠƒA‚³‚¹‚éD
    135 
    136 œPRIMASK‚ÆWFI
    137 
    138 PRIMASK‚ð'1'‚ɐݒ肷‚é‚ƁCNMI ‚Æ Hardware Fault ˆÈŠO‚Ì—áŠO/Š„ž‚Ý‚ð‹Ö
    139 Ž~‚·‚éDPRIMASK‚ÍŠ„ž‚Ý‚Ì‹–‰Â‚ÆŠ„ž‚Ý‘Ò‚¿‚ðƒAƒgƒ~ƒbƒN‚ɍs‚¤‚½‚ß‚É—p‚¢
    140 ‚éD‹ï‘Ì“I‚ɂ́CPRIMASK‚ªƒZƒbƒg‚³‚ê‚Ä‚¢‚éó‘Ô‚Åwfi‚ðŽÀs‚·‚é‚ƁCŠ„‚荞
    141 ‚Ý‘Ò‚¿‚Æ‚È‚èCŠ„ž‚ÝŽó•t‚¯‚é‚ƃnƒ“ƒhƒ‰‚ðŽÀs‚¹‚¸‚ɁCwfi‚©‚烊ƒ^[ƒ“‚µ
    142 ‚Ä‚­‚éD
    143 
    144 œ—áŠO/Š„ž‚Ý‚ÌŽó•t
    145 
    146 E—áŠO/Š„ž‚Ý‚ðŽó•t‚¯‚é‚ƁCŽó•t‚¯Žž‚ɃAƒNƒeƒBƒu‚ȃXƒ^ƒbƒNã‚Ɉȉº‚̃R
    147   ƒ“ƒeƒLƒXƒg‚ð•Û‘¶‚·‚é(—áŠOƒtƒŒ[ƒ€‚ƌĂÔ)D
     85例外/割込みを受け付けると,受け付けた例外/割込みの優先度以下の例外/割
     86込みを禁止する.この優先度マスクを"NVIC優先度マスク"と呼ぶ.この優先度
     87は,ソフトウェアから変更することができず,例外/割込みのリターンにより
     88割込み前の値に自動的に戻る.
     89
     90●スタックポインタ(PSPとMSP)
     91
     92スタックポインタは,PSPとMSPがあり,排他的に使用可能である.Handlerモ
     93ードではMSPのみ使用可能であり,ThreadモードではCONTROLレジスタで選択可
     94能である.CONTROLレジスタの1ビット目をセットするとPSPが有効に,クリア
     95すると,MSPが有効になる.
     96
     97●ThreadモードとHandlerモードの遷移
     98
     99ThreadモードからHandlerモードへの遷移は,例外/割込みを受け付けることで
     100発生する.一方,HandlerモードからThreadモードへの遷移は,PCに
     101EXC_RETURN(0xfffffffx)の値を設定することにより行う(例外リターン処理と
     102呼ぶ).EXC_RETURNの下位4bitにより,遷移先のモードや使用するスタックポ
     103インタを変更可能である.例外リターンにより,PRIMASKやBASEPRIの値は変化
     104しない.一方,FAULTMASKの値は'0'にクリアさせる.
     105
     106EXC_RETURN
     107
     108例外/割込み受付け時にlrに設定される値.ビット31〜4ビットは全て'1'で,
     109下位4bitは,受付け時のCPUモードやスタックを反映した値となっている.
     110
     111 0b0001 : Handlerモード
     112 0b1001 : Threadモード with MSP
     113 0b1101 : Threadモード with PSP
     114
     115●ThreadモードとHandlerモードの判定
     116
     117現状のモードを判定するには,IPSRを見て,'0'ならThreadモード,それ以外
     118なら,Handlerモードとなる.
     119
     120●BASEPRIレジスタ
     121
     122設定した優先度以下の優先度の割込みの受付を禁止する.この優先度マスクを
     123"BASEPRI優先度マスク"と呼ぶ.'0'を設定すると,全ての割込みを許可する.
     124例外/割込みの受付とリターンにより変化しない.例外/割込みに対する割込み
     125優先度マスクは,NVIC優先度マスクとBASEPRIの設定値の高い方(値が小さい
     126方)となる.
     127
     128FAULTMASK
     129
     130FAULTMASKは'1'をセットすることにより,NMI以外の全ての割込みを禁止する.
     131FAULTMASKは,例外のリターン処理により'0'にクリアさせる.
     132
     133●PRIMASKとWFI
     134
     135PRIMASKを'1'に設定すると,NMI と Hardware Fault 以外の例外/割込みを禁
     136止する.PRIMASKは割込みの許可と割込み待ちをアトミックに行うために用い
     137る.具体的には,PRIMASKがセットされている状態でwfiを実行すると,割り込
     138み待ちとなり,割込み受付けるとハンドラを実行せずに,wfiからリターンし
     139てくる.
     140
     141●例外/割込みの受付
     142
     143・例外/割込みを受付けると,受付け時にアクティブなスタック上に以下のコ
     144  ンテキストを保存する(例外フレームと呼ぶ).
    148145
    149146   -----------
     
    166163  |           | <- old SP
    167164
    168 EƒvƒƒZƒbƒT‚ðHandlerƒ‚[ƒh‚Æ‚·‚éDMSP‚ª—LŒø‚Æ‚È‚éD
    169 EŽó•t‚¯‚½—áŠO/Š„ž‚Ý‚Ì—áŠO”ԍ†‚ðIPSR‚ɐݒ肷‚éD
    170 ENVICŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‚ðŽó•t‚¯‚½—áŠO/Š„ž‚Ý‚Ì—Dæ“x‚ɐݒ肷‚éD
    171 Elr‚ÉEXC_RETURN‚Ì’l‚ªÝ’肳‚ê‚éD
    172 EƒxƒNƒ^ƒe[ƒuƒ‹‚ð“ǂݍž‚݃nƒ“ƒhƒ‰‚ðŽÀs‚·‚éD
    173 
    174 œ—áŠO/Š„ž‚Ý‚©‚ç‚̃Šƒ^[ƒ“
    175 
    176 pc‚ÉEXC_RETURN‚Ì’l‚ðÝ’è‚·‚邱‚Æ‚É‚æ‚èC—áŠO/Š„ž‚Ý‚©‚烊ƒ^[ƒ“‚·‚éD
    177 pc‚ւ̐ݒè‚ÉŽg—p‰Â”\‚È–½—߂ɂ͐§ŒÀ‚ª‚ ‚èCˆÈ‰º–½—ß‚ªŽg—p‰Â”\‚Å‚ ‚éD
    178 
    179   EPOP/LDM, LDR, BX
    180 
    181 œ–¢‰ðŒˆ‰Û‘è
    182 
    183 EƒxƒNƒ^[ƒe[ƒuƒ‹‚É“o˜^‚·‚éŠÖ”‚̃AƒhƒŒƒX‚ÌLSB‚Í'1'‚É‚·‚é‚ׂ«‚©?
    184 ENVIC‚Í—áŠOEŠ„ž‚݂̃lƒXƒg‰ñ”‚ð“à•”“I‚ÉŠÇ—‚µ‚Ä‚¢‚é‚炵‚¢D
    185   (!ƒŠƒtƒ@ƒŒƒ“ƒX‚𖾂炩‚É)D
    186     ƒ\ƒtƒgƒEƒFƒA‚ł́CƒlƒXƒg‚Ì’ K‚ð‡‚í‚¹‚ê‚΁CƒŠƒ^[ƒ“ƒXƒ^ƒbƒN‚ð‹U‘¢‚µ
    187     ‚Ä‚à–â‘è‚È‚¢‚©D
    188 
    189 
    190 ›OS‚ÌŽÀ‘•
    191 
    192 1.ƒ^[ƒQƒbƒg–¼
     165・プロセッサをHandlerモードとする.MSPが有効となる.
     166・受付けた例外/割込みの例外番号をIPSRに設定する.
     167・NVIC割込み優先度マスクを受付けた例外/割込みの優先度に設定する.
     168・lrにEXC_RETURNの値が設定される.
     169・ベクタテーブルを読み込みハンドラを実行する.
     170
     171●例外/割込みからのリターン
     172
     173pcにEXC_RETURNの値を設定することにより,例外/割込みからリターンする.
     174pcへの設定に使用可能な命令には制限があり,以下命令が使用可能である.
     175
     176  POP/LDM, LDR, BX
     177
     178●未解決課題
     179
     180・ベクターテーブルに登録する関数のアドレスのLSBは'1'にするべきか?
     181・NVICは例外・割込みのネスト回数を内部的に管理しているらしい.
     182  (!リファレンスを明らかに).
     183    ソフトウェアでは,ネストの帳尻を合わせれば,リターンスタックを偽造し
     184    ても問題ないか.
     185
     186
     187○OSの実装
     188
     1891.ターゲット名
    193190
    194191 1-1 cm3(Cortex-M3)
     
    196193 1-3 arm_m
    197194
    198 cm3‚ł́CCoretex-M1(armv6-m)‚ðƒTƒ|[ƒg‚·‚éê‡‚É–â‘è‚Æ‚È‚éDarmv7m‚ł́C
    199 armv8m‚ªƒŠƒŠ[ƒX‚³‚ꂽê‡‚É–â‘è‚Æ‚È‚éDARMˆË‘¶•”‚ÍJSP‚ł́Carmv4‚Æ‚È
    200 ‚Á‚Ä‚¢‚½‚ªCarmv5‚âarmv7‚à“®ì‚·‚邽‚ßASP‚Å‚Í’P‚Éarm‚Æ‚µ‚½D‚»‚Ì‚½‚߁C
    201 arm_m‚ª–³“ï‚ƍl‚¦‚ç‚ê‚éD
    202 
    203 
    204 2.Threadƒ‚[ƒh‚ÆHandlerƒ‚[ƒh‚ÌŽg‚¢•ª‚¯
     195cm3では,Coretex-M1(armv6-m)をサポートする場合に問題となる.armv7mでは,
     196armv8mがリリースされた場合に問題となる.ARM依存部はJSPでは,armv4とな
     197っていたが,armv5やarmv7も動作するためASPでは単にarmとした.そのため,
     198arm_mが無難と考えられる.
     199
     200
     2012.ThreadモードとHandlerモードの使い分け
    205202
    206203 2-1
    207   ƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚ÍThreadƒ‚[ƒhC”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚ÍHandlerƒ‚[
    208   ƒh‚Å“®ì‚³‚¹‚éD
     204  タスクコンテキストはThreadモード,非タスクコンテキストはHandlerモー
     205  ドで動作させる.
    209206
    210207 2-2
    211   ƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚Æ”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‹¤‚ÉHandlerƒ‚[ƒh‚Å“®ì‚³‚¹
    212   ‚éD
    213 
    214 ƒvƒƒZƒbƒT‚̐݌v•ûj‚ðl—¶‚·‚é‚Æ2-1‚ª—L—́D2-1‚Å‚Ì–â‘è“_‚Æ‚µ‚ẮCŠ„ž
    215 ‚݃nƒ“ƒhƒ‰‚©‚çƒ^ƒXƒN‚ւ̃Šƒ^[ƒ“Žž‚Ƀ‚[ƒh‚̕ύX‚ªˆÈ‰º‚Ì—l‚É‘½”­‚·‚邱
    216 ‚Æ‚ª‹“‚°‚ç‚ê‚éD
    217 
    218 1.Š„ž‚݃nƒ“ƒhƒ‰               : Handlerƒ‚[ƒh
    219 2.ƒ^ƒXƒN—áŠOƒnƒ“ƒhƒ‰‚̌Ăяo‚µ : Threadƒ‚[ƒh
    220 3.ƒ^ƒXƒN‚ւ̃Šƒ^[ƒ“ˆ—       : Handlerƒ‚[ƒh
    221 4.ƒ^ƒXƒN‚̍ĊJ                 : Threadƒ‚[ƒh
    222 
    223 3‚ÅHandlerƒ‚[ƒh‚Ɉڍs‚·‚é•K—v‚ª‚ ‚é‚̂́C—áŠOƒtƒŒ[ƒ€‚ð—p‚¢‚Ä•œ‹A‚·‚é
    224 ‚ɂ́CHandlerƒ‚[ƒh‚Å—áŠOƒŠƒ^[ƒ“ˆ—‚ðs‚¤•K—v‚ª‚ ‚邽‚ß‚Å‚ ‚éDARM‚Å
    225 ‚́C•¡”ƒŒƒWƒXƒ^‚̃[ƒh‚ÆCPSR‚Ì•œ‹A‚𓯎ž‚ɍs‚¦‚邪CM3‚͍s‚¦‚È‚¢‚½‚߁C
    226 ‚±‚Ì•û–@‚ÅŠ„ž‚ݐæ‚̃^ƒXƒN‚ɃŠƒ^[ƒ“‚·‚é•K—v‚ª‚ ‚éD
    227 
    228 2-2‚̏ꍇ‚ÌŠ„ž‚݃nƒ“ƒhƒ‰‚©‚çƒ^ƒXƒN‚ւ̃Šƒ^[ƒ“Žž‚Ƀ‚[ƒh‚̕ύX‚ðˆÈ‰º
    229 ‚ÉŽ¦‚·D‚Ü‚½C2-2‚Å‚ÍŠ„ž‚Ý—Dæ“x‚̍Œá’l‚ðƒ^ƒXƒN‚ÌŽÀsŽž‚Ì—Dæ“x‚Æ‚µ
    230 ‚ăŠƒU[ƒu‚·‚é•K—v‚ª‚ ‚éD
    231 
    232 1.Š„ž‚݃nƒ“ƒhƒ‰               : Handlerƒ‚[ƒh
    233 2.NVIC—Dæ“xƒ}ƒXƒN'0'‚ð0‚Ö     : Threadƒ‚[ƒh
    234 3.Å’á—Dæ“x‚ÌHandlerƒ‚[ƒh‚Ö  : Handlerƒ‚[ƒh
    235 4.ƒ^ƒXƒN—áŠOƒnƒ“ƒhƒ‰‚̌Ăяo‚µ : Handlerƒ‚[ƒh
    236 5.ƒ^ƒXƒN‚ւ̃Šƒ^[ƒ“‚Ì‘Oˆ—   : Threadƒ‚[ƒh
    237 3.ƒ^ƒXƒN‚ւ̃Šƒ^[ƒ“           : Handlerƒ‚[ƒh
    238 4.ƒ^ƒXƒN‚̍ĊJ                 : Handlerƒ‚[ƒh
    239 
    240 Š„ž‚݃nƒ“ƒhƒ‰‚©‚çƒ^ƒXƒN‚̃Šƒ^[ƒ“‚ÉŠÖ‚µ‚ẮC2-2‚Å‚ ‚Á‚Ä‚àC2‚ðŽÀs‚·
    241 ‚éê‡‚ɁCNVIC—Dæ“xƒ}ƒXƒN‚ð'0'‚É‚·‚邽‚߁C—áŠOƒŠƒ^[ƒ“ˆ—‚ðs‚¤•K—v
    242 ‚ª‚ ‚éD‚Ü‚½CNVICŽ©‘Ì‚ªCŠ„ž‚݂̃lƒXƒg‰ñ”‚ðŠÇ—‚µ‚Ä‚¢‚邽‚߁C3‚©‚ç4
    243 ‚Ö‚Ì‘JˆÚ‚Ì‚½‚߂ɁC‚¢‚Á‚½‚ñ—áŠO/Š„ž‚Ý‚ðŽó•t‚¯‚½ó‘Ô‚É‚·‚é•K—v‚ª‚ ‚邽
    244 ‚߁CŒ‹‰Ê“I‚É2-1ˆÈã‚Ì‘JˆÚ‚ª•K—v‚Æ‚È‚éD
    245 
    246 2-2‚̏ꍇ‚́CMSP‚µ‚©Žg‚¦‚È‚¢‚½‚߁CŠ„ž‚Ý‚Ì“ü‚èŒû‚ŃlƒXƒg‰ñ”‚ð”»’f‚µ‚āC
    247 ƒXƒ^ƒbƒN‚ð“ü‚ê‘Ö‚¦‚é•K—v‚ª‚ ‚éD
    248 
    249 HRP“™‚сƒ‚ƒŠ•ÛŒì‚ð—p‚¢‚éê‡‚Í2-1‚Æ‚È‚éD
    250 
    251 ˆÈã‚Ì——R‚É‚æ‚èC2-1‚ðÌ—p‚·‚éD‚½‚¾‚µ2-1‚́CƒJ[ƒlƒ‹‹N“®Žž‚ÆIDLEƒ‹[
    252 ƒv‚̈µ‚¢‚ðŒŸ“¢‚·‚é•K—v‚ª‚ ‚éD‚±‚ê‚ç‚ɂ‚¢‚Ä‚Í•Ê“r‹c˜_‚·‚éD
    253 
    254 
    255 3.ƒfƒBƒXƒpƒbƒ`ƒƒ‚ÌŽÀsƒ‚[ƒh
     208  タスクコンテキストと非タスクコンテキスト共にHandlerモードで動作させ
     209  る.
     210
     211プロセッサの設計方針を考慮すると2-1が有力.2-1での問題点としては,割込
     212みハンドラからタスクへのリターン時にモードの変更が以下の様に多発するこ
     213とが挙げられる.
     214
     2151.割込みハンドラ               : Handlerモード
     2162.タスク例外ハンドラの呼び出し : Threadモード
     2173.タスクへのリターン処理       : Handlerモード
     2184.タスクの再開                 : Threadモード
     219
     2203でHandlerモードに移行する必要があるのは,例外フレームを用いて復帰する
     221には,Handlerモードで例外リターン処理を行う必要があるためである.ARMで
     222は,複数レジスタのロードとCPSRの復帰を同時に行えるが,M3は行えないため,
     223この方法で割込み先のタスクにリターンする必要がある.
     224
     2252-2の場合の割込みハンドラからタスクへのリターン時にモードの変更を以下
     226に示す.また,2-2では割込み優先度の最低値をタスクの実行時の優先度とし
     227てリザーブする必要がある.
     228
     2291.割込みハンドラ               : Handlerモード
     2302.NVIC優先度マスク'0'を0へ     : Threadモード
     2313.最低優先度のHandlerモードへ  : Handlerモード
     2324.タスク例外ハンドラの呼び出し : Handlerモード
     2335.タスクへのリターンの前処理   : Threadモード
     2343.タスクへのリターン           : Handlerモード
     2354.タスクの再開                 : Handlerモード
     236
     237割込みハンドラからタスクのリターンに関しては,2-2であっても,2を実行す
     238る場合に,NVIC優先度マスクを'0'にするため,例外リターン処理を行う必要
     239がある.また,NVIC自体が,割込みのネスト回数を管理しているため,3から4
     240への遷移のために,いったん例外/割込みを受付けた状態にする必要があるた
     241め,結果的に2-1以上の遷移が必要となる.
     242
     2432-2の場合は,MSPしか使えないため,割込みの入り口でネスト回数を判断して,
     244スタックを入れ替える必要がある.
     245
     246HRP等でメモリ保護を用いる場合は2-1となる.
     247
     248以上の理由により,2-1を採用する.ただし2-1は,カーネル起動時とIDLEルー
     249プの扱いを検討する必要がある.これらについては別途議論する.
     250
     251
     2523.ディスパッチャの実行モード
    256253
    257254 3-1
    258   Threadƒ‚[ƒh‚ÅŽÀs‚·‚é
     255  Threadモードで実行する
    259256
    260257 3-2
    261   Handlerƒ‚[ƒh‚ÅŽÀs‚·‚é
    262 
    263 ƒfƒBƒXƒpƒbƒ`ƒƒ‚ðThreadƒ‚[ƒh‚ÅŽÀs‚·‚é‚ƁCŠ„ž‚Ý‚É‚æ‚èƒvƒŠƒGƒ“ƒvƒg‚³‚ê
    264 ‚½ƒ^ƒXƒN‚É–ß‚éê‡‚ÍŽŸ‚̂悤‚ȃpƒX‚É‚È‚éD
    265 
    266  1. ƒfƒBƒXƒpƒbƒ`ƒƒŒÄ‚яo‚µ : Threadƒ‚[ƒh
    267  2. ƒfƒBƒXƒpƒbƒ`ƒƒŽÀs     : Threadƒ‚[ƒh
    268  3. ƒ^ƒXƒN—áŠOŽÀs         : Threadƒ‚[ƒh
    269  4Dƒ^ƒXƒN‚ւ̃Šƒ^[ƒ“ˆ— : Handlerƒ‚[ƒh
    270  5. ƒ^ƒXƒN‚̍ĊJ           : Threadƒ‚[ƒh
    271 
    272 Š„ž‚݃nƒ“ƒhƒ‰‚©‚玩‚çƒfƒBƒXƒpƒbƒ`‚µ‚½ƒ^ƒXƒN‚ÖƒŠƒ^[ƒ“‚·‚éê‡‚ÍŽŸ‚̃p
    273 ƒX‚É‚È‚éD
    274 
    275  1.Š„ž‚݃nƒ“ƒhƒ‰               : Handlerƒ‚[ƒh
    276  2.ƒfƒBƒXƒpƒbƒ`ƒƒŽÀs           : Threadƒ‚[ƒh
    277  3.ƒ^ƒXƒN—áŠOƒnƒ“ƒhƒ‰‚̌Ăяo‚µ : Threadƒ‚[ƒh
    278  4.ƒ^ƒXƒN‚ւ̃Šƒ^[ƒ“           : Handlerƒ‚[ƒh
    279  5.ƒ^ƒXƒN‚̍ĊJ                 : Threadƒ‚[ƒh
    280 
    281 ˆê•ûCƒfƒBƒXƒpƒbƒ`ƒƒ‚ðHandlerƒ‚[ƒh‚ÅŽÀs‚·‚é‚ƁCŠ„ž‚Ý‚É‚æ‚èƒvƒŠƒGƒ“
    282 ƒvƒg‚³‚ꂽƒ^ƒXƒN‚É–ß‚éê‡‚ÍŽŸ‚̂悤‚ȃpƒX‚É‚È‚éD
    283 
    284  1. ƒfƒBƒXƒpƒbƒ`ƒƒŒÄ‚яo‚µ : Threadƒ‚[ƒh
    285  2. ƒfƒBƒXƒpƒbƒ`ƒƒŽÀs     : Handlerƒ‚[ƒh
    286  3. ƒ^ƒXƒN—áŠOŽÀs         : Threadƒ‚[ƒh
    287  4Dƒ^ƒXƒN‚ւ̃Šƒ^[ƒ“     : Handlerƒ‚[ƒh
    288  5. ƒ^ƒXƒN‚̍ĊJ           : Threadƒ‚[ƒh
    289 
    290 Š„ž‚݃nƒ“ƒhƒ‰‚̏oŒû‚©‚玩‚çƒfƒBƒXƒpƒbƒ`‚µ‚½ƒ^ƒXƒN‚ÖƒŠƒ^[ƒ“‚·‚éê‡‚Í
    291 ŽŸ‚̃pƒX‚É‚È‚éD
    292 
    293  1.Š„ž‚݃nƒ“ƒhƒ‰               : Handlerƒ‚[ƒh
    294  2.ƒfƒBƒXƒpƒbƒ`ƒƒŽÀs           : Handlerƒ‚[ƒh
    295  3.ƒ^ƒXƒN—áŠOƒnƒ“ƒhƒ‰‚̌Ăяo‚µ : Threadƒ‚[ƒh
    296  4.ƒ^ƒXƒN‚ւ̃Šƒ^[ƒ“           : Handlerƒ‚[ƒh
    297  5.ƒ^ƒXƒN‚̍ĊJ                 : Threadƒ‚[ƒh
    298 
    299 ƒ^ƒXƒN—áŠOƒnƒ“ƒhƒ‰‚ª‚È‚¢OS‚̏ꍇ‚́CHandlerƒ‚[ƒh‚ÅŽÀs‚µ‚½•û‚ªƒ‚[ƒh
    300 ‚Ì‘JˆÚ‚̉ñ”‚ªŒ¸‚邪Cƒ^ƒXƒN—áŠOƒnƒ“ƒhƒ‰‚ª‚ ‚é‚ƁCThreadƒ‚[ƒh‚Ì•û‚ª‘J
    301 ˆÚ‰ñ”‚ªŒ¸‚邽‚߁CThreadƒ‚[ƒh‚Æ‚·‚éD
    302 
    303 ƒƒ‚ƒŠ•ÛŒì‚ðl—¶‚·‚é‚ƁCƒfƒBƒXƒpƒbƒ`ƒƒ‚ÍHandlerƒ‚[ƒh‚Å“®ì‚³‚¹‚½•û‚ª
    304 Œø—¦‚ª‚æ‚¢‚ƍl‚¦‚ç‚ê‚éiSVC‚Ńnƒ“ƒhƒ‰‚ðŒÄ‚яo‚·‚ÆHandlerƒ‚[ƒh‚ƂȂ邽
    305 ‚߁jD
    306 
    307 
    308 4.ƒXƒ^ƒbƒN‚ÌŽg‚¢•ª‚¯
     258  Handlerモードで実行する
     259
     260ディスパッチャをThreadモードで実行すると,割込みによりプリエンプトされ
     261たタスクに戻る場合は次のようなパスになる.
     262
     263 1. ディスパッチャ呼び出し : Threadモード
     264 2. ディスパッチャ実行     : Threadモード
     265 3. タスク例外実行         : Threadモード
     266 4.タスクへのリターン処理 : Handlerモード
     267 5. タスクの再開           : Threadモード
     268
     269割込みハンドラから自らディスパッチしたタスクへリターンする場合は次のパ
     270スになる.
     271
     272 1.割込みハンドラ               : Handlerモード
     273 2.ディスパッチャ実行           : Threadモード
     274 3.タスク例外ハンドラの呼び出し : Threadモード
     275 4.タスクへのリターン           : Handlerモード
     276 5.タスクの再開                 : Threadモード
     277
     278一方,ディスパッチャをHandlerモードで実行すると,割込みによりプリエン
     279プトされたタスクに戻る場合は次のようなパスになる.
     280
     281 1. ディスパッチャ呼び出し : Threadモード
     282 2. ディスパッチャ実行     : Handlerモード
     283 3. タスク例外実行         : Threadモード
     284 4.タスクへのリターン     : Handlerモード
     285 5. タスクの再開           : Threadモード
     286
     287割込みハンドラの出口から自らディスパッチしたタスクへリターンする場合は
     288次のパスになる.
     289
     290 1.割込みハンドラ               : Handlerモード
     291 2.ディスパッチャ実行           : Handlerモード
     292 3.タスク例外ハンドラの呼び出し : Threadモード
     293 4.タスクへのリターン           : Handlerモード
     294 5.タスクの再開                 : Threadモード
     295
     296タスク例外ハンドラがないOSの場合は,Handlerモードで実行した方がモード
     297の遷移の回数が減るが,タスク例外ハンドラがあると,Threadモードの方が遷
     298移回数が減るため,Threadモードとする.
     299
     300メモリ保護を考慮すると,ディスパッチャはHandlerモードで動作させた方が
     301効率がよいと考えられる(SVCでハンドラを呼び出すとHandlerモードとなるた
     302め).
     303
     304
     3054.スタックの使い分け
    309306
    310307 4-1
    311   ƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚ðPSP, ”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚ðMSP
     308  タスクコンテキストをPSP, 非タスクコンテキストをMSP
    312309 4-2
    313   ƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒgC”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‹¤‚ÉMSP
    314 
    315 4-2‚̏ꍇCŠ„ž‚Ý‚Ì“ü‚èŒû‚ŃlƒXƒg‰ñ”‚ð”»’f‚µ‚āCƒXƒ^ƒbƒN‚ð“ü‚ê‘Ö‚¦‚é
    316 •K—v‚ª‚ ‚éD2‚Ń^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚ÍThreadƒ‚[ƒhC”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg
    317 ‚ÍHandlerƒ‚[ƒh‚Å“®ì‚³‚¹‚é‚Æ‚µ‚½‚½‚߁C4-1‚ðÌ—p‚·‚é‚ƁCŠ„ž‚Ý‚Ì“ü‚èŒû
    318 ‚ÅŽ©“®“I‚ɃXƒ^ƒbƒN‚ªØ‚è‘Ö‚í‚éDThreadƒ‚[ƒh‚Å‚ÌPSP‚̃AƒNƒZƒX‚àC
    319 mrs/msr–½—߂ōs‚¦‚邽‚߁C4-1‚ðÌ—p‚·‚éD
    320 
    321 
    322 5.ƒRƒ“ƒeƒLƒXƒg‚Ì”»’è
     310  タスクコンテキスト,非タスクコンテキスト共にMSP
     311
     3124-2の場合,割込みの入り口でネスト回数を判断して,スタックを入れ替える
     313必要がある.2でタスクコンテキストはThreadモード,非タスクコンテキスト
     314はHandlerモードで動作させるとしたため,4-1を採用すると,割込みの入り口
     315で自動的にスタックが切り替わる.ThreadモードでのPSPのアクセスも,
     316mrs/msr命令で行えるため,4-1を採用する.
     317
     318
     3195.コンテキストの判定
    323320
    324321 5-1
    325   IPSR‚ª'0'(Threadƒ‚[ƒh)‚È‚çƒ^ƒXƒNƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒgC'1'(Handlerƒ‚[
    326   ƒh)‚È‚ç”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚Æ‚·‚éD
     322  IPSRが'0'(Threadモード)ならタスクタスクコンテキスト,'1'(Handlerモー
     323  ド)なら非タスクコンテキストとする.
    327324
    328325 5-2
    329   Š„ž‚݂̃lƒXƒg‰ñ”‚ð•ÛŽ‚·‚é•Ï”‚ð—pˆÓD1ˆÈã‚Å”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒgD
     326  割込みのネスト回数を保持する変数を用意.1以上で非タスクコンテキスト.
    330327
    331328 5-3
    332   ƒAƒNƒeƒBƒu‚ȃXƒ^ƒbƒN‚É‚æ‚è”»’fiMSP‚È‚ç”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒgCPSP‚È‚ç
    333   ƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚Æ‚·‚éj
    334 
    335 5-1‚́Cƒ\ƒtƒgƒEƒFƒA‘¤‚ŃRƒ“ƒeƒLƒXƒgŠÇ—‚Ì‚½‚߂̏ˆ—‚ðs‚¤•K—v‚ª‚È‚¢‚Æ
    336 ‚¢‚¤ƒƒŠƒbƒg‚ª‚ ‚éD‚µ‚©‚µ‚È‚ª‚çCƒJ[ƒlƒ‹‚Ì‹N“®ŽžThreadƒ‚[ƒh‚Å‚ ‚邽
    337 ‚߁CHandlerƒ‚[ƒh‚ֈڍs‚·‚é•K—v‚ª‚ ‚éDASPƒJ[ƒlƒ‹‚ł́CIDLEƒ‹[ƒvŽÀs
    338 ‚Í”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚Æ‚µ‚Ä“®ì‚³‚¹‚é•K—v‚ª‚ ‚邽‚߁CIDLEƒ‹[ƒv‚Í
    339 Handlerƒ‚[ƒh‚Å“®ì‚³‚¹‚é•K—v‚ª‚ ‚éDIDLEƒ‹[ƒv‚̓fƒBƒXƒpƒbƒ`ƒƒ‚©‚çŒÄ
    340 ‚яo‚³‚ê‚éD3‚Å’è‚ß‚½‚悤‚ɁCƒfƒBƒXƒpƒbƒ`ƒƒ‚ðThreadƒ‚[ƒh‚Å“®ì‚³‚¹‚é
    341 ‚½‚߁CIDLEƒ‹[ƒv‚ðŒÄ‚яo‚·Û‚ɂ́CHandlerƒ‚[ƒh‚Ö‘JˆÚ‚·‚é•K—v‚ª‚ ‚éD
    342 Handlerƒ‚[ƒh‚Ö‚Ì‘JˆÚ‚́CSVC/PendSVC‚ð—p‚¢‚é‚ÆŽÀŒ»‰Â”\‚Å‚ ‚邪C6‚ÌŠ„
    343 ž‚݂ɃvƒŠƒGƒ“ƒvƒg‚³‚ꂽƒ^ƒXƒN‚ւ̃Šƒ^[ƒ“Žž‚ÌHandlerƒ‚[ƒh‚ւ̈ڍs‚Å
    344 ‚àSVC/PendSVC‚ÌŽg—p‚ª•K—v‚ƂȂ邽‚߁CSVCƒnƒ“ƒhƒ‰‚ł́C‚Ç‚Ì–Ú“I‚ŌĂяo
    345 ‚³‚ꂽ‚©”»’è‚·‚é•K—v‚ªo‚Ä‚­‚邽‚߁CƒI[ƒoƒwƒbƒh‚ª‘‘å‚·‚éD
    346 
    347 5-2‚ł́CƒJ[ƒlƒ‹‹N“®Žž‚âIDLEƒ‹[ƒvŽž‚ɕϐ”‚ð'1'‚ɐݒ肷‚ê‚΂悢‚±‚Æ‚É
    348 ‚È‚éD‚±‚̏ꍇCƒJ[ƒlƒ‹‹N“®Žž‚âIDLEƒ‹[ƒvŽž‚ÉThreadƒ‚[ƒh‚ÅŽÀs‚µ‚Ä‚à
    349 “®ì‚É–â‘肪‚È‚¢‚悤C“Á‚ÉŠ„ž‚݂̏o“ü‚èŒû‚̐݌v‚𒍈ӂ·‚é•K—v‚ª‚ ‚éD
    350 
    351 ƒJ[ƒlƒ‹‹N“®Žž‚ÉŠÖ‚µ‚ẮC‘SŠ„ž‚Ý‚ð‹ÖŽ~‚µ‚Ä‚¨‚èCŠ„ž‚Ý‚ª“ü‚ç‚È‚¢‚Ì‚Å
    352 “Á‚É–â‘è‚Í‚È‚¢DIDLEƒ‹[ƒvŽž‚́CThreadƒ‚[ƒh‚ÅMSP‚ÆPSP‚Ì‘I‘ð‚ª‰Â”\‚Å‚ 
    353 ‚邱‚Æ‚ð—˜—p‚µ‚āC”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚̃Xƒ^ƒbƒN‚Å‚ ‚éMSP‚ɕύX‚·‚éD
    354 —áŠO/Š„ž‚Ý‚Ì“ü‚èŒû‚ł́C‘½dŠ„ž‚Ý‚Å‚ ‚é‚©‚ðEXC_RETURN‚̃‚[ƒh”»’è‚Ì
    355 ƒrƒbƒg‚Å‚Í‚È‚­CƒXƒ^ƒbƒN‚Ì”»’èƒrƒbƒg‚ōs‚¦‚Ζâ‘è‚È‚¢D—áŠO/Š„ž‚Ý‚©‚ç
    356 ‚̃Šƒ^[ƒ“‚ÉŠÖ‚µ‚ẮC‘½dŠ„ž‚Ý‚Ì”»’è‚́C“ü‚èŒû‚Æ“¯—l‚ÉEXC_RETURN‚̃X
    357 ƒ^ƒbƒN”»’èƒrƒbƒg‚ōs‚¦‚΂悢D—áŠOƒŠƒ^[ƒ“ˆ—Žž‚Épc‚É‘ã“ü‚·‚é
    358 EXC_RETURN‚Ì’l‚ðˆê—¥0xfffffffd (Threadƒ‚[ƒh with MSP)‚Æ‚·‚é‚Ì‚Å‚Í‚È‚­C
    359 —áŠO/Š„ž‚ÝŽó•t‚¯Žž‚ÉLR‚ɐݒ肳‚ê‚éEXC_RETURN‚ð—p‚¢‚邱‚Æ‚É‚æ‚èCIDLE
    360 ƒ‹[ƒv‚ÉŠ„‚荞‚ñ‚¾ê‡‚Å‚à–â‘è‚È‚­ƒŠƒ^[ƒ“‚·‚éD
    361 
    362 ƒJ[ƒlƒ‹‹N“®Žž‚́CMSP‚ªƒAƒNƒeƒBƒu‚Å‚ ‚èCŠ„ž‚݃nƒ“ƒhƒ‰ŽÀsŽž‚ÍHandler
    363 ƒ‚[ƒh‚Å‚ ‚邱‚Æ‚©‚çMSP‚ªƒAƒNƒeƒBƒu‚Å‚èCIDLEƒ‹[ƒvŽž‚ÉMSP‚ðƒAƒNƒeƒBƒu
    364 ‚ɐݒ肷‚é‚ƁC”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚Í‘S‚āCMSP‚ðƒAƒNƒeƒBƒu‚É‚µ‚Ä“®ì‚·
    365 ‚邱‚Æ‚É‚È‚éD‚Ü‚½CŠ„ž‚ÝŽž‚ÍŠ„ž‚Ý‘O‚ɃAƒNƒeƒBƒu‚ȃXƒ^ƒbƒN‚̏î•ñ‚ªC
    366 EXC_RETURN‚ɐݒ肳‚ê‚éD‚»‚Ì‚½‚߁CƒRƒ“ƒeƒLƒXƒg‚Ì”»’è‚́CŠ„ž‚݃lƒXƒg‰ñ
    367 ”‚ð•ÛŽ‚·‚é•Ï”‚ª‚È‚­‚Æ‚àCƒAƒNƒeƒBƒu‚ȃXƒ^ƒbƒN‚ðŒ©‚ê‚΂悢‚±‚Æ‚É‚È‚éD
    368 ‚Ü‚½Cexc_sense_context()‚ÉŠÖ‚µ‚ẮC—áŠOƒtƒŒ[ƒ€’†‚ÉEXC_RETURN‚ð’ljÁ
    369 ‚µC‚»‚Ì“à—e‚É‚æ‚è”»’f‚·‚ê‚΂悢DˆÈã‚Ì——R‚É‚æ‚èC5-3‚ðÌ—p‚·‚éD
    370 
    371 
    372 6.Š„ž‚݂ɃvƒŠƒGƒ“ƒvƒg‚³‚ꂽƒ^ƒXƒN‚ւ̃Šƒ^[ƒ“Žž‚ÌHandlerƒ‚[ƒh‚ւ̈Ú
    373   s•û–@
     329  アクティブなスタックにより判断(MSPなら非タスクコンテキスト,PSPなら
     330  タスクコンテキストとする)
     331
     3325-1は,ソフトウェア側でコンテキスト管理のための処理を行う必要がないと
     333いうメリットがある.しかしながら,カーネルの起動時Threadモードであるた
     334め,Handlerモードへ移行する必要がある.ASPカーネルでは,IDLEループ実行
     335は非タスクコンテキストとして動作させる必要があるため,IDLEループは
     336Handlerモードで動作させる必要がある.IDLEループはディスパッチャから呼
     337び出される.3で定めたように,ディスパッチャをThreadモードで動作させる
     338ため,IDLEループを呼び出す際には,Handlerモードへ遷移する必要がある.
     339Handlerモードへの遷移は,SVC/PendSVCを用いると実現可能であるが,6の割
     340込みにプリエンプトされたタスクへのリターン時のHandlerモードへの移行で
     341もSVC/PendSVCの使用が必要となるため,SVCハンドラでは,どの目的で呼び出
     342されたか判定する必要が出てくるため,オーバヘッドが増大する.
     343
     3445-2では,カーネル起動時やIDLEループ時に変数を'1'に設定すればよいことに
     345なる.この場合,カーネル起動時やIDLEループ時にThreadモードで実行しても
     346動作に問題がないよう,特に割込みの出入り口の設計を注意する必要がある.
     347
     348カーネル起動時に関しては,全割込みを禁止しており,割込みが入らないので
     349特に問題はない.IDLEループ時は,ThreadモードでMSPとPSPの選択が可能であ
     350ることを利用して,非タスクコンテキストのスタックであるMSPに変更する.
     351例外/割込みの入り口では,多重割込みであるかをEXC_RETURNのモード判定の
     352ビットではなく,スタックの判定ビットで行えば問題ない.例外/割込みから
     353のリターンに関しては,多重割込みの判定は,入り口と同様にEXC_RETURNのス
     354タック判定ビットで行えばよい.例外リターン処理時にpcに代入する
     355EXC_RETURNの値を一律0xfffffffd (Threadモード with MSP)とするのではなく,
     356例外/割込み受付け時にLRに設定されるEXC_RETURNを用いることにより,IDLE
     357ループに割り込んだ場合でも問題なくリターンする.
     358
     359カーネル起動時は,MSPがアクティブであり,割込みハンドラ実行時はHandler
     360モードであることからMSPがアクティブでり,IDLEループ時にMSPをアクティブ
     361に設定すると,非タスクコンテキストは全て,MSPをアクティブにして動作す
     362ることになる.また,割込み時は割込み前にアクティブなスタックの情報が,
     363EXC_RETURNに設定される.そのため,コンテキストの判定は,割込みネスト回
     364数を保持する変数がなくとも,アクティブなスタックを見ればよいことになる.
     365また,exc_sense_context()に関しては,例外フレーム中にEXC_RETURNを追加
     366し,その内容により判断すればよい.以上の理由により,5-3を採用する.
     367
     368
     3696.割込みにプリエンプトされたタスクへのリターン時のHandlerモードへの移
     370  行方法
    374371
    375372 6-1
    376   SVC‚ð—p‚¢‚é
     373  SVCを用いる
    377374 6-2
    378   PendSVC‚ð—p‚¢‚é
    379 
    380 PendSVC‚ÆSVC‚̈Ⴂ‚́CPendSVC‚ª—v‹‚ªƒLƒ
    381 [ƒCƒ“ƒO‚³‚êCSVC‚Í—v‹‚ªƒLƒ
    382 
    383 [ƒCƒ“ƒO‚³‚ê‚È‚¢‚±‚Æ‚Å‚ ‚éDŠ„ž‚݂ɃvƒŠƒGƒ“ƒvƒg‚³‚ꂽƒ^ƒXƒN‚ւ̃Šƒ^[
    384 ƒ“Žž‚ÌHandlerƒ‚[ƒh‚ւ̈ڍs‚́CƒLƒ
    385 [ƒCƒ“ƒO‚³‚ꂸ‚É‘¦À‚ɏˆ—‚³‚ê‚é•K
    386 —v‚ª‚ ‚邽‚߁C‚Ç‚¿‚ç‚ÅŽÀŒ»‚µ‚Ä‚à–â‘è‚È‚¢D‚Ç‚¿‚ç‚ðƒJ[ƒlƒ‹‚̃Šƒ\[ƒX‚µ
    387 ‚ÄŽg—p‚·‚é‚©‚Ì‘I‘ð‚¾‚¯‚Å‚ ‚éD
    388 
    389 ‚Ç‚¿‚ç‚ðŽg‚¤‚Æ‚µ‚Ä‚àC—Dæ“x‚̐ݒ肪–â‘è‚Æ‚È‚éDƒfƒBƒXƒpƒbƒ`ƒƒ‚©‚犄ž
    390 ‚݂ɃvƒŠƒGƒ“ƒvƒg‚³‚ꂽƒ^ƒXƒN‚ւ̃Šƒ^[ƒ“‚܂ł̏ˆ—‚́C­‚È‚­‚Æ‚àCPUƒ
    391 ƒbƒNó‘Ô‚ÅŽÀs‚³‚ê‚È‚¯‚ê‚΂Ȃç‚È‚¢DSVC‚âPendSVC‚Í‚Ç‚¿‚ç‚àŠ„ž‚Ý—Dæ“x
    392 ‚ðŽ‚Â‚½‚߁CNVIC—Dæ“xƒ}ƒXƒN‚æ‚èBASEPRI—Dæ“xƒ}ƒXƒN‚Ì•û‚ª‚‚¢ê‡Cˆ
    393 —‚³‚ê‚È‚¢D
    394 
    395 CPUƒƒbƒNó‘Ô‚ðBASEPRI‚̐ݒè‚ÅŽÀŒ»‚µ‚½ê‡C‚»‚̐ݒè’l‚ðSVC‚âPendSVC‚É
    396 Ý’肵‚½’l‚æ‚è’á‚­‚·‚é•K—v‚ª‚ ‚éDŒ¾‚¢Š·‚¦‚é‚ƁCSVC‚âPendSVC‚Ì—Dæ“x‚ð
    397 CPUƒƒbƒNŽž‚Ì—Dæ“xƒ}ƒXƒN‚Ì’l‚æ‚荂‚¢’li‘¼‚ÌŠ„ž‚Ý‚æ‚荂‚¢—Dæ“xj‚Æ
    398 ‚·‚é•K—v‚ª‚ ‚éD
    399 
    400 CPUƒƒbƒNó‘Ô‚ðFAULTMASK‚âPRIMASK‚ÅŽÀŒ»‚µ‚½ê‡‚́C‚±‚ê‚炪Ý’肳‚ê‚é
    401 ‚ƁCSVC‚âPendSVC‚ªŽó•t‚¯‚ç‚ê‚È‚¢‚½‚߁C‚¢‚Á‚½‚ñBASEPRI‚É‚æ‚芄ž‚Ý‚ðƒ}
    402 ƒXƒN‚·‚é‚悤‚ɐݒ肷‚é•K—v‚ª‚ ‚éD‚±‚̏ꍇ‚àCSVC‚âPendSVC‚Í‘¼‚ÌŠ„ž‚Ý
    403 ‚æ‚荂‚¢—Dæ“x‚ðÝ’è‚·‚é•K—v‚ª‚ ‚éD
    404 
    405 ˆÈã‚É‚æ‚èCHandlerƒ‚[ƒh‚ւ̈ڍs‚Ì‚½‚߂ɂ́CCPUƒƒbƒNó‘Ô‚ðBASEPRI‚Å
    406 ŽÀŒ»‚µCSVC‚âPendSVC‚ɐݒ肷‚é—Dæ“x‚ðƒJ[ƒlƒ‹ŠÇ—“à‚̍ō‚—Dæ“x‚æ‚èˆê
    407 ‚‚‚¢—Dæ“x‚ɐݒ肷‚é•K—v‚ª‚ ‚éD
    408 
    409 
    410 7. —áŠO/Š„ž‚ݏo“ü‚èŒû‚Å‚Ì‘½dŠ„ž‚Ý‚Ì”»’f
     375  PendSVCを用いる
     376
     377PendSVCとSVCの違いは,PendSVCが要求がキューイングされ,SVCは要求がキュ
     378ーイングされないことである.割込みにプリエンプトされたタスクへのリター
     379ン時のHandlerモードへの移行は,キューイングされずに即座に処理される必
     380要があるため,どちらで実現しても問題ない.どちらをカーネルのリソースし
     381て使用するかの選択だけである.
     382
     383どちらを使うとしても,優先度の設定が問題となる.ディスパッチャから割込
     384みにプリエンプトされたタスクへのリターンまでの処理は,少なくともCPUロ
     385ック状態で実行されなければならない.SVCやPendSVCはどちらも割込み優先度
     386を持つため,NVIC優先度マスクよりBASEPRI優先度マスクの方が高い場合,処
     387理されない.
     388
     389CPUロック状態をBASEPRIの設定で実現した場合,その設定値をSVCやPendSVCに
     390設定した値より低くする必要がある.言い換えると,SVCやPendSVCの優先度を
     391CPUロック時の優先度マスクの値より高い値(他の割込みより高い優先度)と
     392する必要がある.
     393
     394CPUロック状態をFAULTMASKやPRIMASKで実現した場合は,これらが設定される
     395と,SVCやPendSVCが受付けられないため,いったんBASEPRIにより割込みをマ
     396スクするように設定する必要がある.この場合も,SVCやPendSVCは他の割込み
     397より高い優先度を設定する必要がある.
     398
     399以上により,Handlerモードへの移行のためには,CPUロック状態をBASEPRIで
     400実現し,SVCやPendSVCに設定する優先度をカーネル管理内の最高優先度より一
     401つ高い優先度に設定する必要がある.
     402
     403
     4047. 例外/割込み出入り口での多重割込みの判断
    411405
    4124067-1
    413  EXC_RETURN‚̃‚[ƒh”»’èƒrƒbƒg
     407 EXC_RETURNのモード判定ビット
    4144087-2
    415  EXC_RETURN‚̃Xƒ^ƒbƒN”»’èƒrƒbƒg
     409 EXC_RETURNのスタック判定ビット
    4164107-3
    417  Š„ž‚݃lƒXƒg‰ñ”‚ÌŠÇ—•Ï”
    418 
    419 —áŠO/Š„ž‚ÝŽó•t‚¯Žž‚́CŽó•t‚¯‚½—áŠO/Š„ž‚݈ȉº‚ÌŠ„ž‚Ý‚Í‹ÖŽ~‚·‚邪C‘S
    420 Š„ž‚Ý‹ÖŽ~ó‘Ô‚É‚Í‚È‚ç‚È‚¢D‚»‚Ì‚½‚߁CŠ„ž‚݃lƒXƒg‰ñ”‚ÌŠÇ—•Ï”‚ðƒCƒ“
    421 ƒNƒŠƒƒ“ƒg‚·‚é‘O‚ÉŠ„ž‚Ý‚ª“ü‚é‰Â”\«‚ª‚ ‚邽‚߁C7-3‚ÍŽg—p‚·‚邱‚Æ‚ª‚Å
    422 ‚«‚È‚¢D
    423 
    424 5‚Å‹c˜_‚µ‚½’Ê‚èCIDLEƒ‹[ƒv‚ðThreadƒ‚[ƒh‚ÅŽÀs‚·‚邽‚߁C7-1‚Å‚Í‚È‚­C
    425 7-2‚Å”»’f‚·‚é•K—v‚ª‚ ‚éD
    426 
    427 
    428 8. IDLEƒ‹[ƒv
     411 割込みネスト回数の管理変数
     412
     413例外/割込み受付け時は,受付けた例外/割込み以下の割込みは禁止するが,全
     414割込み禁止状態にはならない.そのため,割込みネスト回数の管理変数をイン
     415クリメントする前に割込みが入る可能性があるため,7-3は使用することがで
     416きない.
     417
     4185で議論した通り,IDLEループをThreadモードで実行するため,7-1ではなく,
     4197-2で判断する必要がある.
     420
     421
     4228. IDLEループ
    429423
    4304248-1
    431  Threadƒ‚[ƒh‚ÅŽÀs
     425 Threadモードで実行
    4324268-2
    433  Handlerƒ‚[ƒh‚ÅŽÀs
    434 
    435 5‚Å‹c˜_‚µ‚½’Ê‚èCThreadƒ‚[ƒh‚ÅŽÀs‚Å‚«‚½•û‚ªƒI[ƒoƒwƒbƒh‚ª¬‚³‚¢D‚Ü
    436 ‚½CThreadƒ‚[ƒh‚ÅŽÀs‚µ‚Ä‚àCŠ„‚荞‚݂̏o“ü‚èŒû‚Ő³‚µ‚­”ñƒ^ƒXƒNƒRƒ“ƒe
    437 ƒLƒXƒg‚Æ”»’è‚Å‚«‚ê‚΁CThreadƒ‚[ƒh‚Å–â‘è‚È‚¢D
    438 
    439 
    440 9DƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚݂̃Tƒ|[ƒg
     427 Handlerモードで実行
     428
     4295で議論した通り,Threadモードで実行できた方がオーバヘッドが小さい.ま
     430た,Threadモードで実行しても,割り込みの出入り口で正しく非タスクコンテ
     431キストと判定できれば,Threadモードで問題ない.
     432
     433
     4349.カーネル管理外の割込みのサポート
    441435
    4424369-1
    443  ƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚Ý‚ðƒTƒ|[ƒg‚µ‚È‚¢
     437 カーネル管理外の割込みをサポートしない
    4444389-2
    445  ƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚Ý‚ðƒTƒ|[ƒg‚·‚é
    446 
    447 ƒxƒNƒ^ƒe[ƒuƒ‹‚ðƒTƒ|[ƒg‚µ‚Ä‚¨‚èCŠ„ž‚݃nƒ“ƒhƒ‰‚àCŒ¾Œê‚Å‹Lq‰Â”\‚Å‚ 
    448 ‚邽‚߁CƒTƒ|[ƒg‚ª—eˆÕ‚Å‚ ‚邽‚߁CƒTƒ|[ƒg‚·‚éD
    449 
    450 
    451 10. CPUƒƒbƒN
     439 カーネル管理外の割込みをサポートする
     440
     441ベクタテーブルをサポートしており,割込みハンドラもC言語で記述可能であ
     442るため,サポートが容易であるため,サポートする.
     443
     444
     44510. CPUロック
    452446
    45344710-1
    454  BASEPRI‚ðŽg—p
     448 BASEPRIを使用
    45544910-2
    456  FAULTMASK/PRIMASK‚ðŽg—p
    457 
    458 ƒJ[ƒlƒ‹‚ÌŠÇ—ŠO‚ÌŠ„ž‚Ý‚ðƒTƒ|[ƒg‚·‚é‚È‚çCBASEPRI‚ðŽg—p‚·‚é•K—v‚ª‚ 
    459 ‚éD
    460 
    461 
    462 11. Š„ž‚݃ƒbƒN‚ÆCPU—áŠO‚ÌŠÖŒW
     450 FAULTMASK/PRIMASKを使用
     451
     452カーネルの管理外の割込みをサポートするなら,BASEPRIを使用する必要があ
     453る.
     454
     455
     45611. 割込みロックとCPU例外の関係
    463457
    46445811-1
    465  BASEPRI‚ðŽg—p
     459 BASEPRIを使用
    46646011-2
    467  FAULTMASK/PRIMASK‚ðŽg—p
    468 
    469 FAULTMASK/PRIMASK‚ðŽg—p‚·‚é‚ƁCNMI ‚Æ Hardware Fault ˆÈŠO‚ÌCPU—áŠO‚à‹Ö
    470 Ž~‚³‚ê‚Ä‚µ‚Ü‚¤D
    471 
    472 BASEPRI‚ð—p‚¢‚é‚ƁCŠ„ž‚݃ƒbƒN’†‚É‚àCPU—áŠO‚ðŽó•t‚¯‚½‚¢ê‡‚́C
    473 BASEPRI‚ð—p‚¢‚āCÅ‚—Dæ“x‚ðCPU—áŠO‚Ì‚½‚߂ɃŠƒU[ƒu‚·‚é•K—v‚ª‚ ‚éD
    474 
    475 Š„ž‚݃ƒbƒNŽž‚àCCPU—áŠO‚ðŽó•t‚¯‚é‚悤‚É‚µ‚½‚¯‚ê‚ÎBASEPRI‚ðŽg—p‚·‚é•K
    476 —v‚ª‚ ‚éD
    477 
    478 ƒÊIRON4.0Žd—l‚Ì3.5.3‚ł́CCPU—áŠO‚Ì—Dæ“x‚ÍŽŸ‚̂悤‚É’è‚ß‚ç‚ê‚Ä‚¢‚éD
    479 
    480 "CPU—áŠOƒnƒ“ƒhƒ‰‚Ì—Dæ‡ˆÊ‚́CCPU—áŠO‚ª”­¶‚µ‚½ˆ—‚Ì—Dæ“x‚ƁCƒfƒBƒX
    481 ƒpƒbƒ`ƒƒ‚Ì—Dæ‡ˆÊ‚Ì‚¢‚¸‚ê‚©‚æ‚è‚à‚‚¢D"
    482 
    483 CPU—áŠO‚ª”­¶‚µ‚½ˆ—‚Ì—Dæ“x‚æ‚è‚à‚‚¢‚Æ‚ ‚é‚̂ŁCCPUƒƒbƒN‚⊄ž‚݃
    484 ƒbƒNó‘Ԃ̃^ƒXƒN‚Å”­¶‚µ‚½ê‡‚Å‚àC—Dæ‚µ‚ÄŽÀs‚³‚ê‚é‚ׂ«‚¾‚Æ‚àl‚¦‚ç
    485 ‚ê‚éD
    486 
    487 ˆê•ûCTOPPERS•W€Š„ž‚ݏˆ—ƒ‚ƒfƒ‹‚ÌŽd—l‘‚ł́CCPU—áŠO‚́CƒvƒƒZƒbƒT–ˆ
    488 ‚ɈقȂ邽‚߁CCPU—áŠO‚̏ˆ—ƒ‚ƒfƒ‹‚Ì•W€‰»ŒŸ“¢‚̑ΏۊO‚Æ‚µ‚Ä‚¢‚éD‚»‚Ì
    489 ‚½‚߁CARM-M‚ł̈µ‚¢‚ðŒˆ‚ß‚ÄCƒ}ƒjƒ
    490 ƒAƒ‹‚É–¾‹L‚·‚ê‚΂悢‚ƍl‚¦‚ç‚ê‚éD
    491 
    492 
    493 12. ŠO•”—Dæ“x‚Æ“à•”—Dæ“x‚Ì•ÏŠ·
    494 
    495 ŠO•”—Dæ“x‚Æ‚ÍAPI‚ÅŽw’è‚·‚銄ž‚Ý—Dæ“x(PRIŒ^)‚Ì‚±‚Æ‚Å‚ ‚èC’l‚ª¬‚³‚¢
    496 ‚Ù‚Ç—Dæ“x‚ª‚‚¢DŠ„ž‚݃nƒ“ƒhƒ‰‚ɂ́C-1‚©‚ç˜A‘±‚µ‚½•‰‚Ì’l‚ðÝ’è‰Â”\‚Å
    497 ‚ ‚éD“à•”—Dæ“x‚́CBASEPRI‚âNVIC‚Ì—Dæ“xƒŒƒWƒXƒ^‚ɐݒ肷‚é’l‚Å‚ ‚éD
    498 
    499 ŽÀ‘•‚³‚ê‚銄ž‚Ý—Dæ“x‚̃rƒbƒg•‚ð TBITW_IPRI ‚Æ‚·‚é‚ƁCÝ’è‰Â”\‚ÈŠO•”
    500 —Dæ“x‚ÍŽŸ‚̂悤‚É‚È‚éD
    501 
    502   TIPM_ENAALLi0j` -(1 << TBITW_IPRI)
    503 
    504 
    505 13. ƒJ[ƒlƒ‹ŠÇ—“à‚̍ō‚—Dæ“x(CPUƒƒbƒNó‘Ô‚Å‚Ì—Dæ“xƒ}ƒXƒN)
    506 
    507 6.‚ŏq‚ׂ½‚悤‚ɁCŠ„ž‚݂̏oŒû‚ÅSVCƒnƒ“ƒhƒ‰‚ðŒÄ‚яo‚·•K—v‚ª‚ ‚邽‚߁C
    508 SVCƒnƒ“ƒhƒ‰‚ÍCPUƒƒbƒNó‘Ô‚ÌBASEPRI‚ɐݒ肷‚é—Dæ“xƒ}ƒXƒN‚æ‚荂‚¢—Dæ“x
    509 ‚ðÝ’è‚·‚é•K—v‚ª‚ ‚éD
    510 
    511 ŽÀ‘•‚³‚ê‚銄ž‚Ý—Dæ“x‚̃rƒbƒg•‚ð TBITW_IPRIC—Dæ“x’†‚̃Tƒu—Dæ“x‚Ì
    512 ƒrƒbƒg•‚ðTBIT_IPRI‚Æ‚·‚é‚ƁCCPUƒƒbƒNó‘ԁiƒJ[ƒlƒ‹ŠÇ—“àŠ„ž‚݂ɐݒè
    513 ‰Â”\‚ȍō‚—Dæ“xj‚Æ‚µ‚ÄŽw’è‰Â”\‚È—Dæ“xƒ}ƒXƒN‚̐ݒè”͈͈͂ȉº‚Ì’l‚Ì”Í
    514 ˆÍ‚Æ‚È‚éD
    515 
    516     -(2^(TBIW_IPRI)) + (2^TBITW_SUBIPRI)) ` -1
    517 
    518 
    519 14. –¢‰ðŒˆ‰Û‘è
    520 
    521 EŠ„ž‚݃ƒbƒN‚ÆCPU—áŠO‚ÌŠÖŒW
    522   BASEPRI‚ðŽg‚Á‚½‚Æ‚µ‚Ä‚àC‚ ‚éCPU—áŠOˆ—’†‚É‘¼‚Ì—áŠO‚ª”­¶‚·‚é‚ƁC‚»
    523   ‚Ì—áŠO‚͎󂯕t‚¯‚ç‚ê‚È‚¢‚½‚߁CITRONŽd—l‚Í–ž‚½‚¹‚È‚¢D
    524   ->‚ ‚«‚ç‚߂ă}ƒjƒ
    525 ƒAƒ‹‹LÚ‚É“¦‚°‚é‚©.
    526   ƒƒ‚ƒŠƒvƒƒeƒNƒVƒ‡ƒ“‚Ì—áŠO‚àƒ}ƒXƒN‰Â”\‚Å‚ ‚邽‚ß—vŒ“™D
    527 
    528 
    529 ˆÈãD
     461 FAULTMASK/PRIMASKを使用
     462
     463FAULTMASK/PRIMASKを使用すると,NMI と Hardware Fault 以外のCPU例外も禁
     464止されてしまう.
     465
     466BASEPRIを用いると,割込みロック中にもCPU例外を受付けたい場合は,
     467BASEPRIを用いて,最高優先度をCPU例外のためにリザーブする必要がある.
     468
     469割込みロック時も,CPU例外を受付けるようにしたければBASEPRIを使用する必
     470要がある.
     471
     472μIRON4.0仕様の3.5.3では,CPU例外の優先度は次のように定められている.
     473
     474"CPU例外ハンドラの優先順位は,CPU例外が発生した処理の優先度と,ディス
     475パッチャの優先順位のいずれかよりも高い."
     476
     477CPU例外が発生した処理の優先度よりも高いとあるので,CPUロックや割込みロ
     478ック状態のタスクで発生した場合でも,優先して実行されるべきだとも考えら
     479れる.
     480
     481一方,TOPPERS標準割込み処理モデルの仕様書では,CPU例外は,プロセッサ毎
     482に異なるため,CPU例外の処理モデルの標準化検討の対象外としている.その
     483ため,ARM-Mでの扱いを決めて,マニュアルに明記すればよいと考えられる.
     484
     485
     48612. 外部優先度と内部優先度の変換
     487
     488外部優先度とはAPIで指定する割込み優先度(PRI型)のことであり,値が小さい
     489ほど優先度が高い.割込みハンドラには,-1から連続した負の値を設定可能で
     490ある.内部優先度は,BASEPRIやNVICの優先度レジスタに設定する値である.
     491
     492実装される割込み優先度のビット幅を TBITW_IPRI とすると,設定可能な外部
     493優先度は次のようになる.
     494
     495  TIPM_ENAALL(=0)〜 -(1 << TBITW_IPRI)
     496
     497
     49813. カーネル管理内の最高優先度(CPUロック状態での優先度マスク)
     499
     5006.で述べたように,割込みの出口でSVCハンドラを呼び出す必要があるため,
     501SVCハンドラはCPUロック状態のBASEPRIに設定する優先度マスクより高い優先度
     502を設定する必要がある.
     503
     504実装される割込み優先度のビット幅を TBITW_IPRI,優先度中のサブ優先度の
     505ビット幅をTBIT_IPRIとすると,CPUロック状態(カーネル管理内割込みに設定
     506可能な最高優先度)として指定可能な優先度マスクの設定範囲は以下の値の範
     507囲となる.
     508
     509    -(2^(TBIW_IPRI)) + (2^TBITW_SUBIPRI)) 〜 -1
     510
     511
     51214. 未解決課題
     513
     514・割込みロックとCPU例外の関係
     515  BASEPRIを使ったとしても,あるCPU例外処理中に他の例外が発生すると,そ
     516  の例外は受け付けられないため,ITRON仕様は満たせない.
     517  ->あきらめてマニュアル記載に逃げるか.
     518  メモリプロテクションの例外もマスク可能であるため要件等.
     519
     520
     521以上.
  • ssp_qb_r5f100le_cs/trunk/arch/arm_m_gcc/prc_insn.h

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    66 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    77 *
    8  *  ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì(1)`(4)‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
    9  *  ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü
    10  *  •ÏEÄ”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
    11  *  (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
    12  *      Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
    13  *      ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    14  *  (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    15  *      —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ
    16 ƒƒ“ƒgi—˜—p
    17  *      ŽÒƒ}ƒjƒ
    18 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
    19  *      ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    20  *  (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    21  *      —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
    22  *      ‚ƁD
    23  *    (a) Ä”z•z‚É”º‚¤ƒhƒLƒ
    24 ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ
    25 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
    26  *        ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    27  *    (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
    28  *        •ñ‚·‚邱‚ƁD
    29  *  (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
    30  *      ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
    31  *      ‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝
    32  *      —R‚ÉŠî‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð
    33  *      –Ɛӂ·‚邱‚ƁD
     8 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     9 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     10 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     11 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     12 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     13 *      スコード中に含まれていること.
     14 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     15 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     16 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     17 *      の無保証規定を掲載すること.
     18 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     19 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     20 *      と.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     24 *        報告すること.
     25 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     26 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     27 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     28 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     29 *      免責すること.
    3430 *
    35  *  –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
    36  *  ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I
    37  *  ‚ɑ΂·‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒF
    38  *  ƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»
    39  *  ‚̐ӔC‚𕉂í‚È‚¢D
     31 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     32 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     33 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     34 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     35 *  の責任を負わない.
    4036 *
    4137 *  @(#) $Id: prc_insn.h 1304 2008-08-27 07:28:36Z ertl-honda $
     
    4440
    4541/*
    46  *  ƒRƒAˆË‘¶‚Ì“ÁŽê–½—߂̃Cƒ“ƒ‰ƒCƒ“ŠÖ”’è‹`iARM-M—pj
     42 *  コア依存の特殊命令のインライン関数定義(ARM-M用)
    4743 */
    4844
     
    5349
    5450/*
    55  *  FAULTMASK‚̃Zƒbƒg
     51 *  FAULTMASKのセット
    5652 */
    5753Inline void
     
    6157
    6258/*
    63  *  FAULTMASK‚̃NƒŠƒA
     59 *  FAULTMASKのクリア
    6460 */
    6561Inline void
     
    6965
    7066/*
    71  *  PRIMASK‚̃Zƒbƒg
     67 *  PRIMASKのセット
    7268 */
    7369Inline void
     
    7773
    7874/*
    79  *  PRIMASK‚̃NƒŠƒA
     75 *  PRIMASKのクリア
    8076 */
    8177Inline void
     
    8581
    8682/*
    87  *  BASEPRI‚̃Zƒbƒg
     83 *  BASEPRIのセット
    8884 */
    8985Inline void
     
    9389
    9490/*
    95  *  BASEPRI‚̎擾
     91 *  BASEPRIの取得
    9692 */
    9793Inline uint32_t
     
    10399
    104100/*
    105  *  CONTROL‚̃Zƒbƒg
     101 *  CONTROLのセット
    106102 */
    107103Inline void
     
    113109
    114110/*
    115  *  CONTROL‚̎擾
     111 *  CONTROLの取得
    116112 */
    117113Inline uint32_t
     
    123119
    124120/*
    125  *  ƒXƒe[ƒ^ƒXƒŒƒWƒXƒ^iCPSRj‚ÌŒ»Ý’l‚̓Ǐo‚µ
     121 *  ステータスレジスタ(CPSR)の現在値の読出し
    126122 */
    127123Inline uint32_t
  • ssp_qb_r5f100le_cs/trunk/arch/arm_m_gcc/prc_kernel.h

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    66 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    77 *
    8  *  ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì(1)`(4)‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
    9  *  ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü
    10  *  •ÏEÄ”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
    11  *  (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
    12  *      Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
    13  *      ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    14  *  (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    15  *      —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ
    16 ƒƒ“ƒgi—˜—p
    17  *      ŽÒƒ}ƒjƒ
    18 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
    19  *      ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    20  *  (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    21  *      —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
    22  *      ‚ƁD
    23  *    (a) Ä”z•z‚É”º‚¤ƒhƒLƒ
    24 ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ
    25 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
    26  *        ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    27  *    (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
    28  *        •ñ‚·‚邱‚ƁD
    29  *  (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
    30  *      ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
    31  *      ‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝
    32  *      —R‚ÉŠî‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð
    33  *      –Ɛӂ·‚邱‚ƁD
     8 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     9 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     10 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     11 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     12 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     13 *      スコード中に含まれていること.
     14 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     15 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     16 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     17 *      の無保証規定を掲載すること.
     18 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     19 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     20 *      と.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     24 *        報告すること.
     25 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     26 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     27 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     28 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     29 *      免責すること.
    3430 *
    35  *  –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
    36  *  ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I
    37  *  ‚ɑ΂·‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒF
    38  *  ƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»
    39  *  ‚̐ӔC‚𕉂í‚È‚¢D
     31 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     32 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     33 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     34 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     35 *  の責任を負わない.
    4036 *
    4137 *  @(#) $Id: prc_kernel.h 1304 2008-08-27 07:28:36Z ertl-honda $
     
    4339
    4440/*
    45  *              kernel.h‚̃vƒƒZƒbƒTˆË‘¶•”iARM-M—pj
     41 *              kernel.hのプロセッサ依存部(ARM-M用)
    4642 *
    47  *  ‚±‚̃Cƒ“ƒNƒ‹[ƒhƒtƒ@ƒCƒ‹‚́Ctarget_kernel.hi‚Ü‚½‚́C‚»‚±‚©‚çƒCƒ“ƒN
    48  *  ƒ‹[ƒh‚³‚ê‚éƒtƒ@ƒCƒ‹j‚Ì‚Ý‚©‚çƒCƒ“ƒNƒ‹[ƒh‚³‚ê‚éD‘¼‚̃tƒ@ƒCƒ‹‚©‚ç
    49  *  ’¼ÚƒCƒ“ƒNƒ‹[ƒh‚µ‚Ä‚Í‚È‚ç‚È‚¢D
     43 *  このインクルードファイルは,target_kernel.h(または,そこからインク
     44 *  ルードされるファイル)のみからインクルードされる.他のファイルから
     45 *  直接インクルードしてはならない.
    5046 */
    5147
     
    5450
    5551/*
    56  *  ƒTƒ|[ƒg‚·‚é‹@”\‚Ì’è‹`
     52 *  サポートする機能の定義
    5753 */
    58 #define TOPPERS_TARGET_SUPPORT_DIS_INT            /* dis_int‚ðƒTƒ|[ƒg‚·‚é */
    59 #define TOPPERS_TARGET_SUPPORT_ENA_INT            /* ena_int‚ðƒTƒ|[ƒg‚·‚é */
     54#define TOPPERS_TARGET_SUPPORT_DIS_INT            /* dis_intをサポートする */
     55#define TOPPERS_TARGET_SUPPORT_ENA_INT            /* ena_intをサポートする */
    6056
    61 #define TMAX_INTPRI             (-1)            /* Š„ž‚Ý—Dæ“x‚̍őå’liÅ’á’lj*/
     57#define TMAX_INTPRI             (-1)            /* 割込み優先度の最大値(最低値)*/
    6258
    6359#ifndef TOPPERS_MACRO_ONLY
  • ssp_qb_r5f100le_cs/trunk/arch/arm_m_gcc/prc_rename.def

    • Property svn:mime-type set to text/plain; charset=shift_jis
  • ssp_qb_r5f100le_cs/trunk/arch/arm_m_gcc/prc_rename.h

    • Property svn:mime-type set to text/plain; charset=shift_jis
  • ssp_qb_r5f100le_cs/trunk/arch/arm_m_gcc/prc_sil.h

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    66 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    77 *
    8  *  ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì(1)`(4)‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
    9  *  ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü
    10  *  •ÏEÄ”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
    11  *  (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
    12  *      Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
    13  *      ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    14  *  (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    15  *      —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ
    16 ƒƒ“ƒgi—˜—p
    17  *      ŽÒƒ}ƒjƒ
    18 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
    19  *      ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    20  *  (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    21  *      —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
    22  *      ‚ƁD
    23  *    (a) Ä”z•z‚É”º‚¤ƒhƒLƒ
    24 ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ
    25 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
    26  *        ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    27  *    (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
    28  *        •ñ‚·‚邱‚ƁD
    29  *  (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
    30  *      ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
    31  *      ‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝
    32  *      —R‚ÉŠî‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð
    33  *      –Ɛӂ·‚邱‚ƁD
     8 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     9 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     10 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     11 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     12 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     13 *      スコード中に含まれていること.
     14 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     15 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     16 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     17 *      の無保証規定を掲載すること.
     18 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     19 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     20 *      と.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     24 *        報告すること.
     25 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     26 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     27 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     28 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     29 *      免責すること.
    3430 *
    35  *  –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
    36  *  ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I
    37  *  ‚ɑ΂·‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒF
    38  *  ƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»
    39  *  ‚̐ӔC‚𕉂í‚È‚¢D
     31 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     32 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     33 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     34 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     35 *  の責任を負わない.
    4036 *
    4137 *  @(#) $Id: prc_sil.h 1304 2008-08-27 07:28:36Z ertl-honda $
     
    4339
    4440/*
    45  *   sil.h‚̃vƒƒZƒbƒTˆË‘¶•”iARM-M—pj
     41 *   sil.hのプロセッサ依存部(ARM-M用)
    4642 */
    4743
     
    5248
    5349/*
    54  *  NMI‚ðœ‚­‚·‚ׂĂ̊„ž‚Ý‚Ì‹ÖŽ~
     50 *  NMIを除くすべての割込みの禁止
    5551 */
    5652Inline bool_t
     
    7975
    8076/*
    81  *  ‘SŠ„ž‚݃ƒbƒNó‘Ԃ̐§Œä
     77 *  全割込みロック状態の制御
    8278 */
    8379#define SIL_PRE_LOC      bool_t  TOPPERS_locked
     
    8682
    8783/*
    88  *  ƒGƒ“ƒfƒBƒAƒ“‚Ì’è‹`
     84 *  エンディアンの定義
    8985 */
    9086
  • ssp_qb_r5f100le_cs/trunk/arch/arm_m_gcc/prc_stddef.h

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    66 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    77 *
    8  *  ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì(1)`(4)‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
    9  *  ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü
    10  *  •ÏEÄ”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
    11  *  (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
    12  *      Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
    13  *      ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    14  *  (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    15  *      —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ
    16 ƒƒ“ƒgi—˜—p
    17  *      ŽÒƒ}ƒjƒ
    18 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
    19  *      ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    20  *  (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    21  *      —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
    22  *      ‚ƁD
    23  *    (a) Ä”z•z‚É”º‚¤ƒhƒLƒ
    24 ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ
    25 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
    26  *        ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    27  *    (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
    28  *        •ñ‚·‚邱‚ƁD
    29  *  (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
    30  *      ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
    31  *      ‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝
    32  *      —R‚ÉŠî‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð
    33  *      –Ɛӂ·‚邱‚ƁD
     8 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     9 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     10 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     11 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     12 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     13 *      スコード中に含まれていること.
     14 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     15 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     16 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     17 *      の無保証規定を掲載すること.
     18 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     19 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     20 *      と.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     24 *        報告すること.
     25 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     26 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     27 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     28 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     29 *      免責すること.
    3430 *
    35  *  –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
    36  *  ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I
    37  *  ‚ɑ΂·‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒF
    38  *  ƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»
    39  *  ‚̐ӔC‚𕉂í‚È‚¢D
     31 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     32 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     33 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     34 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     35 *  の責任を負わない.
    4036 *
    4137 *  @(#) $Id: prc_stddef.h 1304 2008-08-27 07:28:36Z ertl-honda $
     
    4339
    4440/*
    45  *  t_stddef.h‚̃vƒƒZƒbƒTˆË‘¶•”iARM-M—pj
     41 *  t_stddef.hのプロセッサ依存部(ARM-M用)
    4642 *
    47  *  ‚±‚̃Cƒ“ƒNƒ‹[ƒhƒtƒ@ƒCƒ‹‚́Ctarget_stddef.hi‚Ü‚½‚́C‚»‚±‚©‚çƒCƒ“ƒN
    48  *  ƒ‹[ƒh‚³‚ê‚éƒtƒ@ƒCƒ‹j‚Ì‚Ý‚©‚çƒCƒ“ƒNƒ‹[ƒh‚³‚ê‚éD‘¼‚̃tƒ@ƒCƒ‹‚©‚ç
    49  *  ’¼ÚƒCƒ“ƒNƒ‹[ƒh‚µ‚Ä‚Í‚È‚ç‚È‚¢D
     43 *  このインクルードファイルは,target_stddef.h(または,そこからインク
     44 *  ルードされるファイル)のみからインクルードされる.他のファイルから
     45 *  直接インクルードしてはならない.
    5046 */
    5147
     
    5450
    5551/*
    56  *  ƒ^[ƒQƒbƒg‚ðŽ¯•Ê‚·‚邽‚߂̃}ƒNƒ‚Ì’è‹`
     52 *  ターゲットを識別するためのマクロの定義
    5753 */
    58 #define TOPPERS_ARM_M           /* ƒvƒƒZƒbƒT—ªÌ */
     54#define TOPPERS_ARM_M           /* プロセッサ略称 */
    5955
    6056/*
    61  *  ƒXƒ^ƒbƒN‚ÌŒ^
    62  *  ARM‚ł́CƒXƒ^ƒbƒN‚ð8byte‹«ŠE‚É”z’u‚·‚é•K—v‚ª‚ ‚é
     57 *  スタックの型
     58 *  ARMでは,スタックを8byte境界に配置する必要がある
    6359 */
    6460#define TOPPERS_STK_T  long long
  • ssp_qb_r5f100le_cs/trunk/arch/arm_m_gcc/prc_support.S

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    77 *  Copyright (C) 2010 by Meika Sugimoto
    88 *
    9  *  ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì(1)`(4)‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
    10  *  ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü
    11  *  •ÏEÄ”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
    12  *  (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
    13  *      Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
    14  *      ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    15  *  (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    16  *      —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ
    17 ƒƒ“ƒgi—˜—p
    18  *      ŽÒƒ}ƒjƒ
    19 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
    20  *      ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    21  *  (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    22  *      —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
    23  *      ‚ƁD
    24  *    (a) Ä”z•z‚É”º‚¤ƒhƒLƒ
    25 ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ
    26 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
    27  *        ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    28  *    (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
    29  *        •ñ‚·‚邱‚ƁD
    30  *  (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
    31  *      ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
    32  *      ‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝
    33  *      —R‚ÉŠî‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð
    34  *      –Ɛӂ·‚邱‚ƁD
     9 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     10 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     11 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     21 *      と.
     22 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     23 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     24 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     25 *        報告すること.
     26 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     27 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     28 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     29 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     30 *      免責すること.
    3531 *
    36  *  –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
    37  *  ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I
    38  *  ‚ɑ΂·‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒF
    39  *  ƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»
    40  *  ‚̐ӔC‚𕉂í‚È‚¢D
     32 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     33 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     34 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     35 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     36 *  の責任を負わない.
    4137 *
    4238 */
    4339
    4440/*
    45  *  ƒvƒƒZƒbƒTˆË‘¶ƒ‚ƒWƒ
    46 [ƒ‹ ƒAƒZƒ“ƒuƒŠŒ¾Œê•”iARM-M—pj
     41 *  プロセッサ依存モジュール アセンブリ言語部(ARM-M用)
    4742 */
    4843
    4944#define TOPPERS_MACRO_ONLY
    50 #define UINT_C(val)             (val)           /* uint_tŒ^‚̒萔‚ðì‚éƒ}ƒNƒ */
    51 #define ULONG_C(val)    (val)           /* ulong_tŒ^‚̒萔‚ðì‚éƒ}ƒNƒ */
    52 #define CAST(type, val) (val)           /* Œ^ƒLƒƒƒXƒg‚ðs‚¤ƒ}ƒNƒ */
     45#define UINT_C(val)             (val)           /* uint_t型の定数を作るマクロ */
     46#define ULONG_C(val)    (val)           /* ulong_t型の定数を作るマクロ */
     47#define CAST(type, val) (val)           /* 型キャストを行うマクロ */
    5348
    5449#include "kernel_impl.h"
     
    5954
    6055/*
    61  *  ŠO•”ŽQÆ
     56 *  外部参照
    6257 */
    6358        .global         intnest
    6459
    6560/*
    66  *  CPU—áŠOƒGƒ“ƒgƒŠ
     61 *  CPU例外エントリ
    6762 *
    68  *  Š„ž‚݃Gƒ“ƒgƒŠ‚Əˆ—‚Ì“à—e‚Í“¯“™‚¾‚ªCƒƒO‚ÌŽí—Þ‚ªˆÙ‚Ȃ邽‚߁C
    69  *  •ª‚¯‚Ä‚¢‚éD
     63 *  割込みエントリと処理の内容は同等だが,ログの種類が異なるため,
     64 *  分けている.
    7065 */
    7166        .align 2
     
    7671exc_entry:
    7772        /*
    78          *  —áŠO/Š„ž‚Ý‚ª”­¶‚·‚é‚ƁC”­¶Žž‚ɃAƒNƒeƒBƒu‚ȃXƒ^ƒbƒN‚ɃXƒNƒ‰
    79          *  ƒbƒ`ƒŒƒWƒXƒ^“™‚ª•Û‘¶‚³‚ê‚éD
    80          *  ‚±‚Ì“à—e‚ɉÁ‚¦‚āCCPU—áŠOƒnƒ“ƒhƒ‰‚ւ̏î•ñ‚Æ‚µ‚āCbasepri ‚Ì’l‚ƁC
    81          *  EXC_RETURN‚̏î•ñ‚ð‰Á‚¦‚Ä•Û‘¶‚·‚éDbasepri‚Ì’l‚́CCPU—áŠO‚©‚ç‚Ì
    82          *  ƒŠƒ^[ƒ“Žž‚ÉŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‚Ì’l‚ðŒ³‚É–ß‚·‚½‚ß‚É‚à—p‚¢‚ç‚ê‚éD
     73         *  例外/割込みが発生すると,発生時にアクティブなスタックにスクラ
     74         *  ッチレジスタ等が保存される.
     75         *  この内容に加えて,CPU例外ハンドラへの情報として,basepri の値と,
     76         *  EXC_RETURNの情報を加えて保存する.basepriの値は,CPU例外からの
     77         *  リターン時に割込み優先度マスクの値を元に戻すためにも用いられる.
    8378         *
    8479         *   -----------
     
    107102
    108103        /*
    109          *  Š„ž‚Ý”­¶Žž‚ÌŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‚ðƒXƒ^ƒbƒN‚É•Û‘¶‚·‚邽‚ߎ擾
    110          */
    111         mrs   r2, basepri                       /* baepri‚Ì’l‚ðŽæ“¾ */
    112         push  {r2}                                      /* Š„ž‚Ý”­¶Žž‚ÌŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‚ðÏ‚Þ */
    113         push  {lr}                                      /* EXC_RETURN ‚ðÏ‚Þ                      */
    114         mov   r0, sp                            /* CPU—áŠOƒnƒ“ƒhƒ‰‚ւ̈ø”‚Æ‚È‚é */
    115        
    116         ldr   r1 , =lock_flag           /* CPUƒƒbƒNƒtƒ‰ƒO‚ð•Û‘¶ */
     104         *  割込み発生時の割込み優先度マスクをスタックに保存するため取得
     105         */
     106        mrs   r2, basepri                       /* baepriの値を取得 */
     107        push  {r2}                                      /* 割込み発生時の割込み優先度マスクを積む */
     108        push  {lr}                                      /* EXC_RETURN を積む                         */
     109        mov   r0, sp                            /* CPU例外ハンドラへの引数となる */
     110       
     111        ldr   r1 , =lock_flag           /* CPUロックフラグを保存 */
    117112        ldr   r1 , [r1]
    118113        push  {r1}
    119114       
    120         /* Š„ž‚݃lƒXƒg”‚̉ÁŽZ */
     115        /* 割込みネスト数の加算 */
    121116        ldr r1 , =intnest
    122117        ldr r3 , [r1]
     
    125120
    126121        /*
    127          *  ‹¤’ʏˆ—
     122         *  共通処理
    128123         */
    129124exc_entry_2:
    130         mrs   r3, ipsr               /* ƒnƒ“ƒhƒ‰ƒAƒhƒŒƒX‚ðŽæ“¾ */
     125        mrs   r3, ipsr               /* ハンドラアドレスを取得 */
    131126        ldr   r1, =_kernel_exc_tbl
    132127        ldr   r2, [r1, r3, lsl #2]
     
    134129#ifdef LOG_EXC_ENTER
    135130        push  {r0, r2, r3}
    136         mov   r0, r3                 /* —áŠO”ԍ†‚ðƒpƒ‰ƒ[ƒ^‚É  */
    137         bl    log_exc_enter          /* log_exc_enter‚ðŒÄ‚яo‚· */
     131        mov   r0, r3                 /* 例外番号をパラメータに  */
     132        bl    log_exc_enter          /* log_exc_enterを呼び出す */
    138133        pop   {r0, r2, r3}
    139134#endif /* LOG_EXC_ENTER */
    140135
    141136#ifdef LOG_EXC_LEAVE
    142         push  { r3 }                   /* —áŠO”ԍ†‚ðƒXƒ^ƒbƒN‚Ö    */
     137        push  { r3 }                   /* 例外番号をスタックへ    */
    143138#endif /* LOG_EXC_LEAVE */
    144139
    145140        /*
    146          *  CPU—áŠOƒnƒ“ƒhƒ‰‚̌Ăяo‚µ
     141         *  CPU例外ハンドラの呼び出し
    147142         */
    148143        blx   r2
    149144
    150         /* CPUƒƒbƒNƒtƒ‰ƒO‚ðŒ³‚É–ß‚· */
     145        /* CPUロックフラグを元に戻す */
    151146        pop   {r0}
    152147        ldr   r1 , =lock_flag
     
    154149       
    155150#ifdef LOG_EXC_LEAVE
    156         pop   { r0 }                   /* —áŠO”ԍ†‚ðˆø”‚É        */
    157         bl    log_exc_leave          /* log_exc_leave‚ðŒÄ‚яo‚· */
     151        pop   { r0 }                   /* 例外番号を引数に        */
     152        bl    log_exc_leave          /* log_exc_leaveを呼び出す */
    158153#endif /* LOG_EXC_LEAVE */
    159154       
     
    162157
    163158/*
    164  *  Š„ž‚݃Gƒ“ƒgƒŠ
     159 *  割込みエントリ
    165160 */
    166161        .align 2
     
    171166int_entry:
    172167        /*
    173          *      Š„ž‚Ý”­¶Žž‚ÌŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‚ðƒXƒ^ƒbƒN‚É•Û‘¶‚·‚邽‚ߎ擾
    174          */
    175         mrs   r2, basepri                         /* baepri‚Ì’l‚ðŽæ“¾ */
    176         push  {r2}                                       /* Š„ž‚Ý”­¶Žž‚ÌŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‚ðÏ‚Þ */
    177         push  {lr}                                       /* EXC_RETURN ‚ðÏ‚Þ                     */
    178         mov   r0, sp                             /* –¢’è‹`‚ÌŠ„ž‚Ý‚ª”­¶‚µ‚½ê‡‚̏î•ñ‚Æ‚·‚é */
    179        
    180         /*
    181          *      ‹¤’ʏˆ—
     168         *      割込み発生時の割込み優先度マスクをスタックに保存するため取得
     169         */
     170        mrs   r2, basepri                         /* baepriの値を取得 */
     171        push  {r2}                                       /* 割込み発生時の割込み優先度マスクを積む */
     172        push  {lr}                                       /* EXC_RETURN を積む                        */
     173        mov   r0, sp                             /* 未定義の割込みが発生した場合の情報とする */
     174       
     175        /*
     176         *      共通処理
    182177         */
    183178int_entry_2:
    184         /* Š„ž‚݃lƒXƒg”‚̉ÁŽZ */
     179        /* 割込みネスト数の加算 */
    185180        ldr r1 , =intnest
    186181        ldr r3 , [r1]
     
    188183        str r3 , [r1]
    189184       
    190         mrs   r3, ipsr                           /* ƒnƒ“ƒhƒ‰ƒAƒhƒŒƒX‚ðŽæ“¾ */
     185        mrs   r3, ipsr                           /* ハンドラアドレスを取得 */
    191186        ldr   r1, =_kernel_exc_tbl
    192187        ldr   r2, [r1, r3, lsl #2]
     
    194189#ifdef LOG_INH_ENTER
    195190        push  {r0,r2,r3}
    196         mov   r0, r3                 /* Š„ž‚ݔԍ†‚ðƒpƒ‰ƒ[ƒ^‚É  */
    197         bl    log_inh_enter          /* log_inh_enter‚ðŒÄ‚яo‚· */
     191        mov   r0, r3                 /* 割込み番号をパラメータに  */
     192        bl    log_inh_enter          /* log_inh_enterを呼び出す */
    198193        pop   { r0,r2,r3 }
    199194#endif /* LOG_INH_ENTER */
    200195
    201196#ifdef LOG_INH_LEAVE
    202         push  { r3 }                   /* Š„ž‚ݔԍ†‚ðƒXƒ^ƒbƒN‚Ö    */
     197        push  { r3 }                   /* 割込み番号をスタックへ    */
    203198#endif /* LOG_INH_LEAVE */
    204199
    205200        /*
    206          *  CPU—áŠOƒnƒ“ƒhƒ‰‚̌Ăяo‚µ
     201         *  CPU例外ハンドラの呼び出し
    207202         */
    208203        blx   r2
    209204       
    210205#ifdef LOG_INH_LEAVE
    211         pop   { r0 }                   /* Š„ž‚ݔԍ†‚ðˆø”‚É        */
    212         bl    log_inh_leave          /* log_inh_leave‚ðŒÄ‚яo‚· */
     206        pop   { r0 }                   /* 割込み番号を引数に        */
     207        bl    log_inh_leave          /* log_inh_leaveを呼び出す */
    213208#endif /* LOG_INH_LEAVE */
    214209
    215210/*
    216  *  Š„ž‚Ý/—áŠOoŒû
     211 *  割込み/例外出口
    217212 *
    218  *  ret_exc/ret_int‚́CCPU—áŠO/Š„ž‚݃nƒ“ƒhƒ‰‚©‚ç–ß‚Á‚½’¼Œã‚ÉŽÀs‚·‚é
    219  *  ƒ‹[ƒ`ƒ“‚Å‚ ‚éD
     213 *  ret_exc/ret_intは,CPU例外/割込みハンドラから戻った直後に実行する
     214 *  ルーチンである.
    220215 */
    221216ret_exc:
    222217ret_int:
    223218        /*
    224          *  Š„ž‚݃ƒbƒNó‘Ô‚Æ‚·‚éD‚±‚ÌŽž“_‚ł́CCPUƒƒbƒNó‘Ô‚É‚Í‚È‚ç‚È‚¢
    225          * ibasepri‚Ælock_flag‚Æsaved_iipm‚͍XV‚µ‚È‚¢jD
    226          *
    227          *  Š„ž‚݃ƒbƒNó‘Ô‚Æ‚·‚é‚̂́C–ß‚èæ‚̃Rƒ“ƒeƒLƒXƒg‚̃`ƒFƒbƒN‚ƁC
    228          *  –ß‚èæ‚ª”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚Å‚ ‚Á‚½ê‡‚̃Šƒ^[ƒ“‚ðƒAƒgƒ~ƒbƒN
    229          *  ‚ɍs‚¤‚½‚ß‚Å‚ ‚éDbsepri‚ðCPUƒƒbƒN‚Ì’l‚É‚·‚邱‚Æ‚Å‚àƒAƒgƒ~ƒb
    230          *  ƒN‚ȃ`ƒFƒbƒN‚Æ•œ‹A‚͉”\‚Å‚ ‚邪CŠ„ž‚Ý‚©‚烊ƒ^[ƒ“‚µ‚Ä‚àC
    231          *  basepri ‚̐ݒè“à—e‚ÍŒ³‚É–ß‚ç‚È‚¢‚½‚߁CŽg—p‚·‚邱‚Æ‚ª‚Å‚«‚È‚¢D
    232          *  ˆê•ûCFAULTMASK‚́CŠ„ž‚Ý‚©‚ç‚̃Šƒ^[ƒ“ˆ—‚É‚æ‚Á‚āC'0'‚ɃNƒŠ
    233          *  ƒA‚³‚ê‚éD
     219         *  割込みロック状態とする.この時点では,CPUロック状態にはならない
     220         * (basepriとlock_flagとsaved_iipmは更新しない).
     221         *
     222         *  割込みロック状態とするのは,戻り先のコンテキストのチェックと,
     223         *  戻り先が非タスクコンテキストであった場合のリターンをアトミック
     224         *  に行うためである.bsepriをCPUロックの値にすることでもアトミッ
     225         *  クなチェックと復帰は可能であるが,割込みからリターンしても,
     226         *  basepri の設定内容は元に戻らないため,使用することができない.
     227         *  一方,FAULTMASKは,割込みからのリターン処理によって,'0'にクリ
     228         *  アされる.
    234229         */
    235230        cpsid f
    236231       
    237232        /*
    238          *  –ß‚èæ‚̃Rƒ“ƒeƒLƒXƒg‚Ì”»’è
     233         *  戻り先のコンテキストの判定
    239234         *
    240          *  intnest‚ª0‚©‚Ç‚¤‚©‚Å”»’f‚·‚é
     235         *  intnestが0かどうかで判断する
    241236         * 
    242237         */
    243         /* Š„ž‚݃lƒXƒg”‚ÌŒ¸ŽZ */
     238        /* 割込みネスト数の減算 */
    244239        ldr r1 , =intnest
    245240        ldr r3 , [r1]
     
    251246       
    252247        /*
    253          *  ˆê’i–Ú‚ÌŠ„ž‚݂̏oŒûˆ—
     248         *  一段目の割込みの出口処理
    254249         */
    255250ret_int_1:
    256251        /*
    257          *  ‚±‚±‚É‚ÍŠ„ž‚݃ƒbƒNó‘ԁiFAULTMASK‚ªƒZƒbƒgj‚³‚ꂽó‘Ô‚Å—ˆ‚éD
    258          *  Threadƒ‚[ƒh‚©‚ç‚̃Šƒ^[ƒ“‚É‚æ‚莩“®“I‚ÉŠ„ž‚݃ƒbƒN‰ðœó‘Ô‚É‚È‚éD
    259          *  Š„ž‚Ý—Dæ“xƒ}ƒXƒN‚ÍŠ„ž‚Ý‘O‚ɏó‘Ô‚É–ß‚·D
     252         *  ここには割込みロック状態(FAULTMASKがセット)された状態で来る.
     253         *  Threadモードからのリターンにより自動的に割込みロック解除状態になる.
     254         *  割込み優先度マスクは割込み前に状態に戻す.
    260255         */
    261256        pop             { r2 }
    262257        pop             { r1 }
    263         msr   basepri, r1                         /* Š„ž‚Ý—Dæ“xƒ}ƒXƒN‚ðŠ„ž‚Ý‘O‚ɏó‘Ô‚Ö */
    264         bx        r2                                      /* ƒŠƒ^[ƒ“ */
     258        msr   basepri, r1                         /* 割込み優先度マスクを割込み前に状態へ */
     259        bx        r2                                      /* リターン */
    265260       
    266261ret_int_2:
    267         ldr   r0, =reqflg             /* reqflg‚ªfalse‚È‚ç‚»‚Ì‚Ü‚Ü–ß‚é */
     262        ldr   r0, =reqflg             /* reqflgがfalseならそのまま戻る */
    268263        ldr   r1, [r0]
    269264        cmp   r1 , #0
    270         beq    ret_int_1           /* false‚È‚çret_int_1‚Ö           */
     265        beq    ret_int_1           /* falseならret_int_1へ           */
    271266ret_int_3:
    272         mov   r1, #0                   /* reqflg‚ðfalse‚É */
     267        mov   r1, #0                   /* reqflgをfalseに */
    273268        str   r1, [r0]
    274269       
    275270        /*
    276          *  CPUƒƒbƒNó‘ԂɈڍs‚·‚éD
    277          *
    278          *  ƒJ[ƒlƒ‹‚ÌŠÇ—“à‚ÌŠ„ž‚Ý‚ð‹ÖŽ~‚·‚é‚悤‚Ébasepri‚ðÝ’肵C
    279          *  lock_flag‚ðXV‚·‚éD
    280          *  ‚±‚ÌŽž“_‚ÅCPUƒƒbƒNó‘Ô‚Æ‚·‚é‚̂́Cdispatcher‚Ö•ªŠò‚·‚鎞‚É
    281          *  CPUƒƒbƒNó‘Ô‚É‚È‚Á‚Ä‚¢‚é•K—v‚ª‚ ‚邽‚ß‚Å‚ ‚éD
    282      *  ‚È‚¨C‚±‚̏ˆ—‚ÌŒãCThreadƒ‚[ƒh‚ւ̈ڍsˆ—‚ðs‚È‚¤‚½‚߁CŠ„ž‚Ý
    283      *  ƒƒbƒNó‘Ô(FAULTMASK‚ð"1")‚Í•ÛŽ‚·‚éD
    284          */
    285         ldr   r1, =IIPM_LOCK              /* CPUƒƒbƒNó‘Ô */
     271         *  CPUロック状態に移行する.
     272         *
     273         *  カーネルの管理内の割込みを禁止するようにbasepriを設定し,
     274         *  lock_flagを更新する.
     275         *  この時点でCPUロック状態とするのは,dispatcherへ分岐する時に
     276         *  CPUロック状態になっている必要があるためである.
     277     *  なお,この処理の後,Threadモードへの移行処理を行なうため,割込み
     278     *  ロック状態(FAULTMASKを"1")は保持する.
     279         */
     280        ldr   r1, =IIPM_LOCK              /* CPUロック状態 */
    286281        msr   basepri, r1
    287         mov   r1, #0x01                           /* lock_flag ‚ð true‚É */
     282        mov   r1, #0x01                           /* lock_flag を trueに */
    288283        ldr   r0, =lock_flag
    289284        str   r1, [r0]
    290285       
    291286        /*
    292          *  lr‚ðŽæ‚èo‚·D‚½‚¾‚µ’x‰„ƒfƒBƒXƒpƒbƒ`‚̍ۂɂàŽg‚¤‚½‚߁C
    293          *  ƒXƒ^ƒbƒNƒ|ƒCƒ“ƒ^‚Í‘€ì‚µ‚È‚¢D
     287         *  lrを取り出す.ただし遅延ディスパッチの際にも使うため,
     288         *  スタックポインタは操作しない.
    294289         */
    295290       
     
    297292       
    298293        /*
    299          *  Threadƒ‚[ƒh‚ֈڍs‚·‚éD
    300          *
    301          *  dispatcher‚âcall_texrn‚ðŒÄ‚яo‚·ê‡‚́CThreadƒ‚[ƒh‚Å‚ ‚é•K
    302          *  —v‚ª‚ ‚邽‚߁CPSPƒXƒ^ƒbƒNã‚Ƀ_ƒ~[‚Ì—áŠOƒtƒŒ[ƒ€‚ð’u‚¢‚āC
    303          *  ‹[Ž—“I‚ÉŠ„ž‚݃nƒ“ƒhƒ‰‚©‚烊ƒ^[ƒ“‚·‚éD
    304          *  ƒŠƒ^[ƒ“‚Æ“¯Žž‚ÉFAULTMASK‚ªŽ©“®“I‚ɃNƒŠƒA‚³‚êCƒJ[ƒlƒ‹ŠÇ—ŠO‚Ì
    305          *  Š„ž‚Ý‚ª‹–‰Â‚³‚ê‚éD
     294         *  Threadモードへ移行する.
     295         *
     296         *  dispatcherやcall_texrnを呼び出す場合は,Threadモードである必
     297         *  要があるため,PSPスタック上にダミーの例外フレームを置いて,
     298         *  擬似的に割込みハンドラからリターンする.
     299         *  リターンと同時にFAULTMASKが自動的にクリアされ,カーネル管理外の
     300         *  割込みが許可される.
    306301         */
    307302        ldr   r0, =ret_int_4              /* PC   */
    308         ldr   r1, =EPSR_T                         /* xPSR(Tƒrƒbƒg‚ª'1'‚Å‚ ‚é•K—v‚ª‚ ‚é) */
    309         stmfd sp!, {r0-r1}                        /* ƒ_ƒ~[ƒtƒŒ[ƒ€‚ðƒXƒ^ƒbƒNã‚ɐςޠ  */
    310         sub   sp, #(EXC_FRAME_SIZE - (4*2)) /* r0-r3,r12,lr‚Ì“à—e‚͐ݒ肷‚é•K—v‚ª‚È‚¢ */
    311         bx        r2                                      /* Threadƒ‚[ƒh‚ֈڍs */
     303        ldr   r1, =EPSR_T                         /* xPSR(Tビットが'1'である必要がある) */
     304        stmfd sp!, {r0-r1}                        /* ダミーフレームをスタック上に積む   */
     305        sub   sp, #(EXC_FRAME_SIZE - (4*2)) /* r0-r3,r12,lrの内容は設定する必要がない */
     306        bx        r2                                      /* Threadモードへ移行 */
    312307   
    313308ret_int_4:
    314         bl    search_schedtsk           /* Š„ž‚Ý’†‚Å‹N“®‚³‚ꂽƒ^ƒXƒN‚ðŽÀs */
     309        bl    search_schedtsk           /* 割込み中で起動されたタスクを実行 */
    315310        bl    run_task
    316311ret_int_r:
    317         svc   0                                    /* SVC‚̌Ăяo‚µ */
    318        
    319 /*
    320  *  ’x‰„ƒfƒBƒXƒpƒbƒ`‚©‚ç‚Ì•œ‹AŽž‚Ɉꎞ“I‚ÉŠ„ž‚Ý
    321  *  ƒRƒ“ƒeƒLƒXƒg‚Ɉڍs‚·‚邽‚ß‚ÌSVCƒR[ƒ‹ƒnƒ“ƒhƒ‰
     312        svc   0                                    /* SVCの呼び出し */
     313       
     314/*
     315 *  遅延ディスパッチからの復帰時に一時的に割込み
     316 *  コンテキストに移行するためのSVCコールハンドラ
    322317 */
    323318
     
    328323kernel_svc_handler:
    329324        /*
    330          *  Š„ž‚ݏˆ—‚©‚ç‚̃Šƒ^[ƒ“‚É‚æ‚èCCPUƒƒbƒN‰ðœó‘ԂɈڍs‚·‚é‚æ
    331          *  ‚¤€”õ‚·‚éD
    332          */
    333         cpsid f                                                                 /* Š„ž‚݃ƒbƒNó‘Ô‚Ö */
    334         ldr             r2 , [ sp , #(EXC_FRAME_SIZE) ] /* lr‚ðƒXƒ^ƒbƒN‚©‚çŽæ“¾ */
    335         add             sp, #EXC_FRAME_SIZE + 8                 /* ƒXƒ^ƒbƒN‚ðŽÌ‚Ä‚é     */
     325         *  割込み処理からのリターンにより,CPUロック解除状態に移行するよ
     326         *  う準備する.
     327         */
     328        cpsid f                                                                 /* 割込みロック状態へ */
     329        ldr             r2 , [ sp , #(EXC_FRAME_SIZE) ] /* lrをスタックから取得  */
     330        add             sp, #EXC_FRAME_SIZE + 8                 /* スタックを捨てる     */
    336331        mov             r0, #0
    337         ldr             r1, =lock_flag                                  /* CPUƒƒbƒN‰ðœó‘Ô‚Ö */
     332        ldr             r1, =lock_flag                                  /* CPUロック解除状態へ */
    338333        str             r0, [r1]
    339334        msr             basepri , r0
    340         bx              r2                                                              /* ƒŠƒ^[ƒ“       */
    341 
    342 /*
    343  *  ƒfƒBƒXƒpƒbƒ`ƒƒ‚Ì“®ìŠJŽn
     335        bx              r2                                                              /* リターン   */
     336
     337/*
     338 *  ディスパッチャの動作開始
    344339 */
    345340        .align  2
     
    349344start_dispatch:
    350345        /*
    351          *  ‚±‚̃‹[ƒ`ƒ“‚́CƒJ[ƒlƒ‹‹N“®Žž‚ɁC‚·‚ׂĂ̊„ž‚Ý‚ð‹ÖŽ~‚µ‚½ó‘Ô
    352          * iŠ„ž‚݃ƒbƒNó‘Ô‚Æ“¯“™j‚ŌĂяo‚³‚ê‚éD‚Ü‚½CŠ„ž‚݃‚[ƒhi”ñ
    353          *  ƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚Æ“¯“™j‚ŌĂяo‚³‚ê‚邱‚Æ‚ð‘z’肵‚Ä‚¢‚éD
    354          *
    355          *  prc_initialize‚ŁClock_flag‚ðtrue‚ɁCsaved_iipm‚ðIIPM_ENAALL‚É
    356          *  ‰Šú‰»‚µ‚Ä‚¢‚邽‚߁CƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚Ý‚ð‹–‰Â‚·‚邱‚ƂŁC
    357          *  CPUƒƒbƒNó‘ԁEiƒ‚ƒfƒ‹ã‚́jŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‘S‰ðœó‘Ô‚É‚È‚éD
    358          *  ‚Ü‚½Ctask_initialize‚Ådisdsp‚ðfalse‚ɏ‰Šú‰»‚µ‚Ä‚¢‚邽‚߁CƒfƒB
    359          *  ƒXƒpƒbƒ`‹–‰Âó‘Ô‚É‚È‚Á‚Ä‚¢‚éD
    360          */
    361         ldr   r0,=istkpt              /* MSP‚ð‰Šú‰»   */
    362         ldr   r1,[r0]                 /* start_dispatchŒÄ‚яo‚µŽž‚ɌĂяo‚µ—p‚É */
    363         msr   msp, r1                 /* Žg—p‚µ‚Ä‚¢‚邽‚ߏ‰Šú‰»‚·‚é             */
    364         ldr   r1, =IIPM_LOCK          /* ƒJ[ƒlƒ‹ŠÇ—“à‚ÌŠ„ž‚Ý‚ð‹ÖŽ~ */
     346         *  このルーチンは,カーネル起動時に,すべての割込みを禁止した状態
     347         * (割込みロック状態と同等)で呼び出される.また,割込みモード(非
     348         *  タスクコンテキストと同等)で呼び出されることを想定している.
     349         *
     350         *  prc_initializeで,lock_flagをtrueに,saved_iipmをIIPM_ENAALLに
     351         *  初期化しているため,カーネル管理外の割込みを許可することで,
     352         *  CPUロック状態・(モデル上の)割込み優先度マスク全解除状態になる.
     353         *  また,task_initializeでdisdspをfalseに初期化しているため,ディ
     354         *  スパッチ許可状態になっている.
     355         */
     356        ldr   r0,=istkpt              /* MSPを初期化   */
     357        ldr   r1,[r0]                 /* start_dispatch呼び出し時に呼び出し用に */
     358        msr   msp, r1                 /* 使用しているため初期化する             */
     359        ldr   r1, =IIPM_LOCK          /* カーネル管理内の割込みを禁止 */
    365360        msr   basepri, r1
    366         cpsie f                       /* ƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚Ý‚ð‹–‰Â */
     361        cpsie f                       /* カーネル管理外の割込みを許可 */
    367362        b         dispatcher
    368363
    369364/*
    370  *  ƒJ[ƒlƒ‹‚̏I—¹ˆ—‚̌ďo‚µ
     365 *  カーネルの終了処理の呼出し
    371366 *
    372  *  ƒXƒ^ƒbƒN‚ð”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—p‚ɐ؂è‘Ö‚¦D
     367 *  スタックを非タスクコンテキスト用に切り替え.
    373368 * 
    374369 */
     
    379374        .type call_exit_kernel, function
    380375call_exit_kernel:
    381         b     exit_kernel       /* ƒJ[ƒlƒ‹‚̏I—¹ˆ—‚ðŒÄ‚Ô */
    382 
    383 
    384 /*
    385  *  ”÷­ŽžŠÔ‘Ò‚¿
     376        b     exit_kernel       /* カーネルの終了処理を呼ぶ */
     377
     378
     379/*
     380 *  微少時間待ち
    386381 */
    387382        .text
  • ssp_qb_r5f100le_cs/trunk/arch/arm_m_gcc/prc_test.h

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    66 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    77 *
    8  *  ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì(1)`(4)‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
    9  *  ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü
    10  *  •ÏEÄ”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
    11  *  (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
    12  *      Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
    13  *      ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    14  *  (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    15  *      —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ
    16 ƒƒ“ƒgi—˜—p
    17  *      ŽÒƒ}ƒjƒ
    18 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
    19  *      ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    20  *  (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    21  *      —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
    22  *      ‚ƁD
    23  *    (a) Ä”z•z‚É”º‚¤ƒhƒLƒ
    24 ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ
    25 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
    26  *        ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    27  *    (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
    28  *        •ñ‚·‚邱‚ƁD
    29  *  (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
    30  *      ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
    31  *      ‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝
    32  *      —R‚ÉŠî‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð
    33  *      –Ɛӂ·‚邱‚ƁD
     8 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     9 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     10 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     11 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     12 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     13 *      スコード中に含まれていること.
     14 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     15 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     16 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     17 *      の無保証規定を掲載すること.
     18 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     19 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     20 *      と.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     24 *        報告すること.
     25 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     26 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     27 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     28 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     29 *      免責すること.
    3430 *
    35  *  –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
    36  *  ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I
    37  *  ‚ɑ΂·‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒF
    38  *  ƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»
    39  *  ‚̐ӔC‚𕉂í‚È‚¢D
     31 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     32 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     33 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     34 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     35 *  の責任を負わない.
    4036 *
    4137 *  @(#) $Id: prc_test.h 1304 2008-08-27 07:28:36Z ertl-honda $
     
    4339
    4440/*
    45  *              ƒeƒXƒgƒvƒƒOƒ‰ƒ€‚̃`ƒbƒvˆË‘¶’è‹`iARM-M—pj
     41 *              テストプログラムのチップ依存定義(ARM-M用)
    4642 */
    4743
     
    5046
    5147/*
    52  *  ƒ`ƒbƒv‚Å‹¤’Ê‚È’è‹`
     48 *  チップで共通な定義
    5349 */
    5450
  • ssp_qb_r5f100le_cs/trunk/arch/arm_m_gcc/prc_timer.c

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    77 *  Copyright (C) 2010 by Meika Sugimoto
    88 *
    9  *  ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì(1)`(4)‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
    10  *  ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü
    11  *  •ÏEÄ”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
    12  *  (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
    13  *      Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
    14  *      ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    15  *  (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    16  *      —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ
    17 ƒƒ“ƒgi—˜—p
    18  *      ŽÒƒ}ƒjƒ
    19 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
    20  *      ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    21  *  (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    22  *      —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
    23  *      ‚ƁD
    24  *    (a) Ä”z•z‚É”º‚¤ƒhƒLƒ
    25 ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ
    26 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
    27  *        ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    28  *    (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
    29  *        •ñ‚·‚邱‚ƁD
    30  *  (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
    31  *      ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
    32  *      ‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝
    33  *      —R‚ÉŠî‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð
    34  *      –Ɛӂ·‚邱‚ƁD
     9 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     10 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     11 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     21 *      と.
     22 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     23 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     24 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     25 *        報告すること.
     26 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     27 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     28 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     29 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     30 *      免責すること.
    3531 *
    36  *  –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
    37  *  ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I
    38  *  ‚ɑ΂·‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒF
    39  *  ƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»
    40  *  ‚̐ӔC‚𕉂í‚È‚¢D
     32 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     33 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     34 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     35 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     36 *  の責任を負わない.
    4137 *
    4238 *  @(#) $Id: prc_timer.c 1304 2008-08-27 07:28:36Z ertl-honda $
     
    4440
    4541/*
    46  *  ƒ^ƒCƒ}ƒhƒ‰ƒCƒoiSYSTIC—pj
     42 *  タイマドライバ(SYSTIC用)
    4743 */
    4844#include <sil.h>
     
    5248
    5349/*
    54  *  ƒ^ƒCƒ}‚Ì‹N“®ˆ—
     50 *  タイマの起動処理
    5551 */
    5652void
     
    6157
    6258#ifdef SYSTIC_USE_CALIBRATION
    63         /* CALIBRATIONƒŒƒWƒXƒ^‚Ì’l‚ðŽg—p */
     59        /* CALIBRATIONレジスタの値を使用 */
    6460        cyc = (sil_rew_mem((void *)SYSTIC_CALIBRATION) & SYSTIC_TENMS) / 10;
    6561#else
     
    6763#endif /* SYSTIC_USE_CALIBRATION */
    6864
    69         /* ’âŽ~ */
     65        /* 停止 */
    7066        tmp = sil_rew_mem((void *)SYSTIC_CONTROL_STATUS);
    7167        tmp &= ~SYSTIC_ENABLE;
     
    7874
    7975#ifdef SYSTIC_USE_STCLK
    80         /* ŠO•”ƒNƒƒbƒN‚ÌŽg—p */
     76        /* 外部クロックの使用 */
    8177        tmp |= SYSTIC_ENABLE;
    8278#else
    83         /* ƒvƒƒZƒbƒTƒNƒƒbƒN‚ÌŽg—p */
     79        /* プロセッサクロックの使用 */
    8480        tmp |= SYSTIC_ENABLE|SYSTIC_CLKSOURCE;
    8581#endif /* SYSTIC_USE_STCLK */
     
    8985
    9086/*
    91  *  ƒ^ƒCƒ}‚Ì’âŽ~ˆ—
     87 *  タイマの停止処理
    9288 */
    9389void
    9490target_timer_terminate(intptr_t exinf)
    9591{
    96         /* ƒ^ƒCƒ}‚ð’âŽ~ */
     92        /* タイマを停止 */
    9793        sil_wrw_mem((void*)SYSTIC_CONTROL_STATUS, 0x00);
    9894}
    9995
    10096/*
    101  *  ƒ^ƒCƒ}Š„ž‚݃nƒ“ƒhƒ‰
     97 *  タイマ割込みハンドラ
    10298 */
    10399void
    104100target_timer_handler(void)
    105101{
    106         /* probe_int ‚Ì‚½‚߁CCOUNTFLAG‚ðƒNƒŠƒA */
     102        /* probe_int のため,COUNTFLAGをクリア */
    107103        (void)sil_rew_mem((void *)SYSTIC_CONTROL_STATUS);
    108104       
    109105        i_begin_int(INTNO_TIMER);
    110         signal_time();                    /* ƒ^ƒCƒ€ƒeƒBƒbƒN‚Ì‹Ÿ‹‹ */
     106        signal_time();                    /* タイムティックの供給 */
    111107        i_end_int(INTNO_TIMER);
    112108}
  • ssp_qb_r5f100le_cs/trunk/arch/arm_m_gcc/prc_timer.cfg

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    44
    55/*
    6  *              ƒ^ƒCƒ}ƒhƒ‰ƒCƒo‚̃Rƒ“ƒtƒBƒMƒ
    7 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹
     6 *              タイマドライバのコンフィギュレーションファイル
    87 */
    98ATT_INI({ TA_NULL, 0, target_timer_initialize });
  • ssp_qb_r5f100le_cs/trunk/arch/arm_m_gcc/prc_timer.h

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    66 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    77 *
    8  *  ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì(1)`(4)‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
    9  *  ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü
    10  *  •ÏEÄ”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
    11  *  (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
    12  *      Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
    13  *      ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    14  *  (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    15  *      —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ
    16 ƒƒ“ƒgi—˜—p
    17  *      ŽÒƒ}ƒjƒ
    18 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
    19  *      ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    20  *  (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    21  *      —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
    22  *      ‚ƁD
    23  *    (a) Ä”z•z‚É”º‚¤ƒhƒLƒ
    24 ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ
    25 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
    26  *        ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    27  *    (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
    28  *        •ñ‚·‚邱‚ƁD
    29  *  (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
    30  *      ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
    31  *      ‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝
    32  *      —R‚ÉŠî‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð
    33  *      –Ɛӂ·‚邱‚ƁD
     8 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     9 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     10 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     11 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     12 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     13 *      スコード中に含まれていること.
     14 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     15 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     16 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     17 *      の無保証規定を掲載すること.
     18 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     19 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     20 *      と.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     24 *        報告すること.
     25 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     26 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     27 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     28 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     29 *      免責すること.
    3430 *
    35  *  –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
    36  *  ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I
    37  *  ‚ɑ΂·‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒF
    38  *  ƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»
    39  *  ‚̐ӔC‚𕉂í‚È‚¢D
     31 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     32 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     33 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     34 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     35 *  の責任を負わない.
    4036 *
    4137 *  @(#) $Id: prc_timer.h 1304 2008-08-27 07:28:36Z ertl-honda $
     
    4339
    4440/*
    45  *  ƒ^ƒCƒ}ƒhƒ‰ƒCƒoiSYSTIC—pj
     41 *  タイマドライバ(SYSTIC用)
    4642 */
    4743
     
    5248
    5349/*
    54  *  ƒ^ƒCƒ}Š„ž‚݃nƒ“ƒhƒ‰“o˜^‚Ì‚½‚߂̒萔
     50 *  タイマ割込みハンドラ登録のための定数
    5551 */
    56 #define INHNO_TIMER     IRQNO_SYSTICK /* Š„ž‚݃nƒ“ƒhƒ‰”ԍ† */
    57 #define INTNO_TIMER     IRQNO_SYSTICK /* Š„ž‚ݔԍ† */
     52#define INHNO_TIMER     IRQNO_SYSTICK /* 割込みハンドラ番号 */
     53#define INTNO_TIMER     IRQNO_SYSTICK /* 割込み番号 */
    5854
    5955#ifndef TOPPERS_MACRO_ONLY
    6056
    6157/*
    62  *  ƒ^ƒCƒ}’l‚Ì“à•”•\Œ»‚ÌŒ^
     58 *  タイマ値の内部表現の型
    6359 */
    6460typedef uint32_t    CLOCK;
    6561
    6662/*
    67  *  ƒ^ƒCƒ}’l‚Ì“à•”•\Œ»‚ƃ~ƒŠ•bEƒÊ•b’PˆÊ‚Æ‚Ì•ÏŠ·
     63 *  タイマ値の内部表現とミリ秒・μ秒単位との変換
    6864 *
    6965 */
     
    7268
    7369/*
    74  *  Ý’è‚Å‚«‚éÅ‘å‚̃^ƒCƒ}ŽüŠúi’PˆÊ‚Í“à•”•\Œ»j
     70 *  設定できる最大のタイマ周期(単位は内部表現)
    7571 */
    7672#define MAX_CLOCK    ((CLOCK) 0x00ffffffU)
    7773
    7874/*
    79  *  ƒ^ƒCƒ}‚Ì‹N“®ˆ—
     75 *  タイマの起動処理
    8076 *
    81  *  ƒ^ƒCƒ}‚ð‰Šú‰»‚µCŽüŠú“I‚ȃ^ƒCƒ}Š„ž‚Ý—v‹‚𔭐¶‚³‚¹‚éD
     77 *  タイマを初期化し,周期的なタイマ割込み要求を発生させる.
    8278 */
    8379extern void target_timer_initialize(intptr_t exinf);
    8480
    8581/*
    86  *  ƒ^ƒCƒ}‚Ì’âŽ~ˆ—
     82 *  タイマの停止処理
    8783 *
    88  *  ƒ^ƒCƒ}‚Ì“®ì‚ð’âŽ~‚³‚¹‚éD
     84 *  タイマの動作を停止させる.
    8985 */
    9086extern void target_timer_terminate(intptr_t exinf);
    9187
    9288/*
    93  *  ƒ^ƒCƒ}‚ÌŒ»Ý’l‚̓Ǐo‚µ
     89 *  タイマの現在値の読出し
    9490 */
    9591Inline CLOCK
     
    10096
    10197/*
    102  *  ƒ^ƒCƒ}Š„ž‚Ý—v‹‚̃`ƒFƒbƒN
     98 *  タイマ割込み要求のチェック
    10399 */
    104100Inline bool_t
     
    109105
    110106/*
    111  *  ƒ^ƒCƒ}Š„ž‚݃nƒ“ƒhƒ‰
     107 *  タイマ割込みハンドラ
    112108 */
    113109extern void target_timer_handler(void);
  • ssp_qb_r5f100le_cs/trunk/arch/arm_m_gcc/prc_unrename.h

    • Property svn:mime-type set to text/plain; charset=shift_jis
  • ssp_qb_r5f100le_cs/trunk/arch/arm_m_gcc/prc_user.txt

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    11=====================================================================
    2                          ARM-MƒvƒƒZƒbƒTˆË‘¶•”
     2                         ARM-Mプロセッサ依存部
    33                                  Last Modified: '13/04/07
    44=====================================================================
    55
    66
    7 (1) ‘Ήž‚µ‚Ä‚¢‚éƒ^[ƒQƒbƒgƒVƒXƒeƒ€‚ÌŽí—ށE\¬
     7(1) 対応しているターゲットシステムの種類・構成
    88
    9 ARM-MˆË‘¶•”‚́CARMVx-MƒA[ƒLƒeƒNƒ`ƒƒ‚ðƒ^[ƒQƒbƒg‚Æ‚µ‚Ä‚¢‚éDARMVx-M‚́C
    10 ARM‚Ƃ͈قȂèCARM–½—ß‚ðŽÀs‚Å‚«‚È‚¢‚½‚߁CARMˆË‘¶•”‚Æ•ª‚¯‚Ä‚¢‚éD
     9ARM-M依存部は,ARMVx-Mアーキテクチャをターゲットとしている.ARMVx-Mは,
     10ARMとは異なり,ARM命令を実行できないため,ARM依存部と分けている.
    1111
    1212
    13 (2) Žg—p‚·‚éŠJ”­ŠÂ‹«‚Æ“®ìŒŸØ‚µ‚½ðŒiƒo[ƒWƒ‡ƒ“CƒIƒvƒVƒ‡ƒ““™j
     13(2) 使用する開発環境と動作検証した条件(バージョン,オプション等)
    1414
    15 ƒJ[ƒlƒ‹‚ÍGCC‚ð—p‚¢‚ăRƒ“ƒpƒCƒ‹‚·‚éD“®ìŠm”F‚µ‚½ƒo[ƒWƒ‡ƒ“‚ÍŠeƒ^[ƒQ
    16 ƒbƒgˆË‘¶•”‚̃hƒLƒ
    17 ƒƒ“ƒg‚É‹LÚ‚·‚éD
     15カーネルはGCCを用いてコンパイルする.動作確認したバージョンは各ターゲ
     16ット依存部のドキュメントに記載する.
    1817
    1918
    20 (3) ƒ^[ƒQƒbƒg’è‹`Ž–€‚Ì‹K’è
     19(3) ターゲット定義事項の規定
    2120
    22 (3-1) ƒf[ƒ^Œ^‚ÉŠÖ‚·‚é‹K’è
     21(3-1) データ型に関する規定
    2322
    24 ƒf[ƒ^Œ^‚Í arch/gcc/tool_stddef.h ‚Å’è‹`‚³‚ê‚Ä‚¢‚é“à—e‚ŁCfloatŒ^‚Æ
    25 doubleŒ^‚́C‚»‚ꂼ‚êIEEE754€‹’‚Ì’P¸“x•‚“®¬”“_”‚Æ”{¸“x•‚“®¬”“_
    26 ”‚Å‚ ‚éD
     23データ型は arch/gcc/tool_stddef.h で定義されている内容で,float型と
     24double型は,それぞれIEEE754準拠の単精度浮動小数点数と倍精度浮動小数点
     25数である.
    2726
    28 (3-2) Š„ž‚ݏˆ—‚ÉŠÖ‚·‚é‹K’è
     27(3-2) 割込み処理に関する規定
    2928
    30 ›Š„ž‚݃nƒ“ƒhƒ‰”ԍ†‚ÆŠ„ž‚ݔԍ†‚ÌŠ„“–‚āC—¼ŽÒ‚̑Ήž
     29○割込みハンドラ番号と割込み番号の割当て,両者の対応
    3130
    32 Š„ž‚݃nƒ“ƒhƒ‰”ԍ†‚ÆŠ„ž‚ݔԍ†‚́C—áŠO”­¶Žž‚ÉIPSR‚ɃZƒbƒg‚³‚ê‚é—áŠO”Ô
    33 †‚ð—p‚¢‚éDSYSTICK‚Í15”ԂŁCŠO•”Š„ž‚Ý‚Í16”Ô‚©‚ç‚̔ԍ†‚ªŠ„‚è•t‚¯‚ç‚ê
    34 ‚Ä‚¢‚éD
     31割込みハンドラ番号と割込み番号は,例外発生時にIPSRにセットされる例外番
     32号を用いる.SYSTICKは15番で,外部割込みは16番からの番号が割り付けられ
     33ている.
    3534
    36 ›Š„ž‚Ý—Dæ“x‚Ì’iŠK”iTMIN_INTPRI‚Ì’ljC‚»‚̐ݒè•û–@
     35○割込み優先度の段階数(TMIN_INTPRIの値),その設定方法
    3736
    38 Š„ž‚Ý—Dæ“x‚Ì’iŠK”‚́CSoC–ˆ‚Ƀn[ƒhƒEƒFƒA“I‚ɃTƒ|[ƒg‚·‚銄ž‚Ý—Dæ
    39 “xƒrƒbƒg•‚ªˆÙ‚È‚é‚̂ŁCƒ^[ƒQƒbƒgˆË‘¶•”–ˆ‚ɈقȂéDƒ^[ƒQƒbƒgˆË‘¶•”‚Å
    40 ‚́CŠ„ž‚Ý—Dæ“x‚̃rƒbƒg•iTBITW_IPRIj‚Æ‚»‚ÌŠ„ž‚Ý—Dæ“x’†‚̃Tƒu—Dæ
    41 “x‚̃rƒbƒg•iTBITW_SUBPRIj‚ð’è‹`‚·‚éDŠeƒrƒbƒg•‚Ì’l‚Ɛݒè‰Â”\‚È—Dæ
    42 “x‚͈͎̔͂Ÿ‚Ì’Ê‚è‚Å‚ ‚éD
     37割込み優先度の段階数は,SoC毎にハードウェア的にサポートする割込み優先
     38度ビット幅が異なるので,ターゲット依存部毎に異なる.ターゲット依存部で
     39は,割込み優先度のビット幅(TBITW_IPRI)とその割込み優先度中のサブ優先
     40度のビット幅(TBITW_SUBPRI)を定義する.各ビット幅の値と設定可能な優先
     41度の範囲は次の通りである.
    4342
    44    -(2^(TBIW_IPRI)) + (2^TBITW_SUBIPRI)) ` -1
     43   -(2^(TBIW_IPRI)) + (2^TBITW_SUBIPRI)) -1
    4544
    46 —Ⴆ‚ΗDæ“x‚̃rƒbƒg•(TBITW_IPRI)‚ª8bitCƒTƒu—Dæ“x‚̃rƒbƒg•
    47 (TBITW_SUBIPRI) ‚ª1bit‚̏ꍇ‚́C-254 ` -1 ‚͈̔͂ł ‚éD
     45例えば優先度のビット幅(TBITW_IPRI)が8bit,サブ優先度のビット幅
     46(TBITW_SUBIPRI) が1bitの場合は,-254 〜 -1 の範囲である.
    4847
    49 ‚±‚͈̔͂ŁCƒJ[ƒlƒ‹ŠÇ—“à‚ÌŠ„ž‚݂̍ō‚—Dæ“xiTMIN_INTPRIj‚ðƒ^[ƒQ
    50 ƒbƒgˆË‘¶•”‚Őݒ肷‚éD
     48この範囲で,カーネル管理内の割込みの最高優先度(TMIN_INTPRI)をターゲ
     49ット依存部で設定する.
    5150
    52 ŠeŠ„ž‚Ý‚ÌŠ„ž‚Ý—Dæ“x‚́CCFG_INT‚ÅTMIN_INTPRIˆÈã‚Ì’l‚ðŽw’è‚·‚éD
     51各割込みの割込み優先度は,CFG_INTでTMIN_INTPRI以上の値を指定する.
    5352
    54 ›dis_int‚Æena_int‚̃Tƒ|[ƒg‚Ì—L–³C‚»‚̐§ŒÀŽ–€
     53○dis_intとena_intのサポートの有無,その制限事項
    5554
    56 dis_int‚Æena_int‚ðƒTƒ|[ƒg‚·‚éD§ŒÀŽ–€‚Í“Á‚É‚È‚¢D
     55dis_intとena_intをサポートする.制限事項は特にない.
    5756
    58 ›CFG_INT‚̐§ŒÀŽ–€‚ÆŠg’£iƒ^[ƒQƒbƒg’è‹`‚ÅŽg—p‚Å‚«‚銄ž‚Ý‘®«j
     57○CFG_INTの制限事項と拡張(ターゲット定義で使用できる割込み属性)
    5958
    60 CFG_INT‚̐§ŒÀŽ–€‚Í‚È‚­Cƒ^[ƒQƒbƒg’è‹`‚ÅŽg—p‰Â”\‚ÈŠ„ž‚Ý‘®«‚Í“Á‚É‚È
    61 ‚¢D
     59CFG_INTの制限事項はなく,ターゲット定義で使用可能な割込み属性は特にな
     60い.
    6261
    63 ›ƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚Ý
     62○カーネル管理外の割込み
    6463
    65 ƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚Ý‚ðƒTƒ|[ƒg‚·‚éDŽw’è•û–@‚́CŠ„ž‚Ý—Dæ“x‚Ì’iŠK”
    66 ‚ÅŽw’肵‚½CƒTƒ|[ƒg‚·‚銄ž‚Ý—Dæ“x‚̍ō‚’liÅ¬’lj‚æ‚èC
    67 TMIN_INTPRI‚ð‘å‚«‚­Ý’è‚·‚é‚ƁCTMIN_INTPRI‚æ‚è’l‚ª¬‚¢i‚—Dæ“xj‚ÈŠ„
    68 ž‚Ý—Dæ“x‚ðÝ’肵‚½Š„ž‚Ý‚ðŠ„ž‚Ý—Dæ“x‚Æ‚µ‚Ĉµ‚¤D
     64カーネル管理外の割込みをサポートする.指定方法は,割込み優先度の段階数
     65で指定した,サポートする割込み優先度の最高値(最小値)より,
     66TMIN_INTPRIを大きく設定すると,TMIN_INTPRIより値が小い(高優先度)な割
     67込み優先度を設定した割込みを割込み優先度として扱う.
    6968
    70 ƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚Ý‚ÍOSŽÀs’†‚à‹ÖŽ~‚ɂȂ邱‚Æ‚Í‚È‚­iŒµ–§‚É‚ÍŠ„ž‚Ý
    71 ‚̏oŒû‚Å‚²‚­’Z‚¢‹æŠÔ‹ÖŽ~‚³‚ê‚éjCŠ„ž‚Ý”­¶Žž‚́CƒJ[ƒlƒ‹‚̃R[ƒh‚ðŒo
    72 —R‚¹‚¸‚ɌĂяo‚³‚ê‚éD
     69カーネル管理外の割込みはOS実行中も禁止になることはなく(厳密には割込み
     70の出口でごく短い区間禁止される),割込み発生時は,カーネルのコードを経
     71由せずに呼び出される.
    7372
    74 ƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚݂ɑ΂·‚éCDEF_INH,CFG_INT‚̓Tƒ|[ƒg‚·‚éD
     73カーネル管理外の割込みに対する,DEF_INH,CFG_INTはサポートする.
    7574
    76 (3-3) CPU—áŠOˆ—‚ÉŠÖ‚·‚é‹K’è
     75(3-3) CPU例外処理に関する規定
    7776
    78 ›CPU—áŠOƒnƒ“ƒhƒ‰”ԍ†
     77○CPU例外ハンドラ番号
    7978
    80 CPU—áŠOƒnƒ“ƒhƒ‰”ԍ†‚Æ‚µ‚ẮC—áŠO”­¶Žž‚ÉIPSR‚ɃZƒbƒg‚³‚ê‚éC—áŠO”ԍ†
    81 ‚ð—p‚¢‚éDŠe—áŠO‚Ì—áŠO”ԍ†‚͈ȉº‚Ì’Ê‚è‚Å‚ ‚éD
     79CPU例外ハンドラ番号としては,例外発生時にIPSRにセットされる,例外番号
     80を用いる.各例外の例外番号は以下の通りである.
    8281
    83         —áŠO              —áŠO”ԍ†
     82        例外              例外番号
    8483  Reset                      1
    8584  Non-makable Interrupt      2
     
    9291  PendSV                    14
    9392
    94 ‚È‚¨CReset‚ƁCSVCall‚ɂ‚¢‚ẮCƒJ[ƒlƒ‹‚ªŽg—p‚·‚邽‚߁Cƒ†[ƒU[‚ÍŽg
    95 —p‚·‚邱‚Æ‚ª‚Å‚«‚È‚¢D
     93なお,Resetと,SVCallについては,カーネルが使用するため,ユーザーは使
     94用することができない.
    9695
    97 (3-4) CPUƒƒbƒNEŠ„ž‚݃ƒbƒN
     96(3-4) CPUロック・割込みロック
    9897
    99 CPUƒƒbƒN‚́Cbasepri‚ðTMIN_INTPRI‚Ì—Dæ“x‚ÌŠ„ž‚Ý‚ð‹ÖŽ~‚·‚é’l‚ɐݒ肷
    100 ‚éDŠ„ž‚݃ƒbƒN‚́CFAULTMASK‚ð'1'‚ɐݒ肷‚邱‚Æ‚ÅŽÀŒ»‚µ‚Ä‚¢‚éD
     98CPUロックは,basepriをTMIN_INTPRIの優先度の割込みを禁止する値に設定す
     99る.割込みロックは,FAULTMASKを'1'に設定することで実現している.
    101100
    102 (3-5) «”\•]‰¿—pƒVƒXƒeƒ€Žž‚ÌŽQÆ‚ÉŠÖ‚·‚é‹K’è
     101(3-5) 性能評価用システム時刻の参照に関する規定
    103102
    104 get_utm‚ðƒTƒ|[ƒg‚·‚éD¸“x‚ÉŠÖ‚µ‚ẮCƒ^[ƒQƒbƒg–ˆ‚ɈقȂéD
     103get_utmをサポートする.精度に関しては,ターゲット毎に異なる.
    105104
    106 (3-6) ƒXƒ^[ƒgƒAƒbƒvƒ‹[ƒ`ƒ“‚ł̏‰Šú‰»“à—e
     105(3-6) スタートアップルーチンでの初期化内容
    107106
    108 ƒXƒ^[ƒgƒAƒbƒvƒ‹[ƒ`ƒ“‚́CThreadƒ‚[ƒh‚ŌĂяo‚³‚ê‚邱‚Æ‚ð‘O’ñ‚Æ‚µ‚Ä‚¢
    109 ‚éDŽÀsŒãCŠ„ž‚݃ƒbƒNó‘ԁiFAULTMASK‚ðƒZƒbƒgj‚Æ‚·‚éDŠ„ž‚݃ƒbƒN
    110 ó‘Ԃ́CƒJ[ƒlƒ‹‚̏‰Šú‰»I—¹Žž‚É‹–‰Â‚·‚éDƒXƒ^[ƒgƒAƒbƒvƒ‹[ƒ`ƒ“‚ŁC
    111 MSP‚ðƒAƒNƒeƒBƒu‚ȃXƒ^ƒbƒN‚Æ‚µCMSP‚Ì“à—e‚ð‰Šú‰»‚·‚邽‚߂ɂ́CINIT_MSP
    112 ‚ðƒ^[ƒQƒbƒgˆË‘¶•”‚Å’è‹`‚·‚éD
     107スタートアップルーチンは,Threadモードで呼び出されることを前提としてい
     108る.実行後,割込みロック状態(FAULTMASKをセット)とする.割込みロック
     109状態は,カーネルの初期化終了時に許可する.スタートアップルーチンで,
     110MSPをアクティブなスタックとし,MSPの内容を初期化するためには,INIT_MSP
     111をターゲット依存部で定義する.
    113112
    114 (3-7) ƒxƒNƒ^ƒe[ƒuƒ‹ƒIƒtƒZƒbƒg‚̏‰Šú‰»
     113(3-7) ベクタテーブルオフセットの初期化
    115114
    116 ƒvƒƒZƒbƒTˆË‘¶‚̏‰Šú‰»ˆ—‚ŁCVector Table Offset Register ‚ðƒ^[ƒQƒb
    117 ƒgˆË‘¶•”‚̏‰Šú‰»ƒ‹[ƒ`ƒ“‚Őݒ肷‚éD‚È‚¨CƒxƒNƒ^[ƒe[ƒuƒ‹‚́C.vector
    118 ‚̃ZƒNƒVƒ‡ƒ“‘®«‚ª•t‰Á‚³‚ê‚Ä‚¢‚邽‚߁CƒŠƒ“ƒJƒXƒNƒŠƒvƒg‚Å‚±‚̃ZƒNƒVƒ‡ƒ“
    119 ‚ðŽw’肵‚Ä”z’u‚·‚éD
     115プロセッサ依存の初期化処理で,Vector Table Offset Register をターゲッ
     116ト依存部の初期化ルーチンで設定する.なお,ベクターテーブルは,.vector
     117のセクション属性が付加されているため,リンカスクリプトでこのセクション
     118を指定して配置する.
    120119
    121120
    122 (4) ƒ^ƒCƒ}ƒhƒ‰ƒCƒoŠÖ˜A‚̏î•ñ
     121(4) タイマドライバ関連の情報
    123122
    124 ƒJ[ƒlƒ‹‚̃^ƒCƒ€ƒeƒBƒbƒN‚Æ‚µ‚āCSYSTIC‚ðŽg—p‚·‚éê‡‚́Cprc_config.c
    125 ‚ðƒRƒ“ƒpƒCƒ‹‘ΏۂƂµCƒRƒ“ƒtƒBƒMƒ
    126 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹‚É prc_config.cfg
    127 ‚ðŽw’è‚·‚邱‚ƁD
     123カーネルのタイムティックとして,SYSTICを使用する場合は,prc_config.c
     124をコンパイル対象とし,コンフィギュレーションファイルに prc_config.cfg
     125を指定すること.
    128126
    129 ŽüŠú‚ÌŠî–{‚Í1msec‚Æ‚·‚éDŽüŠú‚ðCALIBRATIONƒŒƒWƒXƒ^‚̐ݒè“à—e‚ðŒ³‚ÉŒvŽZ
    130 ‚·‚éê‡‚́CSYSTIC_USE_CALIBRATION ‚ð’è‹`‚·‚éDCALIBRATIONƒŒƒWƒXƒ^‚ð—p
    131 ‚¢‚È‚¢ê‡‚́C1msecŽüŠú•ª‚̃JƒEƒ“ƒg’l‚ð TIMER_CLOCK ‚ɐݒ肷‚éDƒNƒƒb
    132 ƒNƒ\[ƒX‚Æ‚µ‚āCŠO•”ƒNƒƒbƒN‚ð—p‚¢‚éê‡‚́CSYSTIC_USE_STCLK ‚ð—p‚¢‚éD
     127周期の基本は1msecとする.周期をCALIBRATIONレジスタの設定内容を元に計算
     128する場合は,SYSTIC_USE_CALIBRATION を定義する.CALIBRATIONレジスタを用
     129いない場合は,1msec周期分のカウント値を TIMER_CLOCK に設定する.クロッ
     130クソースとして,外部クロックを用いる場合は,SYSTIC_USE_STCLK を用いる.
    133131
    134132
    135 (5) ƒ^[ƒQƒbƒgˆË‘¶•”‚ł̐ݒ荀–Ú
     133(5) ターゲット依存部での設定項目
    136134
    137 ƒ^[ƒQƒbƒgˆË‘¶•”‚ł͈ȉº‚̃}ƒNƒ‚ð’è‹`‚·‚é•K—v‚ª‚ ‚éD
     135ターゲット依存部では以下のマクロを定義する必要がある.
    138136
    139    ¥TMAX_INTNO     : Š„ž‚ݔԍ†‚̍őå’l(’ʏí‚ÌŠ„ž‚ݔԍ† + 15)
    140    ¥TBITW_IPRI     : Š„ž‚Ý—Dæ“x‚̃rƒbƒg•
    141    ¥TBITW_SUBIPRI  : Š„ž‚Ý—Dæ“x‚̃rƒbƒg•’†‚̃Tƒu—Dæ“x‚̃rƒbƒg•
    142    ¥TMIN_INTPRI    : Š„ž‚Ý—Dæ“x‚̍ŏ¬’liÅ‚’lj
    143    ¥TIC_NUME       : ƒ^ƒCƒ€ƒeƒBƒbƒN‚ÌŽüŠú‚Ì•ªŽq
    144    ¥TIC_DENO       : ƒ^ƒCƒ€ƒeƒBƒbƒN‚ÌŽüŠú‚Ì•ª•ê
    145    ¥TIMER_CLOCK    : ƒ^ƒCƒ}’l‚Ì“à•”•\Œ»‚ƃ~ƒŠ•b’PˆÊ‚Æ‚Ì•ÏŠ·
    146    ¥INTPRI_TIMER   : ƒ^ƒCƒ}Š„ž‚ÝŠ„ž‚Ý—Dæ“x
    147    ¥INTATR_TIMER   : ƒ^ƒCƒ}Š„ž‚Ý‚ÌŠ„ž‚Ý‘®«
    148    ¥INIT_MSP       : ƒXƒ^[ƒgƒAƒbƒvƒ‹[ƒ`ƒ“‚ÅMSP‚ð‰Šú‰»‚·‚éê‡‚Í’è‹`
    149    ¥DEFAULT_ISTKSZ : ƒXƒ^ƒbƒNƒTƒCƒYi8byte’PˆÊ‚ÅŽw’èj
    150    ¥SIL_DLY_TIM1   : ”÷­ŽžŠÔ‘Ò‚¿‚Ì‚½‚ß‚Ì’è‹`
    151    ¥SIL_DLY_TIM2   : ”÷­ŽžŠÔ‘Ò‚¿‚Ì‚½‚ß‚Ì’è‹`
     137   ・TMAX_INTNO     : 割込み番号の最大値(通常の割込み番号 + 15)
     138   ・TBITW_IPRI     : 割込み優先度のビット幅
     139   ・TBITW_SUBIPRI  : 割込み優先度のビット幅中のサブ優先度のビット幅
     140   ・TMIN_INTPRI    : 割込み優先度の最小値(最高値)
     141   ・TIC_NUME       : タイムティックの周期の分子
     142   ・TIC_DENO       : タイムティックの周期の分母
     143   ・TIMER_CLOCK    : タイマ値の内部表現とミリ秒単位との変換
     144   ・INTPRI_TIMER   : タイマ割込み割込み優先度
     145   ・INTATR_TIMER   : タイマ割込みの割込み属性
     146   ・INIT_MSP       : スタートアップルーチンでMSPを初期化する場合は定義
     147   ・DEFAULT_ISTKSZ : スタックサイズ(8byte単位で指定)
     148   ・SIL_DLY_TIM1   : 微少時間待ちのための定義
     149   ・SIL_DLY_TIM2   : 微少時間待ちのための定義
    152150
    153151
    154 (6) ƒfƒBƒŒƒNƒgƒŠ\¬Eƒtƒ@ƒCƒ‹\¬
     152(6) ディレクトリ構成・ファイル構成
    155153  ./arch/arm_m_gcc/
    156154    ./Makefile.prc
     
    177175    ./start.S
    178176
    179 (12) ƒo[ƒWƒ‡ƒ“—š—ð
     177(12) バージョン履歴
    180178
    1811792008/08/22
    182  Eprc_user.txt/prc_design.txt
    183    E2008/8/21‚Ì‹ZpŒŸ“¢‰ï‚Å‚Ì‹c˜_Œ‹‰Ê‚𔽉fD
    184  Eprc_support.S/prc_config.c/prc_config.h/arm_m.h
    185    EƒRƒ“ƒeƒLƒXƒg”»’è‚ðexc_ncnt‚©‚çƒAƒNƒeƒBƒu‚ȃXƒ^ƒbƒN‚ɕύX
    186  Eprc_config.c
    187    Eset_exc_int_priority() ‚ŃTƒ|[ƒg‰Â”\‚ÈIRQ‚̏ãŒÀ‚ð239‚ÉŠg’£D
    188  Estart.S
    189    E‹N“®Žž‚ÍThreadƒ‚[ƒh‚ð‘O’ñ‚Æ‚µ‚Ä‚¢‚邱‚Ƃ𖾋LD
    190    Eƒu[ƒgƒ[ƒ_[“™‚©‚ç‹N“®‚³‚ê‚éê‡‚ð‘z’肵CMSP‚ð—LŒø‚É‚·‚é‚悤‚É
    191      •ÏXD
    192  Eprc_timer.c
    193    EƒRƒƒ“ƒg‚ðC³
    194    EƒfƒoƒbƒO—pƒR[ƒh‚ðíœ
     180 prc_user.txt/prc_design.txt
     181   ・2008/8/21の技術検討会での議論結果を反映.
     182 prc_support.S/prc_config.c/prc_config.h/arm_m.h
     183   ・コンテキスト判定をexc_ncntからアクティブなスタックに変更
     184 prc_config.c
     185   ・set_exc_int_priority() でサポート可能なIRQの上限を239に拡張.
     186 start.S
     187   ・起動時はThreadモードを前提としていることを明記.
     188   ・ブートローダー等から起動される場合を想定し,MSPを有効にするように
     189     変更.
     190 prc_timer.c
     191   ・コメントを修正
     192   ・デバッグ用コードを削除
    195193
    1961942008/07/11
    197  EÅ‰‚̃ŠƒŠ[ƒX
     195 ・最初のリリース
    198196
    1991972013/04/07
    200  E—áŠOˆ—”­¶Žž‚ÉŠ„ž‚Ý/CPU—áŠO”­¶‰ñ”‚̃Cƒ“ƒNƒŠƒƒ“ƒg‚ªs‚í‚ê‚Ä‚¢‚È‚©‚Á‚½
    201    –â‘è‚̏C³
     198 ・例外処理発生時に割込み/CPU例外発生回数のインクリメントが行われていなかった
     199   問題の修正
  • ssp_qb_r5f100le_cs/trunk/arch/arm_m_gcc/start.S

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    88 *             Nagoya Municipal Industrial Research Institute, JAPAN
    99 *
    10  *  ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì(1)`(4)‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
    11  *  ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü
    12  *  •ÏEÄ”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
    13  *  (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
    14  *      Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
    15  *      ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    16  *  (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    17  *      —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ
    18 ƒƒ“ƒgi—˜—p
    19  *      ŽÒƒ}ƒjƒ
    20 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
    21  *      ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    22  *  (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    23  *      —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
    24  *      ‚ƁD
    25  *    (a) Ä”z•z‚É”º‚¤ƒhƒLƒ
    26 ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ
    27 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
    28  *        ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    29  *    (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
    30  *        •ñ‚·‚邱‚ƁD
    31  *  (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
    32  *      ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
    33  *      ‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝
    34  *      —R‚ÉŠî‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð
    35  *      –Ɛӂ·‚邱‚ƁD
     10 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     11 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     12 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     13 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     14 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     15 *      スコード中に含まれていること.
     16 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     17 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     18 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     19 *      の無保証規定を掲載すること.
     20 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     21 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     22 *      と.
     23 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     24 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     25 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     26 *        報告すること.
     27 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     28 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     29 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     30 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     31 *      免責すること.
    3632 *
    37  *  –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
    38  *  ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I
    39  *  ‚ɑ΂·‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒF
    40  *  ƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»
    41  *  ‚̐ӔC‚𕉂í‚È‚¢D
     33 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     34 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     35 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     36 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     37 *  の責任を負わない.
    4238 *
    4339 *  @(#) $Id: start.S 1304 2008-08-27 07:28:36Z ertl-honda $
     
    4541               
    4642/*
    47  *   ƒJ[ƒlƒ‹—p‚̃Xƒ^[ƒgƒAƒbƒvƒ‚ƒWƒ
    48 [ƒ‹(ARM-M—p)
     43 *   カーネル用のスタートアップモジュール(ARM-M用)
    4944 */
    5045#define TOPPERS_MACRO_ONLY
    51 #define UINT_C(val)             (val)           /* uint_tŒ^‚̒萔‚ðì‚éƒ}ƒNƒ */
    52 #define ULONG_C(val)    (val)           /* ulong_tŒ^‚̒萔‚ðì‚éƒ}ƒNƒ */
    53 #define CAST(type, val) (val)           /* Œ^ƒLƒƒƒXƒg‚ðs‚¤ƒ}ƒNƒ */
     46#define UINT_C(val)             (val)           /* uint_t型の定数を作るマクロ */
     47#define ULONG_C(val)    (val)           /* ulong_t型の定数を作るマクロ */
     48#define CAST(type, val) (val)           /* 型キャストを行うマクロ */
    5449
    5550#include "kernel_impl.h"
     
    5752
    5853/*
    59  *  ƒXƒ^[ƒgƒAƒbƒvƒ‹[ƒ`ƒ“
     54 *  スタートアップルーチン
    6055 *
    61  *  Threadƒ‚[ƒh‚ŌĂяo‚³‚ê‚邱‚Æ‚ð‘O’ñ‚Æ‚µ‚Ä‚éD
     56 *  Threadモードで呼び出されることを前提としてる.
    6257 */
    6358        .text
     
    6863        .type _start, function
    6964_start:
    70         cpsid f                 /* Š„ž‚݃ƒbƒNó‘Ô‚Ö */
     65        cpsid f                 /* 割込みロック状態へ */
    7166
    7267#ifdef INIT_MSP
    7368        /*
    74          * MSP‚̐ݒè
     69         * MSPの設定
    7570         */
    76         mov   r0, #CONTROL_MSP  /* MSP‚ð—LŒø‚É  */
     71        mov   r0, #CONTROL_MSP  /* MSPを有効に  */
    7772        msr   control, r0
    78         isb                     /* control ‚Ì‘€ìŒã‚É•K—v */
     73        isb                     /* control の操作後に必要 */
    7974        ldr  r0,=_kernel_istkpt
    8075        ldr  r1,[r0]
     
    8378
    8479        /*
    85          * hardware_init_hook‚̌Ăяo‚µ i0‚Å‚È‚¢ê‡j
     80         * hardware_init_hookの呼び出し (0でない場合)
    8681         *
    87          * ƒ^[ƒQƒbƒgƒn[ƒhƒEƒFƒA‚Ɉˑ¶‚µ‚Ä•K—v‚ȏ‰Šú‰»ˆ—‚ª‚ ‚éê‡
    88          * ‚́Chardware_init_hook ‚Æ‚¢‚¤ŠÖ”‚ð—pˆÓ‚·‚é
     82         * ターゲットハードウェアに依存して必要な初期化処理がある場合
     83         * は,hardware_init_hook という関数を用意する
    8984         */
    9085        ldr  r0, =hardware_init_hook
     
    9590#ifndef OMIT_BSS_INIT
    9691        /*
    97          *  BSSƒZƒNƒVƒ‡ƒ“‰Šú‰»
     92         *  BSSセクション初期化
    9893         */
    9994        mov  r0, #0
     
    114109#ifndef OMIT_DATA_INIT
    115110        /*
    116          *  DATAƒZƒNƒVƒ‡ƒ“‰Šú‰»
    117          *  __idata_start ‚©‚ç __idata_end ‚Ü‚Å‚ðC__data_start ˆÈ~‚É
    118          *  ƒRƒs[‚·‚é
     111         *  DATAセクション初期化
     112         *  __idata_start から __idata_end までを,__data_start 以降に
     113         *  コピーする
    119114         */
    120115        ldr  r1, =__idata_start
     
    133128
    134129        /*
    135          *  software_init_hook ‚ðŒÄo‚µi0 ‚Å‚È‚¢ê‡j
     130         *  software_init_hook を呼出し(0 でない場合)
    136131         *
    137          *  ƒ\ƒtƒgƒEƒFƒAŠÂ‹«i“Á‚Ƀ‰ƒCƒuƒ‰ƒŠj‚Ɉˑ¶‚µ‚Ä•K—v‚ȏ‰Šú‰»ˆ
    138          *  —‚ª‚ ‚éê‡‚́Csoftware_init_hook ‚Æ‚¢‚¤ŠÖ”‚ð—pˆÓ‚·‚ê‚Î
    139          *  ‚æ‚¢D
     132         *  ソフトウェア環境(特にライブラリ)に依存して必要な初期化処
     133         *  理がある場合は,software_init_hook という関数を用意すれば
     134         *  よい.
    140135         */
    141136start_5:
Note: See TracChangeset for help on using the changeset viewer.