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
Files:
55 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:
  • ssp_qb_r5f100le_cs/trunk/arch/ca78k0r/MANIFEST

    • Property svn:mime-type set to text/plain; charset=shift_jis
  • ssp_qb_r5f100le_cs/trunk/arch/ca78k0r/gensyms-rl78.exe

    • Property svn:mime-type deleted
  • ssp_qb_r5f100le_cs/trunk/arch/ca78k0r/gensyms-rl78/gensyms-rl78.sln

    • Property svn:mime-type set to text/plain; charset=utf-8
  • ssp_qb_r5f100le_cs/trunk/arch/ca78k0r/gensyms-rl78/gensyms-rl78/App.config

    • Property svn:mime-type set to text/plain; charset=utf-8
  • ssp_qb_r5f100le_cs/trunk/arch/ca78k0r/gensyms-rl78/gensyms-rl78/Program.cs

    • Property svn:mime-type set to text/plain; charset=utf-8
  • ssp_qb_r5f100le_cs/trunk/arch/ca78k0r/gensyms-rl78/gensyms-rl78/Properties/AssemblyInfo.cs

    • Property svn:mime-type set to text/plain; charset=utf-8
  • ssp_qb_r5f100le_cs/trunk/arch/ca78k0r/gensyms-rl78/gensyms-rl78/gensyms-rl78.csproj

    • Property svn:mime-type set to text/plain; charset=utf-8
  • ssp_qb_r5f100le_cs/trunk/arch/ca78k0r/tool_stddef.h

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    1111 *             Nagoya Municipal Industrial Research Institute, JAPAN
    1212 *
    13  *  ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì(1)`(4)‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
    14  *  ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü
    15  *  •ÏEÄ”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
    16  *  (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
    17  *      Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
    18  *      ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    19  *  (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    20  *      —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ
    21 ƒƒ“ƒgi—˜—p
    22  *      ŽÒƒ}ƒjƒ
    23 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
    24  *      ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    25  *  (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    26  *      —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
    27  *      ‚ƁD
    28  *    (a) Ä”z•z‚É”º‚¤ƒhƒLƒ
    29 ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ
    30 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
    31  *        ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    32  *    (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
    33  *        •ñ‚·‚邱‚ƁD
    34  *  (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
    35  *      ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
    36  *      ‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝
    37  *      —R‚ÉŠî‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð
    38  *      –Ɛӂ·‚邱‚ƁD
     13 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     14 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     15 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     16 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     17 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     18 *      スコード中に含まれていること.
     19 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     20 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     21 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     22 *      の無保証規定を掲載すること.
     23 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     24 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     25 *      と.
     26 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     27 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     28 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     29 *        報告すること.
     30 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     31 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     32 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     33 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     34 *      免責すること.
    3935 *
    40  *  –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
    41  *  ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I
    42  *  ‚ɑ΂·‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒF
    43  *  ƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»
    44  *  ‚̐ӔC‚𕉂í‚È‚¢D
     36 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     37 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     38 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     39 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     40 *  の責任を負わない.
    4541 *
    4642 */
    4743
    4844/*
    49  *  t_stddef.h‚ÌŠJ”­ŠÂ‹«ˆË‘¶•”iƒ‹ƒlƒTƒXƒGƒŒƒNƒgƒƒjƒNƒX CA78K0R—pj
     45 *  t_stddef.hの開発環境依存部(ルネサスエレクトロニクス CA78K0R用)
    5046 *
    51  *  ‚±‚̃Cƒ“ƒNƒ‹[ƒhƒtƒ@ƒCƒ‹‚́Ctarget_stddef.h ‚̐擪‚ŃCƒ“ƒNƒ‹[ƒh‚³‚ê‚éD
     47 *  このインクルードファイルは,target_stddef.h の先頭でインクルードされる.
    5248 */
    5349
     
    5652
    5753/*
    58  *  ƒRƒ“ƒpƒCƒ‰‚ÌŠg’£‹@”\‚Ì‚½‚߂̃}ƒNƒ’è‹`
     54 *  コンパイラの拡張機能のためのマクロ定義
    5955 */
    6056/*
    61  *  inline Ž¯•ÊŽq‚̓Rƒ“ƒpƒCƒ‰‚ªƒTƒ|[ƒg‚µ‚È‚¢D
     57 *  inline 識別子はコンパイラがサポートしない.
    6258 */
    6359#define inline
     
    6561
    6662/*
    67  *  ƒRƒ“ƒpƒCƒ‰‚Å‚Í __asm Ž¯•ÊŽq‚ªƒTƒ|[ƒg‚³‚ê‚Ä‚¢‚邪Žg—p‚µ‚È‚¢‚½‚ß–¢’è‹`‚Æ‚·‚éD
     63 *  コンパイラでは __asm 識別子がサポートされているが使用しないため未定義とする.
    6864 */
    6965
    7066/*
    71  *  ƒŠƒ^[ƒ“‚µ‚È‚¢ŠÖ”‚Å‚ ‚邱‚Æ‚ðŽ¦‚·‚½‚߂̃L[ƒ[ƒh
    72  *      ŽÀÛ‚ɂ͉½‚à‚µ‚È‚¢
     67 *  リターンしない関数であることを示すためのキーワード
     68 *      実際には何もしない
    7369 */
    7470#define NoReturn
     
    7672
    7773/*
    78  *  ŠJ”­ŠÂ‹«‚Ì•W€ƒCƒ“ƒNƒ‹[ƒhƒtƒ@ƒCƒ‹‚Ì—˜—p
     74 *  開発環境の標準インクルードファイルの利用
    7975 *
    80  *  NULL‚Ì’è‹`‚ðstddef.h‚©‚çCINT_MAXCINT_MINCUINT_MAXCLONG_MAXC
    81  *  LONG_MINCULONG_MAXCCHAR_BIT‚Ì’è‹`‚ðlimits.h‚©‚çŽæ‚荞‚ށD
     76 *  NULLの定義をstddef.hから,INT_MAX,INT_MIN,UINT_MAX,LONG_MAX,
     77 *  LONG_MIN,ULONG_MAX,CHAR_BITの定義をlimits.hから取り込む.
    8278 */
    8379#ifndef TOPPERS_MACRO_ONLY
     
    8783
    8884/*
    89  *  stdint.h‚Ì‘ã—p‚Æ‚È‚é’è‹`
     85 *  stdint.hの代用となる定義
    9086 *
    91  *  C99 ‚Ì stdint.h ‚ª—pˆÓ‚³‚ê‚Ä‚¢‚È‚¢‚½‚߁C‚»‚Ì‘ã—p‚Æ‚È‚é’è‹`‚ð—^‚¦‚éD
     87 *  C99 の stdint.h が用意されていないため,その代用となる定義を与える.
    9288 */
    9389
    9490/*
    95  *  ƒRƒ“ƒpƒCƒ‰ˆË‘¶‚̃f[ƒ^Œ^‚Ì’è‹`
     91 *  コンパイラ依存のデータ型の定義
    9692 */
    9793#ifndef TOPPERS_MACRO_ONLY
    9894
    99 typedef signed char                     int8_t;         /* •„†•t‚«8ƒrƒbƒg®” */
    100 typedef unsigned char           uint8_t;        /* •„†–³‚µ8ƒrƒbƒg®” */
     95typedef signed char                     int8_t;         /* 符号付き8ビット整数 */
     96typedef unsigned char           uint8_t;        /* 符号無し8ビット整数 */
    10197
    102 typedef signed short            int16_t;        /* •„†•t‚«16ƒrƒbƒg®” */
    103 typedef unsigned short          uint16_t;       /* •„†–³‚µ16ƒrƒbƒg®” */
     98typedef signed short            int16_t;        /* 符号付き16ビット整数 */
     99typedef unsigned short          uint16_t;       /* 符号無し16ビット整数 */
    104100
    105 typedef signed long                     int32_t;        /* •„†•t‚«32ƒrƒbƒg®” */
    106 typedef unsigned long           uint32_t;       /* •„†–³‚µ32ƒrƒbƒg®” */
     101typedef signed long                     int32_t;        /* 符号付き32ビット整数 */
     102typedef unsigned long           uint32_t;       /* 符号無し32ビット整数 */
    107103
    108 /* 64ƒrƒbƒg®”Œ^‚Í–¢ƒTƒ|[ƒg */
     104/* 64ビット整数型は未サポート */
    109105
    110 typedef int8_t                  int_least8_t;   /* 8ƒrƒbƒgˆÈã‚Ì•„†•t‚«®” */
    111 typedef uint8_t                 uint_least8_t;  /* 8ƒrƒbƒgˆÈã‚Ì•„†–³‚µ®” */
     106typedef int8_t                  int_least8_t;   /* 8ビット以上の符号付き整数 */
     107typedef uint8_t                 uint_least8_t;  /* 8ビット以上の符号無し整数 */
    112108
    113 typedef long                            intptr_t;       /* ƒ|ƒCƒ“ƒ^‚ðŠi”[‚Å‚«‚é•„†•t‚«®” */
    114 typedef unsigned long           uintptr_t;      /* ƒ|ƒCƒ“ƒ^‚ðŠi”[‚Å‚«‚é•„†–³‚µ®” */
     109typedef long                            intptr_t;       /* ポインタを格納できる符号付き整数 */
     110typedef unsigned long           uintptr_t;      /* ポインタを格納できる符号無し整数 */
    115111
    116112#endif /* TOPPERS_MACRO_ONLY */
    117113
    118114/*
    119  *  ƒRƒ“ƒpƒCƒ‰ˆË‘¶‚̃f[ƒ^Œ^‚̐®”’萔‚ðì‚éƒ}ƒNƒ(C99)
    120  *  —pˆÓ‚³‚ê‚Ä‚¢‚È‚¢‚½‚߁C‚±‚±‚Å’è‹`‚·‚éD
     115 *  コンパイラ依存のデータ型の整数定数を作るマクロ(C99)
     116 *  用意されていないため,ここで定義する.
    121117 */
    122118#ifndef INT8_C
     
    145141
    146142/*
    147  *  ƒRƒ“ƒpƒCƒ‰ˆË‘¶‚̃f[ƒ^Œ^‚ÉŠi”[‚Å‚«‚éÅ‘å’l‚ƍŏ¬’l‚Ì’è‹`(C99)
    148  *  —pˆÓ‚³‚ê‚Ä‚¢‚È‚¢‚½‚߁C‚±‚±‚Å’è‹`‚·‚éD
     143 *  コンパイラ依存のデータ型に格納できる最大値と最小値の定義(C99)
     144 *  用意されていないため,ここで定義する.
    149145 */
    150146#define INT8_MAX                        SCHAR_MAX
     
    165161
    166162/*
    167  *  •‚“®¬”“_Œ^‚ÉŠÖ‚·‚é’è‹`
     163 *  浮動小数点型に関する定義
    168164 */
    169165#ifndef TOPPERS_MACRO_ONLY
    170166
    171 typedef float           float32_t;                      /* IEEE754€‹’‚Ì’P¸“x•‚“®¬”“_” */
    172 /* ”{¸“x•‚“®¬”“_”‚Í–¢ƒTƒ|[ƒg‚Å‚ ‚èCdouble‚àfloat‚Æ“¯‚¶32ƒrƒbƒg */
     167typedef float           float32_t;                      /* IEEE754準拠の単精度浮動小数点数 */
     168/* 倍精度浮動小数点数は未サポートであり,doubleもfloatと同じ32ビット */
    173169
    174170#endif /* TOPPERS_MACRO_ONLY */
     
    178174
    179175/*
    180  *  ‹óƒ‰ƒxƒ‹‚Ì’è‹`
    181  *    ‘å‚«‚³ƒ[ƒ‚Ì”z—ñ‚ÍŒx‚ɂȂ邽‚߁A
    182  *    ‚±‚±‚Å•Ê“r’è‹`‚·‚éB
     176 *  空ラベルの定義
     177 *    大きさゼロの配列は警告になるため、
     178 *    ここで別途定義する。
    183179 */
    184180#define TOPPERS_EMPTY_LABEL(x,y) x y[1]
  • ssp_qb_r5f100le_cs/trunk/arch/gcc/MANIFEST

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

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    88 *              Graduate School of Information Science, Nagoya Univ., 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
    36  *
    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
     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 *      免責すること.
     32 *
     33 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     34 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     35 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     36 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     37 *  の責任を負わない.
    4238 *
    4339 *  @(#) $Id: tool_stddef.h 819 2008-03-18 12:58:50Z hiro $
     
    4541
    4642/*
    47  *              t_stddef.h‚ÌŠJ”­ŠÂ‹«ˆË‘¶•”iGCC—pj
     43 *              t_stddef.hの開発環境依存部(GCC用)
    4844 */
    4945
     
    5248
    5349/*
    54  *  ƒRƒ“ƒpƒCƒ‰‚ÌŠg’£‹@”\‚Ì‚½‚߂̃}ƒNƒ’è‹`
    55  */
    56 #ifndef __cplusplus                                     /* C++‚É‚Íinline ‚ª‚ ‚é */
    57 #if __STDC_VERSION__ < 199901L          /* C99‚É‚Íinline ‚ª‚ ‚é */
    58 #define inline  __inline__                      /* ƒCƒ“ƒ‰ƒCƒ“ŠÖ” */
     50 *  コンパイラの拡張機能のためのマクロ定義
     51 */
     52#ifndef __cplusplus                                     /* C++にはinline がある */
     53#if __STDC_VERSION__ < 199901L          /* C99にはinline がある */
     54#define inline  __inline__                      /* インライン関数 */
    5955#endif /* __STDC_VERSION__ < 199901L */
    6056#endif /* __cplusplus */
    6157
    62 #define Inline  static __inline__       /* ƒCƒ“ƒ‰ƒCƒ“ŠÖ” */
    63 
    64 #ifndef __cplusplus                                     /* C++‚É‚Íasm‚ª‚ ‚é */
    65 #define asm             __asm__                         /* ƒCƒ“ƒ‰ƒCƒ“ƒAƒZƒ“ƒuƒ‰ */
     58#define Inline  static __inline__       /* インライン関数 */
     59
     60#ifndef __cplusplus                                     /* C++にはasmがある */
     61#define asm             __asm__                         /* インラインアセンブラ */
    6662#endif /* __cplusplus */
    6763
    68 #define Asm             __asm__ volatile        /* ƒCƒ“ƒ‰ƒCƒ“ƒAƒZƒ“ƒuƒ‰iÅ“K‰»—}Ž~j*/
     64#define Asm             __asm__ volatile        /* インラインアセンブラ(最適化抑止)*/
    6965
    7066#define NoReturn        __attribute__((__noreturn__))
    71                                                                         /* ƒŠƒ^[ƒ“‚µ‚È‚¢ŠÖ” */
    72 
    73 /*
    74  *  ŠJ”­ŠÂ‹«‚Ì•W€ƒCƒ“ƒNƒ‹[ƒhƒtƒ@ƒCƒ‹‚Ì—˜—p
    75  *
    76  *  NULL‚Ì’è‹`‚ðstddef.h‚©‚çCINT_MAXCINT_MINCUINT_MAXCLONG_MAXC
    77  *  LONG_MINCULONG_MAXCCHAR_BIT‚Ì’è‹`‚ðlimits.h‚©‚çŽæ‚荞‚ށD
    78  *
    79  *  C++/EC++‚ł́C•W€Žd—lã‚Í‚±‚ê‚ç‚̃Cƒ“ƒNƒ‹[ƒhƒtƒ@ƒCƒ‹‚ª—pˆÓ‚³‚ê‚Ä
    80  *  ‚¢‚é‚Æ‚ÍŒÀ‚ç‚È‚¢‚Ì‚Å’ˆÓ‚ª•K—v‚Å‚ ‚éi‚Ù‚Æ‚ñ‚Ç‚ÌŠJ”­ŠÂ‹«‚Å—pˆÓ‚³‚ê
    81  *  ‚Ä‚¢‚éjD
     67                                                                        /* リターンしない関数 */
     68
     69/*
     70 *  開発環境の標準インクルードファイルの利用
     71 *
     72 *  NULLの定義をstddef.hから,INT_MAX,INT_MIN,UINT_MAX,LONG_MAX,
     73 *  LONG_MIN,ULONG_MAX,CHAR_BITの定義をlimits.hから取り込む.
     74 *
     75 *  C++/EC++では,標準仕様上はこれらのインクルードファイルが用意されて
     76 *  いるとは限らないので注意が必要である(ほとんどの開発環境で用意され
     77 *  ている).
    8278 */
    8379#ifndef TOPPERS_MACRO_ONLY
     
    8783
    8884/*
    89  *  stdint.h‚Ì‘ã—p‚Æ‚È‚é’è‹`
    90  *
    91  *  ŠJ”­ŠÂ‹«‚Éstdint.h‚ª—pˆÓ‚³‚ê‚Ä‚¨‚炸CŠe®”Œ^‚̃TƒCƒY‚ª‚ ‚éƒpƒ^[
    92  *  ƒ“‚É“–‚Ä‚Í‚Ü‚éê‡‚ɁCstdint.h‚Ì‘ã—p‚Æ‚È‚é’è‹`‚ð—^‚¦‚éD
    93  *
    94  *  TOPPERS_STDINT_TYPE1: char/short/int/long long‚̃rƒbƒg’·‚ª‚»‚ꂼ‚ê
    95  *                        8/16/32/64ƒrƒbƒg‚ŁCƒ|ƒCƒ“ƒ^‚̃rƒbƒg’·‚ªlong
    96  *                        ‚̃rƒbƒg’·‚ƈê’v‚·‚éê‡
     85 *  stdint.hの代用となる定義
     86 *
     87 *  開発環境にstdint.hが用意されておらず,各整数型のサイズがあるパター
     88 *  ンに当てはまる場合に,stdint.hの代用となる定義を与える.
     89 *
     90 *  TOPPERS_STDINT_TYPE1: char/short/int/long longのビット長がそれぞれ
     91 *                        8/16/32/64ビットで,ポインタのビット長がlong
     92 *                        のビット長と一致する場合
    9793 */
    9894#ifdef TOPPERS_STDINT_TYPE1
    9995
    10096/*
    101  *  ƒRƒ“ƒpƒCƒ‰ˆË‘¶‚̃f[ƒ^Œ^‚Ì’è‹`
     97 *  コンパイラ依存のデータ型の定義
    10298 */
    10399#ifndef TOPPERS_MACRO_ONLY
    104100
    105 typedef signed char                     int8_t;         /* •„†•t‚«8ƒrƒbƒg®” */
    106 typedef unsigned char           uint8_t;        /* •„†–³‚µ8ƒrƒbƒg®” */
    107 
    108 typedef signed short            int16_t;        /* •„†•t‚«16ƒrƒbƒg®” */
    109 typedef unsigned short          uint16_t;       /* •„†–³‚µ16ƒrƒbƒg®” */
    110 
    111 typedef signed int                      int32_t;        /* •„†•t‚«32ƒrƒbƒg®” */
    112 typedef unsigned int            uint32_t;       /* •„†–³‚µ32ƒrƒbƒg®” */
    113 
    114 typedef signed long long        int64_t;        /* •„†•t‚«64ƒrƒbƒg®” */
    115 typedef unsigned long long      uint64_t;       /* •„†–³‚µ64ƒrƒbƒg®” */
    116 
    117 typedef int8_t                          int_least8_t;   /* 8ƒrƒbƒgˆÈã‚Ì•„†•t‚«®” */
    118 typedef uint8_t                         uint_least8_t;  /* 8ƒrƒbƒgˆÈã‚Ì•„†–³‚µ®” */
    119 
    120 typedef long                            intptr_t;       /* ƒ|ƒCƒ“ƒ^‚ðŠi”[‚Å‚«‚é•„†•t‚«®” */
    121 typedef unsigned long           uintptr_t;      /* ƒ|ƒCƒ“ƒ^‚ðŠi”[‚Å‚«‚é•„†–³‚µ®” */
     101typedef signed char                     int8_t;         /* 符号付き8ビット整数 */
     102typedef unsigned char           uint8_t;        /* 符号無し8ビット整数 */
     103
     104typedef signed short            int16_t;        /* 符号付き16ビット整数 */
     105typedef unsigned short          uint16_t;       /* 符号無し16ビット整数 */
     106
     107typedef signed int                      int32_t;        /* 符号付き32ビット整数 */
     108typedef unsigned int            uint32_t;       /* 符号無し32ビット整数 */
     109
     110typedef signed long long        int64_t;        /* 符号付き64ビット整数 */
     111typedef unsigned long long      uint64_t;       /* 符号無し64ビット整数 */
     112
     113typedef int8_t                          int_least8_t;   /* 8ビット以上の符号付き整数 */
     114typedef uint8_t                         uint_least8_t;  /* 8ビット以上の符号無し整数 */
     115
     116typedef long                            intptr_t;       /* ポインタを格納できる符号付き整数 */
     117typedef unsigned long           uintptr_t;      /* ポインタを格納できる符号無し整数 */
    122118
    123119#endif /* TOPPERS_MACRO_ONLY */
    124120
    125121/*
    126  *  ƒRƒ“ƒpƒCƒ‰ˆË‘¶‚̃f[ƒ^Œ^‚̐®”’萔‚ðì‚éƒ}ƒNƒ
     122 *  コンパイラ依存のデータ型の整数定数を作るマクロ
    127123 */
    128124#ifndef INT8_C
     
    159155
    160156/*
    161  *  ƒRƒ“ƒpƒCƒ‰ˆË‘¶‚̃f[ƒ^Œ^‚ÉŠi”[‚Å‚«‚éÅ‘å’l‚ƍŏ¬’l‚Ì’è‹`
     157 *  コンパイラ依存のデータ型に格納できる最大値と最小値の定義
    162158 */
    163159#define INT8_MAX                        SCHAR_MAX
     
    184180
    185181/*
    186  *  •‚“®¬”“_Œ^‚ÉŠÖ‚·‚é’è‹`
    187  *
    188  *  TOPPERS_STDFLOAT_TYPE1: float‚ªIEEE754€‹’‚Ì’P¸“x•‚“®¬”“_”C
    189  *                                                      double‚ª”{¸“x•‚“®¬”“_”‚̏ꍇ
     182 *  浮動小数点型に関する定義
     183 *
     184 *  TOPPERS_STDFLOAT_TYPE1: floatがIEEE754準拠の単精度浮動小数点数,
     185 *                                                      doubleが倍精度浮動小数点数の場合
    190186 */
    191187#ifdef TOPPERS_STDFLOAT_TYPE1
    192188#ifndef TOPPERS_MACRO_ONLY
    193189
    194 typedef float           float32_t;                      /* IEEE754€‹’‚Ì’P¸“x•‚“®¬”“_” */
    195 typedef double          double64_t;                     /* IEEE754€‹’‚Ì”{¸“x•‚“®¬”“_” */
     190typedef float           float32_t;                      /* IEEE754準拠の単精度浮動小数点数 */
     191typedef double          double64_t;                     /* IEEE754準拠の倍精度浮動小数点数 */
    196192
    197193#endif /* TOPPERS_MACRO_ONLY */
  • ssp_qb_r5f100le_cs/trunk/arch/rl78_ca78k0r/MANIFEST

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

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    77$             Nagoya Municipal Industrial Research Institute, JAPAN
    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‰ü•ÏE
    11 $  Ä”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‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[ƒX
    14 $      ƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    15 $  (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg—p
    16 $      ‚Å‚«‚éŒ`‚ōĔ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—p
    22 $      ‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±‚Ɓ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‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹ŠQ
    30 $      ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD‚Ü‚½C
    31 $      –{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝—R‚ÉŠî‚Ã
    32 $      ‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
    33 $
    34 $  –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨‚æ
    35 $  ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I‚ɑ΂·
    36 $  ‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p
    37 $  ‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»‚̐ӔC‚ð•‰
    38 $  ‚í‚È‚¢D
    39 $
    40 
    41 $
    42 $  ƒvƒƒZƒbƒTˆË‘¶ƒeƒ“ƒvƒŒ[ƒg
    43 $
    44 
    45 $
    46 $  ATT_ISR‚ÅŽg—p‚Å‚«‚銄ž‚ݔԍ†‚Æ‚»‚ê‚ɑΉž‚·‚銄ž‚݃nƒ“ƒhƒ‰”ԍ†
     9$  上記著作権者は,以下の (1)〜(4) の条件を満たす場合に限り,本ソフトウェ
     10$  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改変・
     11$  再配布(以下,利用と呼ぶ)することを無償で許諾する.
     12$  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作権
     13$      表示,この利用条件および下記の無保証規定が,そのままの形でソース
     14$      コード中に含まれていること.
     15$  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使用
     16$      できる形で再配布する場合には,再配布に伴うドキュメント(利用者マ
     17$      ニュアルなど)に,上記の著作権表示,この利用条件および下記の無保
     18$      証規定を掲載すること.
     19$  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使用
     20$      できない形で再配布する場合には,次のいずれかの条件を満たすこと.
     21$    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著作
     22$        権表示,この利用条件および下記の無保証規定を掲載すること.
     23$    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに報
     24$        告すること.
     25$  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損害
     26$      からも,上記著作権者およびTOPPERSプロジェクトを免責すること.また,
     27$      本ソフトウェアのユーザまたはエンドユーザからのいかなる理由に基づ
     28$      く請求からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     29$
     30$  本ソフトウェアは,無保証で提供されているものである.上記著作権者およ
     31$  びTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的に対す
     32$  る適合性も含めて,いかなる保証も行わない.また,本ソフトウェアの利用
     33$  により直接的または間接的に生じたいかなる損害に関しても,その責任を負
     34$  わない.
     35$
     36
     37$
     38$  プロセッサ依存テンプレート
     39$
     40
     41$
     42$  ATT_ISRで使用できる割込み番号とそれに対応する割込みハンドラ番号
    4743$
    4844
     
    5147
    5248$
    53 $  DEF_INH^DEF_EXC‚ÅŽg—p‚Å‚«‚銄ž‚݃nƒ“ƒhƒ‰”ԍ†^CPU—áŠOƒnƒ“ƒhƒ‰”ԍ†
     49$  DEF_INH/DEF_EXCで使用できる割込みハンドラ番号/CPU例外ハンドラ番号
    5450$
    5551
     
    5854
    5955$
    60 $  CFG_INT‚ÅŽg—p‚Å‚«‚銄ž‚ݔԍ†‚ÆŠ„ž‚Ý—Dæ“x
     56$  CFG_INTで使用できる割込み番号と割込み優先度
    6157$
    6258
    6359$INTNO_CFGINT_VALID = INTNO_VALID$
    6460
    65 $ // INTPRI_CFGINT_VALID ‚̓vƒƒZƒbƒT‚ɃZƒbƒg‰Â”\‚È—Dæ“x‚Ì”ÍˆÍ‚ðŽ¦‚µC
    66 $ // ƒJ[ƒlƒ‹ŠÇ—(ŠO)‚©‚Ç‚¤‚©‚Ì‹æ•Ê‚ð‚µ‚Ä‚¢‚È‚¢D
    67 $ // ƒJ[ƒlƒ‹ŠÇ—‚ƂȂ銄ž‚Ý—Dæ“x‚͈̔͂ð•ÏX‚·‚éê‡C
    68 $ // TMIN_INTPRI (prc_kernel.h) ‚Ì’l‚ð•K—v‚ɉž‚¶‚ĕύX‚·‚éD
     61$ // INTPRI_CFGINT_VALID はプロセッサにセット可能な優先度の範囲を示し,
     62$ // カーネル管理(外)かどうかの区別をしていない.
     63$ // カーネル管理となる割込み優先度の範囲を変更する場合,
     64$ // TMIN_INTPRI (prc_kernel.h) の値を必要に応じて変更する.
    6965$INTPRI_CFGINT_VALID = { -4,-3,-2,-1 }$
    7066
    7167$
    72 ƒXƒ^ƒbƒNƒTƒCƒY‚̃`ƒFƒbƒN•û–@Žw’è
    73 $
    74 ƒAƒ‰ƒCƒƒ“ƒg‚ÉŠÖŒW‚È‚­“¯‚¶‘¬“x‚ŃAƒNƒZƒX‚Å‚«‚é
     68スタックサイズのチェック方法指定
     69$
     70アライメントに関係なく同じ速度でアクセスできる
    7571$
    7672
     
    7975
    8076$
    81 ’萔’è‹`
     77定数定義
    8278$
    8379$TA_POSEDGE = TA_EDGE$
    8480
    8581$
    86 $ ƒ^[ƒQƒbƒgˆË‘¶‚ÌŠ„ž‚Ý‘®«‚Ì’è‹`
     82$ ターゲット依存の割込み属性の定義
    8783$
    8884
     
    9086
    9187$
    92 •W€ƒeƒ“ƒvƒŒ[ƒgƒtƒ@ƒCƒ‹‚̃Cƒ“ƒNƒ‹[ƒh
     88標準テンプレートファイルのインクルード
    9389$
    9490$INCLUDE "kernel.tf"$
     
    9692
    9793$
    98 $   CFG_INT‚̃^[ƒQƒbƒgˆË‘¶‚̃Gƒ‰[ƒ`ƒFƒbƒN
     94$   CFG_INTのターゲット依存のエラーチェック
    9995$
    10096$
     
    10298
    10399$FOREACH intno INT.ORDER_LIST$
    104 $       // INTŠ„ž‚݂ɑ΂·‚銄ž‚ݔԍ†‚©‚Ç‚¤‚©
     100$       // INT割込みに対する割込み番号かどうか
    105101        $IF (LENGTH(FIND(INTNO_INT , INT.INTNO[intno])) != 0)$
    106 $               // TA_POSEDGE ‚Ü‚½‚Í TA_NEGEDGE ‚Ü‚½‚Í TA_BOTHEDGE ‚ª“¯Žž‚ɐݒ肳‚ê‚Ä‚È‚¢‚©‚Ç‚¤‚©
     102$               // TA_POSEDGE または TA_NEGEDGE または TA_BOTHEDGE が同時に設定されてないかどうか
    107103                $IF
    108104                (   ((INT.INTATR[intno] & (TA_POSEDGE|TA_NEGEDGE|TA_BOTHEDGE)) != (TA_POSEDGE))
     
    113109                $END$
    114110        $ELSE$
    115 $               // INTŠ„ž‚݈ȊO‚ÌŠ„ž‚݂ɑ΂µ‚Ä TA_ENAINT ‹y‚Ñ TA_EDGE ˆÈŠO‚ÌŠ„ž‚Ý‘®«‚ªŽw’肳‚ê‚Ä‚¢‚È‚¢‚©‚Ç‚¤‚©
     111$               // INT割込み以外の割込みに対して TA_ENAINT 及び TA_EDGE 以外の割込み属性が指定されていないかどうか
    116112                $IF (INT.INTATR[intno] & ~(TA_ENAINT|TA_EDGE)) != 0$
    117113                        $ERROR$ INT.TEXT_LINE[intno]: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "intatr", INT.INTATR[intno], INT.INTNO[intno], "CFG_INT")$$END$
     
    122118
    123119$
    124 $ Š„ž‚ݔԍ†‚©‚犄ž‚Ý—Dæ“x‚ðŽæ‚èo‚·ƒe[ƒuƒ‹
     120$ 割込み番号から割込み優先度を取り出すテーブル
    125121$
    126122
     
    141137
    142138$
    143 ƒA[ƒLƒeƒNƒ`ƒƒˆË‘¶ƒeƒ“ƒvƒŒ[ƒgiƒAƒZƒ“ƒuƒ‰ŒÅ—L•”•ªj
    144 $
    145 
    146 $
    147 ƒAƒZƒ“ƒuƒ‰o—̓tƒ@ƒCƒ‹ (‹¤’Ê•”•ª)
     139アーキテクチャ依存テンプレート(アセンブラ固有部分)
     140$
     141
     142$
     143アセンブラ出力ファイル (共通部分)
    148144$
    149145
     
    151147
    152148;$NL$
    153 ;  RL78ƒA[ƒLƒeƒNƒ`ƒƒˆË‘¶o—̓tƒ@ƒCƒ‹$NL$
    154 ;$NL$
    155 Š„ž‚݃nƒ“ƒhƒ‰“üŒûˆ—‚Ì’è‹`$NL$
     149;  RL78アーキテクチャ依存出力ファイル$NL$
     150;$NL$
     151割込みハンドラ入口処理の定義$NL$
    156152;$NL$
    157153$NL$$NL$
     
    159155
    160156$
    161 Š„ž‚Ý“üŒûˆ—
    162 $
    163 
    164 $
    165 ƒOƒ[ƒoƒ‹ƒVƒ“ƒ{ƒ‹
     157割込み入口処理
     158$
     159
     160$
     161グローバルシンボル
    166162$
    167163
     
    169165$TAB$extrn __kernel_int_return$NL$$NL$
    170166
    171 $TAB$; ƒRƒ“ƒpƒCƒ‰‚ªŽg—p‚·‚é saddr—̈æ‚̃ŒƒWƒXƒ^$NL$
     167$TAB$; コンパイラが使用する saddr領域のレジスタ$NL$
    172168$TAB$extrn      _@RTARG0,_@RTARG2,_@RTARG4,_@RTARG6,_@SEGAX,_@SEGDE$NL$
    173169$TAB$extrn      _@NRARG0,_@NRARG1,_@NRARG2,_@NRARG3$NL$
     
    176172
    177173; $NL$
    178 ; ƒRƒ“ƒpƒCƒ‰‚ªŽg—p‚·‚ésaddr—̈æ‚Ì‘Þ”ð $NL$
     174; コンパイラが使用するsaddr領域の退避 $NL$
    179175; $NL$
    180176save_saddr_regs         macro$NL$
     
    191187        $TAB$movw       ax, _@SEGDE  $NL$
    192188        $TAB$push       ax           $NL$
    193         $TAB$$$if (ALLOC_REGVAR_TO_SADDR) ; -qr ƒIƒvƒVƒ‡ƒ“‚ðŽg—p‚·‚éê‡ $NL$
     189        $TAB$$$if (ALLOC_REGVAR_TO_SADDR) ; -qr オプションを使用する場合 $NL$
    194190        $TAB$movw       ax, _@NRARG0 $NL$
    195191        $TAB$push       ax           $NL$
     
    215211
    216212$
    217 Š„ž‚݃nƒ“ƒhƒ‰“üŒûˆ—
     213割込みハンドラ入口処理
    218214$
    219215
     
    223219                $TAB$public     __kernel_$INH.INTHDR[inhno]$_$+INH.INHNO[inhno]$_entry  $NL$
    224220                __kernel_$INH.INTHDR[inhno]$_$+INH.INHNO[inhno]$_entry:                         $NL$
    225                 $TAB$push       ax       ; ƒŒƒWƒXƒ^‚ðƒ^ƒXƒNƒXƒ^ƒbƒN‚Ö‘Þ”ð $NL$
     221                $TAB$push       ax       ; レジスタをタスクスタックへ退避 $NL$
    226222                $TAB$push       bc $NL$
    227223                $TAB$push       de $NL$
    228224                $TAB$push       hl $NL$
    229                 $TAB$mov        a,es            ; ES, CS ‚Ì‘Þ”ð $NL$
     225                $TAB$mov        a,es            ; ES, CS の退避 $NL$
    230226                $TAB$mov        x,a  $NL$
    231227                $TAB$mov        a,cs $NL$
    232228                $TAB$push       ax   $NL$
    233229                $TAB$save_saddr_regs$NL$
    234                 $TAB$movw       bc, #_$INH.INTHDR[inhno]$ ; ƒnƒ“ƒhƒ‰‚̃AƒhƒŒƒX‚ð bc ‚Ö $NL$
     230                $TAB$movw       bc, #_$INH.INTHDR[inhno]$ ; ハンドラのアドレスを bc へ $NL$
    235231
    236232                $IF (INH.INHATR[inhno] & TA_NONKERNEL) == 0$
    237                         $TAB$br         __kernel_interrupt_entry        ; ‹¤’Ê‚Ì“üŒûˆ—‚Ö $NL$
     233                        $TAB$br         __kernel_interrupt_entry        ; 共通の入口処理へ $NL$
    238234                        $NL$$NL$
    239235                $ELSE$
    240                         $TAB$;ƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚݂̏ꍇCƒnƒ“ƒhƒ‰ŽÀs‚µ‚Ä‚»‚̂܂܃Šƒ^[ƒ“ $NL$
    241                         $TAB$call       bc                              ; Š„ž‚݃nƒ“ƒhƒ‰ŒÄ‚яo‚µ$NL$
    242                         $TAB$br         __kernel_int_return             ; ƒŒƒWƒXƒ^•œ‹A & Š„ž‚Ý‚©‚烊ƒ^[ƒ“(prc_support.asm) $NL$
     236                        $TAB$;カーネル管理外の割込みの場合,ハンドラ実行してそのままリターン $NL$
     237                        $TAB$call       bc                              ; 割込みハンドラ呼び出し$NL$
     238                        $TAB$br         __kernel_int_return             ; レジスタ復帰 & 割込みからリターン(prc_support.asm) $NL$
    243239                $END$
    244240        $END$
     
    247243
    248244$
    249 $  CPU—áŠOƒnƒ“ƒhƒ‰“üŒûˆ—
     245$  CPU例外ハンドラ入口処理
    250246$
    251247
     
    255251                $TAB$public     __kernel_$EXC.EXCHDR[excno]$_$+EXC.EXCNO[excno]$_entry  $NL$
    256252                __kernel_$EXC.EXCHDR[excno]$_$+EXC.EXCNO[excno]$_entry:                         $NL$
    257                 $TAB$push       ax              ; ƒŒƒWƒXƒ^‚ðƒ^ƒXƒNƒXƒ^ƒbƒN‚Ö‘Þ”ð $NL$
     253                $TAB$push       ax              ; レジスタをタスクスタックへ退避 $NL$
    258254                $TAB$push       bc $NL$
    259255                $TAB$push       de $NL$
    260256                $TAB$push       hl $NL$
    261                 $TAB$mov        a,es            ; ES, CS ‚Ì‘Þ”ð $NL$
     257                $TAB$mov        a,es            ; ES, CS の退避 $NL$
    262258                $TAB$mov        x,a  $NL$
    263259                $TAB$mov        a,cs $NL$
    264260                $TAB$push       ax   $NL$
    265261                $TAB$save_saddr_regs $NL$
    266                 $TAB$movw       ax, sp          ; SP(ƒnƒ“ƒhƒ‰‚̈ø”‚Æ‚È‚é)‚ð ax ‚Ö $NL$
    267                 $TAB$movw       bc, #_$EXC.EXCHDR[excno]$ ; ƒnƒ“ƒhƒ‰‚̃AƒhƒŒƒX‚ð bc ‚Ö $NL$
    268                 $TAB$br         __kernel_interrupt_entry        ; ‹¤’Ê‚Ì“üŒûˆ—‚Ö $NL$
     262                $TAB$movw       ax, sp          ; SP(ハンドラの引数となる)を ax へ $NL$
     263                $TAB$movw       bc, #_$EXC.EXCHDR[excno]$ ; ハンドラのアドレスを bc へ $NL$
     264                $TAB$br         __kernel_interrupt_entry        ; 共通の入口処理へ $NL$
    269265                $NL$$NL$
    270266        $END$
     
    273269
    274270$
    275 ƒxƒNƒ^ƒe[ƒuƒ‹
    276 $
    277 
    278 ;$NL$
    279 ƒxƒNƒ^ƒe[ƒuƒ‹$NL$
     271ベクタテーブル
     272$
     273
     274;$NL$
     275ベクタテーブル$NL$
    280276;$NL$
    281277$NL$
     
    308304
    309305$
    310 $  prc_support.asm —pƒ}ƒNƒ’è‹`ƒtƒ@ƒCƒ‹
     306$  prc_support.asm 用マクロ定義ファイル
    311307$
    312308
  • ssp_qb_r5f100le_cs/trunk/arch/rl78_ca78k0r/prc_cfg1_out.h

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    11/*
    2  *              cfg1_out.c‚̃Šƒ“ƒN‚É•K—v‚ȃXƒ^ƒu‚Ì’è‹`
     2 *              cfg1_out.cのリンクに必要なスタブの定義
    33 */
    44
  • ssp_qb_r5f100le_cs/trunk/arch/rl78_ca78k0r/prc_config.c

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    1111 *             Nagoya Municipal Industrial Research Institute, JAPAN
    1212 *
    13  *  ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì (1)`(4) ‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
    14  *  ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü•ÏE
    15  *  Ä”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
    16  *  (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ìŒ 
    17  *      •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[ƒX
    18  *      ƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    19  *  (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg—p
    20  *      ‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ
    21 ƒƒ“ƒgi—˜—pŽÒƒ}
    22  *      ƒjƒ
    23 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•Û
    24  *      Ø‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    25  *  (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg—p
    26  *      ‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±‚ƁD
    27  *    (a) Ä”z•z‚É”º‚¤ƒhƒLƒ
    28 ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ
    29 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ì
    30  *        Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    31  *    (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É•ñ
    32  *        ‚·‚邱‚ƁD
    33  *  (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹ŠQ
    34  *      ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD‚Ü‚½C
    35  *      –{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝—R‚ÉŠî‚Ã
    36  *      ‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
     13 *  上記著作権者は,以下の (1)〜(4) の条件を満たす場合に限り,本ソフトウェ
     14 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改変・
     15 *  再配布(以下,利用と呼ぶ)することを無償で許諾する.
     16 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作権
     17 *      表示,この利用条件および下記の無保証規定が,そのままの形でソース
     18 *      コード中に含まれていること.
     19 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使用
     20 *      できる形で再配布する場合には,再配布に伴うドキュメント(利用者マ
     21 *      ニュアルなど)に,上記の著作権表示,この利用条件および下記の無保
     22 *      証規定を掲載すること.
     23 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使用
     24 *      できない形で再配布する場合には,次のいずれかの条件を満たすこと.
     25 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著作
     26 *        権表示,この利用条件および下記の無保証規定を掲載すること.
     27 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに報
     28 *        告すること.
     29 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損害
     30 *      からも,上記著作権者およびTOPPERSプロジェクトを免責すること.また,
     31 *      本ソフトウェアのユーザまたはエンドユーザからのいかなる理由に基づ
     32 *      く請求からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
    3733 *
    38  *  –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨‚æ
    39  *  ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I‚ɑ΂·
    40  *  ‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p
    41  *  ‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»‚̐ӔC‚ð•‰
    42  *  ‚í‚È‚¢D
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者およ
     35 *  びTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的に対す
     36 *  る適合性も含めて,いかなる保証も行わない.また,本ソフトウェアの利用
     37 *  により直接的または間接的に生じたいかなる損害に関しても,その責任を負
     38 *  わない.
    4339 *
    4440 */
    4541
    4642/*
    47  *              ƒvƒƒZƒbƒTˆË‘¶ƒ‚ƒWƒ
    48 [ƒ‹iRL78j
     43 *              プロセッサ依存モジュール(RL78)
    4944 */
    5045#pragma EI
     
    5348
    5449/*
    55  *  Š„ž‚Ý”­¶‰ñ”‚ð•Û‘¶‚·‚é•Ï”
     50 *  割込み発生回数を保存する変数
    5651 */
    5752uint8_t intnest;
     
    5954
    6055/*
    61  *  (1) ƒRƒ“ƒeƒLƒXƒg‚ÉŠÖ‚·‚é’è‹`
    62  */
    63 
    64 
    65 /*
    66  *  ƒRƒ“ƒeƒLƒXƒg‚ÌŽQÆ
     56 *  (1) コンテキストに関する定義
     57 */
     58
     59
     60/*
     61 *  コンテキストの参照
    6762 */
    6863bool_t
    6964sense_context(void)
    7065{
    71         /*  ƒlƒXƒgƒJƒEƒ“ƒ^0‚æ‚è‘å‚È‚ç”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg  */
     66        /*  ネストカウンタ0より大なら非タスクコンテキスト  */
    7267        return (intnest > 0);
    7368}
     
    7570
    7671/*
    77  *  (2) ƒVƒXƒeƒ€ó‘Ô‚ÉŠÖ‚·‚é’è‹`
    78  */
    79 
    80 /*
    81  *  CPUƒƒbƒNƒtƒ‰ƒOŽÀŒ»‚Ì‚½‚߂̕ϐ”
    82  */
    83 bool_t          lock_flag;              /* CPUƒƒbƒNƒtƒ‰ƒO‚Ì’l‚ð•ÛŽ‚·‚é•Ï” */
     72 *  (2) システム状態に関する定義
     73 */
     74
     75/*
     76 *  CPUロックフラグ実現のための変数
     77 */
     78bool_t          lock_flag;              /* CPUロックフラグの値を保持する変数 */
    8479#if TMIN_INTPRI != -4
    85 uint8_t         saved_psw;              /* Š„ž‚Ý—Dæ“xƒŒƒxƒ‹‚ð•Û‘¶‚·‚é•Ï” */
     80uint8_t         saved_psw;              /* 割込み優先度レベルを保存する変数 */
    8681#endif
    8782
    8883/*
    89  *  CPU ƒƒbƒNó‘Ԃւ̈ڍs
    90  *      ‚±‚̊֐”‚́CCPU ƒƒbƒNó‘Ô‚Ì‚Æ‚«‚ɌĂт¾‚³‚ê‚È‚¢‚±‚Æ‚ð‘O’ñ‚Æ‚·‚éD
     84 *  CPU ロック状態への移行
     85 *      この関数は,CPU ロック状態のときに呼びだされないことを前提とする.
    9186 */
    9287void
     
    9691        DI();
    9792#else
    98         /* ƒ^ƒXƒN‚Å‚ÍŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‚Ì’l‚Í 0 ‚Ì‚Í‚¸‚È‚Ì‚Å•Û‘¶‚·‚é•K—v‚ª‚È‚¢ */
     93        /* タスクでは割込み優先度マスクの値は 0 のはずなので保存する必要がない */
    9994        set_psw(PSW_SET_ISP(get_psw(), ISP_LOCK));
    10095#endif
     
    111106
    112107        /*
    113          *  get_psw() ‚Ì•Ô‚è’l‚ð’¼Ú saved_isp ‚É•Û‘¶‚¹‚¸CˆêŽž•Ï”
    114          *  psw ‚Ö•Û‘¶‚·‚é‚̂́Cget_psw() ‚̌Ăт¾‚µ’¼Œã‚ÉŠ„ž‚Ý‚ª”­¶‚µC
    115          *  ‹N“®‚³‚ꂽŠ„ž‚ݏˆ—‚Å saved_isp ‚ª•ÏX‚³‚ê‚é‰Â”\«‚ª‚ ‚邽‚߁D
     108         *  get_psw() の返り値を直接 saved_isp に保存せず,一時変数
     109         *  psw へ保存するのは,get_psw() の呼びだし直後に割込みが発生し,
     110         *  起動された割込み処理で saved_isp が変更される可能性があるため.
    116111         */
    117112        psw = get_psw();
     
    125120
    126121/*
    127  *  CPUƒƒbƒNó‘Ԃ̉ðœ
    128  *      ‚±‚̊֐”‚́CCPU ƒƒbƒNó‘Ô‚Ì‚Æ‚«‚ɂ̂݌Ăт¾‚³‚ê‚邱‚Æ‚ð‘O’ñ‚Æ‚·‚éD
     122 *  CPUロック状態の解除
     123 *      この関数は,CPU ロック状態のときにのみ呼びだされることを前提とする.
    129124 */
    130125void
     
    135130        EI();
    136131#else
    137         /* ƒ^ƒXƒNŽÀsŽž‚ÍŠ„ž‚݃}ƒXƒN‘S‰ðœó‘Ô‚Ì‚Í‚¸‚Ȃ̂ŁC‘S‰ðœ‚É‚µ‚Ä‚¨‚­ */
     132        /* タスク実行時は割込みマスク全解除状態のはずなので,全解除にしておく */
    138133        set_psw(PSW_SET_ISP(get_psw(), ISP_ENAALL));
    139134#endif
     
    152147
    153148/*
    154  *  CPUƒƒbƒNó‘Ô‚ÌŽQÆ
     149 *  CPUロック状態の参照
    155150 */
    156151bool_t
     
    161156
    162157/*
    163  *  Š„ž‚Ý—Dæ“xƒ}ƒXƒN(IPM) ‚̐ݒè
    164  *    Žw’肵‚½Š„ž‚Ý—Dæ“x(-1, -2, ..., TMIN_INTPRI) ‚ðŒ³‚É
    165  *    ƒvƒƒZƒbƒT‚ÌŠ„ž‚Ý—Dæ“xƒŒƒxƒ‹ (IPL) ‚ðÝ’è‚·‚éD
     158 *  割込み優先度マスク(IPM) の設定
     159 *    指定した割込み優先度(-1, -2, ..., TMIN_INTPRI) を元に
     160 *    プロセッサの割込み優先度レベル (IPL) を設定する.
    166161 */
    167162void
     
    180175
    181176/*
    182  *  (7) dispacher ‚Å‚ÌŠ„ž‚Ý‘Ò‚¿
     177 *  (7) dispacher での割込み待ち
    183178 */
    184179void
     
    191186
    192187/*
    193  *  ƒvƒƒZƒbƒTˆË‘¶‚̏‰Šú‰»
     188 *  プロセッサ依存の初期化
    194189 */
    195190void
     
    199194
    200195/*
    201  *  ƒvƒƒZƒbƒTˆË‘¶‚̏I—¹ˆ—
     196 *  プロセッサ依存の終了処理
    202197 */
    203198void
    204199prc_terminate(void)
    205200{
    206         /* “Á‚É•K—v‚ȏˆ—‚Í‚È‚¢ */
    207 }
    208 
    209 /*
    210  *  Š„ž‚Ý—v‹‹ÖŽ~ƒtƒ‰ƒO‚̃Zƒbƒg
     201        /* 特に必要な処理はない */
     202}
     203
     204/*
     205 *  割込み要求禁止フラグのセット
    211206 */
    212207bool_t
     
    215210        volatile uint8_t *reg_addr;
    216211       
    217         /* ƒŒƒxƒ‹’è‹`‚ª0‚Å‚ ‚éê‡‚ÍCFG_INT‚³‚ê‚Ä‚¢‚È‚¢ */
     212        /* レベル定義が0である場合はCFG_INTされていない */
    218213        if(intpri_table[intno] == 0U)
    219214        {
    220215                return (false);
    221216        }
    222         // Š„ž‚݃}ƒXƒNEƒtƒ‰ƒOEƒŒƒWƒXƒ^‚ÌŠY“–ƒrƒbƒg‚ð1‚ɃZƒbƒg
     217        // 割込みマスク・フラグ・レジスタの該当ビットを1にセット
    223218        if(intno < 32) {
    224219                reg_addr = (volatile uint8_t *)TADR_MK0L;
     
    235230
    236231/*
    237  *  Š„ž‚Ý—v‹‹ÖŽ~ƒtƒ‰ƒO‚̃NƒŠƒA
     232 *  割込み要求禁止フラグのクリア
    238233 */
    239234bool_t
     
    242237        volatile uint8_t *reg_addr;
    243238
    244         /* ƒŒƒxƒ‹’è‹`‚ª0‚Å‚ ‚éê‡‚ÍCFG_INT‚³‚ê‚Ä‚¢‚È‚¢ */
     239        /* レベル定義が0である場合はCFG_INTされていない */
    245240        if(intpri_table[intno] == 0u)
    246241        {
    247242                return (false);
    248243        }
    249         // Š„ž‚݃}ƒXƒNEƒtƒ‰ƒOEƒŒƒWƒXƒ^‚ÌŠY“–ƒrƒbƒg‚ð0‚ɃZƒbƒg
     244        // 割込みマスク・フラグ・レジスタの該当ビットを0にセット
    250245        if(intno < 32) {
    251246                reg_addr = (volatile uint8_t *)TADR_MK0L;
     
    262257
    263258/*
    264  *  Š„ž‚Ý—v‹‚̃NƒŠƒA
     259 *  割込み要求のクリア
    265260 */
    266261void
     
    269264        volatile uint8_t *reg_addr;
    270265
    271         // Š„ž‚Ý—v‹ƒtƒ‰ƒOEƒŒƒWƒXƒ^‚ÌŠY“–ƒrƒbƒg‚ð0‚ɃZƒbƒg
     266        // 割込み要求フラグ・レジスタの該当ビットを0にセット
    272267        if(intno < 32) {
    273268                reg_addr = (volatile uint8_t *)TADR_IF0L;
     
    282277
    283278/*
    284  *  Š„ž‚Ý—v‹‚̃`ƒFƒbƒN
     279 *  割込み要求のチェック
    285280 */
    286281bool_t
     
    289284        volatile uint8_t *reg_addr;
    290285
    291         // Š„ž‚Ý—v‹ƒtƒ‰ƒOEƒŒƒWƒXƒ^‚ÌŠY“–ƒrƒbƒg‚ª 1 ‚È‚ç true
     286        // 割込み要求フラグ・レジスタの該当ビットが 1 なら true
    292287        if(intno < 32) {
    293288                reg_addr = (volatile uint8_t *)TADR_IF0L;
     
    303298
    304299/*
    305  *  Š„ž‚Ý—v‹ƒ‰ƒCƒ“‚Ì‘®«‚̐ݒè
     300 *  割込み要求ラインの属性の設定
    306301 */
    307302void
     
    315310
    316311        /*
    317          *  Š„ž‚݂̃}ƒXƒN
     312         *  割込みのマスク
    318313         *
    319          *  Š„ž‚Ý‚ðŽó‚¯•t‚¯‚½‚܂܁CƒŒƒxƒ‹ƒgƒŠƒK^ƒGƒbƒWƒgƒŠƒK‚̐ݒè‚âCŠ„
    320          *  ž‚Ý—Dæ“x‚̐ݒè‚ðs‚¤‚̂͊댯‚È‚½‚߁CŠ„ž‚Ý‘®«‚É‚©‚©‚í‚炸C
    321          *  ˆê’Uƒ}ƒXƒN‚·‚éD
     314         *  割込みを受け付けたまま,レベルトリガ/エッジトリガの設定や,割
     315         *  込み優先度の設定を行うのは危険なため,割込み属性にかかわらず,
     316         *  一旦マスクする.
    322317         */
    323318        (void) x_disable_int(intno);
    324319
    325320        /*
    326          * —Dæ“x‚̐ݒè
     321         * 優先度の設定
    327322         */
    328         // —Dæ‡ˆÊŽw’èƒtƒ‰ƒOEƒŒƒWƒXƒ^‚ÌŠY“–ƒrƒbƒg‚É’l‚ðƒZƒbƒg
     323        // 優先順位指定フラグ・レジスタの該当ビットに値をセット
    329324        if(intno < 32) {
    330325                reg_addr = (volatile uint8_t *)TADR_PR00L;
     
    335330                reg_addr += ((intno-32) / 8);
    336331        }
    337         // —Dæ‡ˆÊƒŒƒxƒ‹‚̐ݒè(’áˆÊƒrƒbƒg)
     332        // 優先順位レベルの設定(低位ビット)
    338333        if((IPM2ILVL(intpri) & 0x01) != 0) {
    339334                *reg_addr |= (uint8_t)(1 << (intno % 8));
     
    342337                *reg_addr &= (uint8_t)~(1 << (intno % 8));
    343338        }
    344         // —Dæ‡ˆÊƒŒƒxƒ‹‚̐ݒè(‚ˆÊƒrƒbƒg)
     339        // 優先順位レベルの設定(高位ビット)
    345340        if((IPM2ILVL(intpri) & 0x02) != 0) {
    346341                *(reg_addr+4) |= (uint8_t)(1 << (intno % 8));
     
    351346       
    352347        /*
    353          * ƒgƒŠƒK‚̐ݒè
     348         * トリガの設定
    354349         */
    355350        if(intno <= 7) {
     
    362357        }
    363358       
    364         /* INT’[Žq‚̏ꍇ‚ÍŠ„ž‚ÝŒŸ’m•û–@‚ðÝ’è‚·‚é */
     359        /* INT端子の場合は割込み検知方法を設定する */
    365360        if((intatr & TA_POSEDGE) != 0U)
    366361        {
    367                 // ŠO•”Š„ž‚Ý—§‚¿ã‚ª‚èƒGƒbƒW‹–‰ÂƒŒƒWƒXƒ^‚ÌŠY“–ƒrƒbƒg‚ð1‚ɃZƒbƒg
     362                // 外部割込み立ち上がりエッジ許可レジスタの該当ビットを1にセット
    368363                *reg_addr |= (uint8_t)(1 << (portno % 8));
    369                 // ŠO•”Š„ž‚Ý—§‚¿‰º‚ª‚èƒGƒbƒW‹–‰ÂƒŒƒWƒXƒ^‚ÌŠY“–ƒrƒbƒg‚ð0‚ɃZƒbƒg
     364                // 外部割込み立ち下がりエッジ許可レジスタの該当ビットを0にセット
    370365                *(reg_addr+1) &= (uint8_t)~(1 << (portno % 8));
    371366        }
    372367        else if((intatr & TA_NEGEDGE) != 0U)
    373368        {
    374                 // ŠO•”Š„ž‚Ý—§‚¿ã‚ª‚èƒGƒbƒW‹–‰ÂƒŒƒWƒXƒ^‚ÌŠY“–ƒrƒbƒg‚ð0‚ɃZƒbƒg
     369                // 外部割込み立ち上がりエッジ許可レジスタの該当ビットを0にセット
    375370                *reg_addr &= (uint8_t)~(1 << (portno % 8));
    376                 // ŠO•”Š„ž‚Ý—§‚¿‰º‚ª‚èƒGƒbƒW‹–‰ÂƒŒƒWƒXƒ^‚ÌŠY“–ƒrƒbƒg‚ð1‚ɃZƒbƒg
     371                // 外部割込み立ち下がりエッジ許可レジスタの該当ビットを1にセット
    377372                *(reg_addr+1) |= (uint8_t)(1 << (portno % 8));
    378373        }
    379374        else if((intatr & TA_BOTHEDGE) != 0U)
    380375        {
    381                 // ŠO•”Š„ž‚Ý—§‚¿ã‚ª‚èƒGƒbƒW‹–‰ÂƒŒƒWƒXƒ^‚ÌŠY“–ƒrƒbƒg‚ð1‚ɃZƒbƒg
     376                // 外部割込み立ち上がりエッジ許可レジスタの該当ビットを1にセット
    382377                *reg_addr |= (uint8_t)(1 << (portno % 8));
    383                 // ŠO•”Š„ž‚Ý—§‚¿‰º‚ª‚èƒGƒbƒW‹–‰ÂƒŒƒWƒXƒ^‚ÌŠY“–ƒrƒbƒg‚ð1‚ɃZƒbƒg
     378                // 外部割込み立ち下がりエッジ許可レジスタの該当ビットを1にセット
    384379                *(reg_addr+1) |= (uint8_t)(1 << (portno % 8));
    385380        }
    386         else {  // ‚Ç‚¿‚ç‚Å‚à‚È‚¢ê‡‚̓GƒbƒWŒŸo‚ð‹ÖŽ~
    387                 // ŠO•”Š„ž‚Ý—§‚¿ã‚ª‚èƒGƒbƒW‹–‰ÂƒŒƒWƒXƒ^‚ÌŠY“–ƒrƒbƒg‚ð0‚ɃZƒbƒg
     381        else {  // どちらでもない場合はエッジ検出を禁止
     382                // 外部割込み立ち上がりエッジ許可レジスタの該当ビットを0にセット
    388383                *reg_addr &= (uint8_t)~(1 << (portno % 8));
    389                 // ŠO•”Š„ž‚Ý—§‚¿‰º‚ª‚èƒGƒbƒW‹–‰ÂƒŒƒWƒXƒ^‚ÌŠY“–ƒrƒbƒg‚ð0‚ɃZƒbƒg
     384                // 外部割込み立ち下がりエッジ許可レジスタの該当ビットを0にセット
    390385                *(reg_addr+1) &= (uint8_t)~(1 << (portno % 8));
    391386        }
    392387
    393388        /*
    394          *  Š„ž‚݂̃}ƒXƒN‰ðœ(—Dæ“xÝ’è)
     389         *  割込みのマスク解除(優先度設定)
    395390         */
    396391        if ((intatr & TA_ENAINT) != 0U) {
     
    400395
    401396/*
    402  *  NMI‚ðœ‚­‚·‚ׂĂ̊„ž‚Ý‚Ì‹ÖŽ~
     397 *  NMIを除くすべての割込みの禁止
    403398 */
    404399uint8_t
     
    413408
    414409/*
    415  *  Š„ž‚Ý—Dæ“xƒ}ƒXƒNi“à•”•\Œ»j‚ÌŒ»Ý’l‚̐ݒè
     410 *  割込み優先度マスク(内部表現)の現在値の設定
    416411 */
    417412void
  • ssp_qb_r5f100le_cs/trunk/arch/rl78_ca78k0r/prc_config.h

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    1111 *             Nagoya Municipal Industrial Research Institute, JAPAN
    1212 *
    13  *  ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì (1)`(4) ‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
    14  *  ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü•ÏE
    15  *  Ä”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
    16  *  (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ìŒ 
    17  *      •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[ƒX
    18  *      ƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    19  *  (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg—p
    20  *      ‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ
    21 ƒƒ“ƒgi—˜—pŽÒƒ}
    22  *      ƒjƒ
    23 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•Û
    24  *      Ø‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    25  *  (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg—p
    26  *      ‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±‚ƁD
    27  *    (a) Ä”z•z‚É”º‚¤ƒhƒLƒ
    28 ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ
    29 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ì
    30  *        Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    31  *    (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É•ñ
    32  *        ‚·‚邱‚ƁD
    33  *  (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹ŠQ
    34  *      ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD‚Ü‚½C
    35  *      –{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝—R‚ÉŠî‚Ã
    36  *      ‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
     13 *  上記著作権者は,以下の (1)〜(4) の条件を満たす場合に限り,本ソフトウェ
     14 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改変・
     15 *  再配布(以下,利用と呼ぶ)することを無償で許諾する.
     16 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作権
     17 *      表示,この利用条件および下記の無保証規定が,そのままの形でソース
     18 *      コード中に含まれていること.
     19 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使用
     20 *      できる形で再配布する場合には,再配布に伴うドキュメント(利用者マ
     21 *      ニュアルなど)に,上記の著作権表示,この利用条件および下記の無保
     22 *      証規定を掲載すること.
     23 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使用
     24 *      できない形で再配布する場合には,次のいずれかの条件を満たすこと.
     25 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著作
     26 *        権表示,この利用条件および下記の無保証規定を掲載すること.
     27 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに報
     28 *        告すること.
     29 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損害
     30 *      からも,上記著作権者およびTOPPERSプロジェクトを免責すること.また,
     31 *      本ソフトウェアのユーザまたはエンドユーザからのいかなる理由に基づ
     32 *      く請求からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
    3733 *
    38  *  –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨‚æ
    39  *  ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I‚ɑ΂·
    40  *  ‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p
    41  *  ‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»‚̐ӔC‚ð•‰
    42  *  ‚í‚È‚¢D
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者およ
     35 *  びTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的に対す
     36 *  る適合性も含めて,いかなる保証も行わない.また,本ソフトウェアの利用
     37 *  により直接的または間接的に生じたいかなる損害に関しても,その責任を負
     38 *  わない.
    4339 *
    4440 */
    4541
    4642/*
    47  *              ƒvƒƒZƒbƒTˆË‘¶ƒ‚ƒWƒ
    48 [ƒ‹iRL78j
    49  *
    50  *  ‚±‚̃Cƒ“ƒNƒ‹[ƒhƒtƒ@ƒCƒ‹‚́C"<ƒvƒƒZƒbƒTŒ^”Ô>_config.h" ‚Ì‚Ý‚©‚ç
    51  *  ƒCƒ“ƒNƒ‹[ƒh‚³‚ê‚éD‘¼‚̃tƒ@ƒCƒ‹‚©‚ç’¼ÚƒCƒ“ƒNƒ‹[ƒh‚µ‚Ä‚Í‚È‚ç‚È‚¢D
     43 *              プロセッサ依存モジュール(RL78)
     44 *
     45 *  このインクルードファイルは,"<プロセッサ型番>_config.h" のみから
     46 *  インクルードされる.他のファイルから直接インクルードしてはならない.
    5247 */
    5348
     
    5651
    5752/*
    58  *  (1) ƒRƒ“ƒeƒLƒXƒg‚ÉŠÖ‚·‚é’è‹`
    59  */
    60 
    61 /* ‹¤—LƒXƒ^ƒbƒN—̈æ‚Ì‚½‚߂̃Xƒ^ƒbƒNƒ|ƒCƒ“ƒ^‰Šú’l‚𐶐¬‚·‚éƒ}ƒNƒ */
     53 *  (1) コンテキストに関する定義
     54 */
     55
     56/* 共有スタック領域のためのスタックポインタ初期値を生成するマクロ */
    6257#define TOPPERS_ISTKPT(istk, istksz) ((STK_T *)((char *)(istk) + (istksz)))
    6358
    6459/*
    65  *  (2) ƒVƒXƒeƒ€ó‘Ô‚ÉŠÖ‚·‚é’è‹`
    66  */
    67 
    68 /*
    69  *  CPUƒƒbƒNó‘Ô‚Å‚ÌŠ„ž‚Ý—Dæ“xƒ}ƒXƒN(IPM)‚Ì’l
    70  *    TIPM_LOCK‚́CCPUƒƒbƒNó‘Ô‚ð•\Œ»‚·‚銄ž‚Ý—Dæ“xƒ}ƒXƒN(IPM)‚Ì’l‚ðŽ¦‚·D
    71  *    ƒJ[ƒlƒ‹ŠÇ—‚ÌŠ„ž‚݂ɑ΂·‚銄ž‚Ý—Dæ“x‚̍ŏ¬’l(TMIN_INTPRI)‚É“™‚µ‚¢D
     60 *  (2) システム状態に関する定義
     61 */
     62
     63/*
     64 *  CPUロック状態での割込み優先度マスク(IPM)の値
     65 *    TIPM_LOCKは,CPUロック状態を表現する割込み優先度マスク(IPM)の値を示す.
     66 *    カーネル管理の割込みに対する割込み優先度の最小値(TMIN_INTPRI)に等しい.
    7267 */
    7368#ifndef TIPM_LOCK
     
    7671
    7772/*
    78  *  Š„ž‚Ý—Dæ“xƒ}ƒXƒN(IPM) ‚ƃvƒƒZƒbƒT‚ÌŠ„ž‚Ý—Dæ“xƒ}ƒXƒN(ISP) ‚Ì•ÏŠ·
    79  *
    80  *  RL78 ‚ł́CPSWƒŒƒWƒXƒ^‚̉ºˆÊ‚©‚琔‚¦‚ărƒbƒg1‚¨‚æ‚Ñ 2 ‚Ì 2 ƒrƒbƒg‚É
    81  *  ƒCƒ“ƒT[ƒrƒXEƒvƒ‰ƒCƒIƒŠƒeƒBEƒtƒ‰ƒO(ISP) ‚Ì’l‚ªŠi”[‚³‚ê‚éD
    82  *
    83  *  ƒJ[ƒlƒ‹‚ÌŠÇ—‚·‚éIPM (-1‚©‚ç˜A‘±‚µ‚½•‰‚Ì’l) ‚ðŽg‚Á‚Ä
    84  *  ƒvƒƒZƒbƒT‚Ì ISP ‚𐧌䂷‚邽‚ß‚É•ÏŠ·‚ª•K—v‚Æ‚È‚éD
    85  *
    86  *  Žw’肵‚½ƒŒƒxƒ‹ˆÈ‰º‚ÌŠ„ž‚Ý‚ðƒ}ƒXƒN‚·‚éê‡‚́CISP‚̐ݒè’l‚ð
    87  *  –Ú“I‚̃Œƒxƒ‹‚æ‚èˆê‚‚‚¢—Dæ“x(’l‚Æ‚µ‚Ă͏¬‚³‚¢)’l‚É‚·‚é•K—v‚ª‚ ‚éD
     73 *  割込み優先度マスク(IPM) とプロセッサの割込み優先度マスク(ISP) の変換
     74 *
     75 *  RL78 では,PSWレジスタの下位から数えてビット1および 2 の 2 ビットに
     76 *  インサービス・プライオリティ・フラグ(ISP) の値が格納される.
     77 *
     78 *  カーネルの管理するIPM (-1から連続した負の値) を使って
     79 *  プロセッサの ISP を制御するために変換が必要となる.
     80 *
     81 *  指定したレベル以下の割込みをマスクする場合は,ISPの設定値を
     82 *  目的のレベルより一つ高い優先度(値としては小さい)値にする必要がある.
    8883 */
    8984#define IPM2ISP(ipm)    (((uint8_t)(4-1+(ipm))) << 1U)  /* IPM-->ISP(ipm=-3,-2,-1,0) */
     
    9287
    9388/*
    94  *  Š„ž‚Ý—Dæ“xƒ}ƒXƒN‚Ì“Á•Ê‚È’l‚ɑ΂·‚é“à•”•\Œ»
    95  */
    96 #define ISP_LOCK        (IPM2ISP(TIPM_LOCK))    /* CPUƒƒbƒNó‘Ô‚Å‚Ì ISP */
    97 #define ISP_ENAALL      (IPM2ISP(TIPM_ENAALL))  /* TIPM_ENAALL ‚Å‚Ì ISP */
    98 
    99 
    100 
    101 /*
    102  *  (3) Š„ž‚ݏˆ—ƒ‚ƒfƒ‹(Š„ž‚Ý—v‹ƒ‰ƒCƒ“)
    103  */
    104 
    105 /*
    106  * intno‚ªCdis_int^ena_int‚ɑ΂·‚銄ž‚ݔԍ†‚Æ‚µ‚Ä
    107  * —LŒø‚È’l‚Å‚ ‚éê‡‚ÉtrueC‚»‚¤‚Å‚È‚¢ê‡‚Éfalse‚ð•Ô‚·ƒ}ƒNƒ
     89 *  割込み優先度マスクの特別な値に対する内部表現
     90 */
     91#define ISP_LOCK        (IPM2ISP(TIPM_LOCK))    /* CPUロック状態での ISP */
     92#define ISP_ENAALL      (IPM2ISP(TIPM_ENAALL))  /* TIPM_ENAALL での ISP */
     93
     94
     95
     96/*
     97 *  (3) 割込み処理モデル(割込み要求ライン)
     98 */
     99
     100/*
     101 * intnoが,dis_int/ena_intに対する割込み番号として
     102 * 有効な値である場合にtrue,そうでない場合にfalseを返すマクロ
    108103 */
    109104#define VALID_INTNO_DISINT(intno)       VALID_INTNO(intno)
     
    111106
    112107/*
    113  *  IPM ‚©‚犄ž‚ݐ§ŒäƒŒƒWƒXƒ^‚Å‚Ì•\Œ»‚É•ÏŠ·‚·‚éƒ}ƒNƒ
     108 *  IPM から割込み制御レジスタでの表現に変換するマクロ
    114109 */
    115110#define IPM2ILVL(ipm)   ((ipm)+4)       // ipm=-1,-2,-3,-4
     
    117112
    118113/*
    119  *  (4) Š„ž‚ݏˆ—ƒ‚ƒfƒ‹(Š„ž‚݃nƒ“ƒhƒ‰)
    120  */
    121 
    122 /*
    123  *  Š„ž‚݃nƒ“ƒhƒ‰‚Ì“üŒûˆ—‚̐¶¬ƒ}ƒNƒ
     114 *  (4) 割込み処理モデル(割込みハンドラ)
     115 */
     116
     117/*
     118 *  割込みハンドラの入口処理の生成マクロ
    124119 */
    125120#define _INT_ENTRY(inhno, inthdr)                               _kernel_##inthdr##_##inhno##_entry
     
    131126
    132127/*
    133  *  (5) CPU—áŠOˆ—ƒ‚ƒfƒ‹
    134  */
    135 
    136 /*
    137  *  CPU—áŠOƒnƒ“ƒhƒ‰‚Ì“üŒûˆ—‚̐¶¬ƒ}ƒNƒ
     128 *  (5) CPU例外処理モデル
     129 */
     130
     131/*
     132 *  CPU例外ハンドラの入口処理の生成マクロ
    138133 */
    139134#define _EXC_ENTRY(excno , exchdr)      _kernel_##exchdr##_##excno##_entry
     
    145140
    146141/*
    147  *  (6) ‰Šú‰»EI—¹ˆ—
    148  */
    149 
    150 // ’è‹`‚È‚µ
     142 *  (6) 初期化・終了処理
     143 */
     144
     145// 定義なし
    151146
    152147#ifndef TOPPERS_MACRO_ONLY
    153148
    154149/*
    155  *  (1) ƒRƒ“ƒeƒLƒXƒg‚ÉŠÖ‚·‚é’è‹`
    156  */
    157 
    158 /*
    159  *  ƒRƒ“ƒeƒLƒXƒg‚ÌŽQÆ
     150 *  (1) コンテキストに関する定義
     151 */
     152
     153/*
     154 *  コンテキストの参照
    160155 */
    161156extern bool_t sense_context(void);
    162157
    163158/*
    164  *  (2) ƒVƒXƒeƒ€ó‘Ô‚ÉŠÖ‚·‚é’è‹`
    165  */
    166 
    167 /*
    168  *  CPUƒƒbƒNƒtƒ‰ƒOŽÀŒ»‚Ì‚½‚߂̕ϐ” (prc_config.c)
    169  */
    170 extern bool_t   lock_flag;      /* CPUƒƒbƒNƒtƒ‰ƒO‚Ì’l */
    171 extern uint8_t  saved_psw;      /* CPUƒƒbƒNó‘Ԉڍs‘O‚ÌŠ„ž‚Ý—Dæ“xƒŒƒxƒ‹ */
    172 
    173 /*
    174  *  CPU ƒƒbƒNó‘Ԃւ̈ڍs
    175  *      ‚±‚̊֐”‚́CCPU ƒƒbƒNó‘Ô‚Ì‚Æ‚«‚ɌĂт¾‚³‚ê‚È‚¢‚±‚Æ‚ð‘O’ñ‚Æ‚·‚éD
     159 *  (2) システム状態に関する定義
     160 */
     161
     162/*
     163 *  CPUロックフラグ実現のための変数 (prc_config.c)
     164 */
     165extern bool_t   lock_flag;      /* CPUロックフラグの値 */
     166extern uint8_t  saved_psw;      /* CPUロック状態移行前の割込み優先度レベル */
     167
     168/*
     169 *  CPU ロック状態への移行
     170 *      この関数は,CPU ロック状態のときに呼びだされないことを前提とする.
    176171 */
    177172extern void t_lock_cpu(void);
     
    179174
    180175/*
    181  *  CPUƒƒbƒNó‘Ԃ̉ðœ
    182  *      ‚±‚̊֐”‚́CCPU ƒƒbƒNó‘Ô‚Ì‚Æ‚«‚ɂ̂݌Ăт¾‚³‚ê‚邱‚Æ‚ð‘O’ñ‚Æ‚·‚éD
     176 *  CPUロック状態の解除
     177 *      この関数は,CPU ロック状態のときにのみ呼びだされることを前提とする.
    183178 */
    184179extern void t_unlock_cpu(void);
     
    187182
    188183/*
    189  *  CPUƒƒbƒNó‘Ô‚ÌŽQÆ
     184 *  CPUロック状態の参照
    190185 */
    191186extern bool_t x_sense_lock(void);
     
    195190
    196191/*
    197  *  Š„ž‚Ý—Dæ“xƒ}ƒXƒN(IPM) ‚̐ݒè
    198  *    Žw’肵‚½Š„ž‚Ý—Dæ“x(-1, -2, ..., TMIN_INTPRI) ‚ðŒ³‚É
    199  *    ƒvƒƒZƒbƒT‚ÌŠ„ž‚Ý—Dæ“xƒŒƒxƒ‹ (IPL) ‚ðÝ’è‚·‚éD
     192 *  割込み優先度マスク(IPM) の設定
     193 *    指定した割込み優先度(-1, -2, ..., TMIN_INTPRI) を元に
     194 *    プロセッサの割込み優先度レベル (IPL) を設定する.
    200195 */
    201196extern void x_set_ipm(PRI intpri);
     
    210205
    211206/*
    212  *  (3) Š„ž‚ݏˆ—ƒ‚ƒfƒ‹(Š„ž‚Ý—v‹ƒ‰ƒCƒ“)
    213  */
    214 
    215 /*
    216  *  Š„ž‚Ý—vˆö–ˆ‚̃Œƒxƒ‹’è‹`ƒe[ƒuƒ‹ (kernel_cfg.c ‚É‚æ‚éo—Í)
    217  *    Š„ž‚ݔԍ†(INTNO) ‚©‚犄ž‚Ý—Dæ“x‚ðŽæ“¾‚·‚邽‚ß‚ÉŽg—pD
     207 *  (3) 割込み処理モデル(割込み要求ライン)
     208 */
     209
     210/*
     211 *  割込み要因毎のレベル定義テーブル (kernel_cfg.c による出力)
     212 *    割込み番号(INTNO) から割込み優先度を取得するために使用.
    218213 */
    219214extern const PRI intpri_table[];
    220215
    221216/*
    222  *  Š„ž‚Ý—v‹‹ÖŽ~ƒtƒ‰ƒO‚̃Zƒbƒg(prc_config.c)
    223  *    Žw’肵‚½Š„ž‚ݔԍ†‚ɑΉž‚·‚銄ž‚Ý—v‹ƒ‰ƒCƒ“‚ÌŠ„ž‚Ý—v‹ƒtƒ‰ƒO‚ðƒZƒbƒg‚·‚éD
    224  *    Š„ž‚Ý‘®«‚ªÝ’肳‚ê‚Ä‚¢‚È‚¢Š„ž‚Ý—v‹ƒ‰ƒCƒ“‚ÌŠ„ž‚ݔԍ†‚ðŽw’肵‚½
    225  *    ê‡‚́C’P‚É FALSE ‚ð•Ô‚·D
     217 *  割込み要求禁止フラグのセット(prc_config.c)
     218 *    指定した割込み番号に対応する割込み要求ラインの割込み要求フラグをセットする.
     219 *    割込み属性が設定されていない割込み要求ラインの割込み番号を指定した
     220 *    場合は,単に FALSE を返す.
    226221 */
    227222extern bool_t x_disable_int(INTNO intno);
     
    231226
    232227/*
    233  *  Š„ž‚Ý—v‹‹ÖŽ~ƒtƒ‰ƒO‚̃NƒŠƒA(prc_config.c)
    234  *    Žw’肵‚½Š„ž‚ݔԍ†‚ɑΉž‚·‚銄ž‚Ý—v‹ƒ‰ƒCƒ“‚ÌŠ„ž‚Ý—v‹ƒtƒ‰ƒO‚ðƒNƒŠƒA‚·‚éD
    235  *    Š„ž‚Ý‘®«‚ªÝ’肳‚ê‚Ä‚¢‚È‚¢Š„ž‚Ý—v‹ƒ‰ƒCƒ“‚ÌŠ„ž‚ݔԍ†‚ðŽw’肵‚½
    236  *    ê‡‚́C’P‚É FALSE ‚ð•Ô‚·D
     228 *  割込み要求禁止フラグのクリア(prc_config.c)
     229 *    指定した割込み番号に対応する割込み要求ラインの割込み要求フラグをクリアする.
     230 *    割込み属性が設定されていない割込み要求ラインの割込み番号を指定した
     231 *    場合は,単に FALSE を返す.
    237232 */
    238233extern bool_t x_enable_int(INTNO intno);
     
    243238
    244239/*
    245  *  Š„ž‚Ý—v‹‚̃NƒŠƒA(prc_config.c)
     240 *  割込み要求のクリア(prc_config.c)
    246241 */
    247242extern void x_clear_int(INTNO intno);
     
    252247
    253248/*
    254  *  Š„ž‚Ý—v‹‚̃`ƒFƒbƒN(prc_config.c)
     249 *  割込み要求のチェック(prc_config.c)
    255250 */
    256251extern bool_t x_probe_int(INTNO intno);
     
    260255
    261256/*
    262  *  Š„ž‚Ý—v‹ƒ‰ƒCƒ“‚Ì‘®«‚̐ݒè (prc_config.c)
     257 *  割込み要求ラインの属性の設定 (prc_config.c)
    263258 */
    264259extern void     x_config_int(INTNO intno, ATR intatr, PRI intpri);
    265260
    266261/*
    267  *  (4) Š„ž‚ݏˆ—ƒ‚ƒfƒ‹(Š„ž‚݃nƒ“ƒhƒ‰)
    268  */
    269 
    270 /*
    271  *  Š„ž‚݃nƒ“ƒhƒ‰‚̐ݒè
    272  *
    273  *  RL78‚ÍROM‚ÉŠ„ž‚݃xƒNƒ^‚ð”z’u‚·‚邽‚߁C–{ŠÖ”‚Í‹ó‚É’è‹`‚·‚éD
     262 *  (4) 割込み処理モデル(割込みハンドラ)
     263 */
     264
     265/*
     266 *  割込みハンドラの設定
     267 *
     268 *  RL78はROMに割込みベクタを配置するため,本関数は空に定義する.
    274269 */
    275270#define x_define_inh(inhno, inthdr)
    276271
    277272/*
    278  *  Š„ž‚݃nƒ“ƒhƒ‰‚Ì“üŒû‚Å•K—v‚ȏˆ—
    279  */
    280 #define i_begin_int(intno)              /* “Á‚ɍs‚¤‚ׂ«ˆ—‚Í‚È‚¢ */
    281 
    282 /*
    283  *  Š„ž‚݃nƒ“ƒhƒ‰‚̏oŒû‚Å•K—v‚ȏˆ—
    284  */
    285 #define i_end_int(intno)                /* “Á‚ɍs‚¤‚ׂ«ˆ—‚Í‚È‚¢ */
    286 
    287 /*
    288  *  (5) CPU—áŠOˆ—ƒ‚ƒfƒ‹
    289  */
    290 
    291 /*
    292  *  CPU—áŠOƒnƒ“ƒhƒ‰‚̐ݒè
    293  *    RL78 ‚Í ROM ‚ɃxƒNƒ^‚ð”z’u‚·‚邽‚߁C–{ŠÖ”‚Í‹ó‚É’è‹`‚·‚éD
     273 *  割込みハンドラの入口で必要な処理
     274 */
     275#define i_begin_int(intno)              /* 特に行うべき処理はない */
     276
     277/*
     278 *  割込みハンドラの出口で必要な処理
     279 */
     280#define i_end_int(intno)                /* 特に行うべき処理はない */
     281
     282/*
     283 *  (5) CPU例外処理モデル
     284 */
     285
     286/*
     287 *  CPU例外ハンドラの設定
     288 *    RL78 は ROM にベクタを配置するため,本関数は空に定義する.
    294289 */
    295290#define x_define_exc(excno, exchdr)
    296291
    297292/*
    298  *  (6) ‰Šú‰»EI—¹ˆ—
    299  */
    300 
    301 /*
    302  *  ƒvƒƒZƒbƒTˆË‘¶‚̏‰Šú‰»(prc_config.c)
     293 *  (6) 初期化・終了処理
     294 */
     295
     296/*
     297 *  プロセッサ依存の初期化(prc_config.c)
    303298 */
    304299extern void     prc_initialize(void);
    305300
    306301/*
    307  *  dispatcher ŒÄ‚яo‚µ‘O‚Ƀ^[ƒQƒbƒgˆË‘¶‚Å•K—v‚ȏˆ—‚ðs‚¤‚½‚߂̊֐”
     302 *  dispatcher 呼び出し前にターゲット依存で必要な処理を行うための関数
    308303 *    (prc_support.asm)
    309304 */
     
    311306
    312307/*
    313  *  ƒJ[ƒlƒ‹‚̏I—¹ˆ—‚̌ďo‚µiprc_support.asmj
    314  *
    315  *  call_exit_kernel‚́CƒJ[ƒlƒ‹‚̏I—¹Žž‚ɌĂяo‚³‚êCƒXƒ^ƒbƒNƒ|ƒCƒ“ƒ^‚ð
    316  *  ‰Šú‰»‚µCƒJ[ƒlƒ‹‚̏I—¹ˆ—iexit_kernelj‚ðŒÄ‚яo‚·D
     308 *  カーネルの終了処理の呼出し(prc_support.asm)
     309 *
     310 *  call_exit_kernelは,カーネルの終了時に呼び出され,スタックポインタを
     311 *  初期化し,カーネルの終了処理(exit_kernel)を呼び出す.
    317312 */
    318313extern void call_exit_kernel(void);
    319314
    320315/*
    321  *  ƒvƒƒZƒbƒTˆË‘¶‚̏I—¹Žžˆ—(prc_config.c)
     316 *  プロセッサ依存の終了時処理(prc_config.c)
    322317 */
    323318extern void     prc_terminate(void);
    324319
    325320/*
    326  *  (7) dispacher ‚Å‚ÌŠ„ž‚Ý‘Ò‚¿
     321 *  (7) dispacher での割込み待ち
    327322 */
    328323extern void idle_loop(void);
  • ssp_qb_r5f100le_cs/trunk/arch/rl78_ca78k0r/prc_def.csv

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

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    77 *             Nagoya Municipal Industrial Research Institute, JAPAN
    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‰ü•ÏE
    11  *  Ä”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‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[ƒX
    14  *      ƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    15  *  (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg—p
    16  *      ‚Å‚«‚éŒ`‚ōĔ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—p
    22  *      ‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±‚Ɓ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‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹ŠQ
    30  *      ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD‚Ü‚½C
    31  *      –{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝—R‚ÉŠî‚Ã
    32  *      ‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
     9 *  上記著作権者は,以下の (1)〜(4) の条件を満たす場合に限り,本ソフトウェ
     10 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改変・
     11 *  再配布(以下,利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作権
     13 *      表示,この利用条件および下記の無保証規定が,そのままの形でソース
     14 *      コード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使用
     16 *      できる形で再配布する場合には,再配布に伴うドキュメント(利用者マ
     17 *      ニュアルなど)に,上記の著作権表示,この利用条件および下記の無保
     18 *      証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使用
     20 *      できない形で再配布する場合には,次のいずれかの条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著作
     22 *        権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに報
     24 *        告すること.
     25 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損害
     26 *      からも,上記著作権者およびTOPPERSプロジェクトを免責すること.また,
     27 *      本ソフトウェアのユーザまたはエンドユーザからのいかなる理由に基づ
     28 *      く請求からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
    3329 *
    34  *  –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨‚æ
    35  *  ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I‚ɑ΂·
    36  *  ‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p
    37  *  ‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»‚̐ӔC‚ð•‰
    38  *  ‚í‚È‚¢D
     30 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者およ
     31 *  びTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的に対す
     32 *  る適合性も含めて,いかなる保証も行わない.また,本ソフトウェアの利用
     33 *  により直接的または間接的に生じたいかなる損害に関しても,その責任を負
     34 *  わない.
    3935 *
    4036 */
    4137
    4238/*
    43  *              kernel.h ƒvƒƒZƒbƒTˆË‘¶•”iRL78j
     39 *              kernel.h プロセッサ依存部(RL78)
    4440 *
    45  *  ‚±‚̃Cƒ“ƒNƒ‹[ƒhƒtƒ@ƒCƒ‹‚́Ctarget_kernel.hi‚Ü‚½‚́C‚»‚±‚©‚çƒCƒ“ƒN
    46  *  ƒ‹[ƒh‚³‚ê‚éƒtƒ@ƒCƒ‹j‚Ì‚Ý‚©‚çƒCƒ“ƒNƒ‹[ƒh‚³‚ê‚éD‘¼‚̃tƒ@ƒCƒ‹‚©‚ç
    47  *  ’¼ÚƒCƒ“ƒNƒ‹[ƒh‚µ‚Ä‚Í‚È‚ç‚È‚¢D
     41 *  このインクルードファイルは,target_kernel.h(または,そこからインク
     42 *  ルードされるファイル)のみからインクルードされる.他のファイルから
     43 *  直接インクルードしてはならない.
    4844 */
    4945
     
    5248
    5349/*
    54  *  ƒJ[ƒlƒ‹–{‘Ì‚ðƒRƒ“ƒpƒCƒ‹‚·‚邽‚߂̃}ƒNƒ’è‹`
     50 *  カーネル本体をコンパイルするためのマクロ定義
    5551 *
    56  *  –{ŠÂ‹«‚Å‚Í1ŠÖ”‚ð1ƒIƒuƒWƒFƒNƒgƒtƒ@ƒCƒ‹‚ɃRƒ“ƒpƒCƒ‹‚·‚邱‚Æ‚ª‚Å‚«‚È‚¢‚½‚߁C
    57  *  ALLFUNCƒ}ƒNƒ‚ð’è‹`‚·‚éD
     52 *  本環境では1関数を1オブジェクトファイルにコンパイルすることができないため,
     53 *  ALLFUNCマクロを定義する.
    5854 */
    5955
     
    6157
    6258/*
    63  *  ƒTƒ|[ƒg‚·‚é‹@”\‚Ì’è‹`
     59 *  サポートする機能の定義
    6460 */
    65 #define TOPPERS_TARGET_SUPPORT_DIS_INT                  /* dis_int‚ðƒTƒ|[ƒg‚·‚é */
    66 #define TOPPERS_TARGET_SUPPORT_ENA_INT                  /* ena_int‚ðƒTƒ|[ƒg‚·‚é */
     61#define TOPPERS_TARGET_SUPPORT_DIS_INT                  /* dis_intをサポートする */
     62#define TOPPERS_TARGET_SUPPORT_ENA_INT                  /* ena_intをサポートする */
    6763
    6864/*
    69  *  ƒJ[ƒlƒ‹ŠÇ—‚ÌŠ„ž‚Ý—Dæ“x‚͈̔Í
     65 *  カーネル管理の割込み優先度の範囲
    7066 *
    71  *  ƒJ[ƒlƒ‹ŠÇ—‚ÌŠ„ž‚Ý—Dæ“x‚̍őå’l‹y‚эŏ¬’l‚Ì’è‹`D
    72  *  Å‘å’l‚Í -1 ŒÅ’è‚ŁC‚±‚ê‚Í“‡Žd—l‘‚É‚ ‚é‚悤‚ɑΏ̐«‚ÌŠÏ“_‚Å—pˆÓ‚³‚ê‚Ä‚¢‚éD
    73  *  Å¬’l TMIN_INTPRI ‚ɐݒè‰Â”\‚È’l‚͈̔͂́C-3, -2, -1 ‚Å‚ ‚éD
     67 *  カーネル管理の割込み優先度の最大値及び最小値の定義.
     68 *  最大値は -1 固定で,これは統合仕様書にあるように対称性の観点で用意されている.
     69 *  最小値 TMIN_INTPRI に設定可能な値の範囲は,-3, -2, -1 である.
    7470 *
    75  *  —Ⴆ‚Î TMIN_INTPRI ‚ð -2 ‚ɐݒ肷‚é‚ƁCNMI ‚ɉÁ‚¦Š„ž‚Ý—Dæ“x‚ª
    76  *  -4 ‹y‚Ñ -3 ‚ɐݒ肳‚ê‚Ä‚¢‚銄ž‚Ý—v‹ƒ‰ƒCƒ“‚©‚ç‚ÌŠ„ž‚Ý‚ª
    77  *  ƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚Ý‚Æ‚È‚éD
    78  *  ‚Ü‚½CTMIN_INTPRI ‚ð -4 ‚ɐݒ肷‚邱‚Æ‚Í‚Å‚«‚¸CNMI ‚¨‚æ‚Ñ -4 ‚͏í‚É
    79  *  ƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚Ý‚Æ‚È‚éD
     71 *  例えば TMIN_INTPRI を -2 に設定すると,NMI に加え割込み優先度が
     72 *  -4 及び -3 に設定されている割込み要求ラインからの割込みが
     73 *  カーネル管理外の割込みとなる.
     74 *  また,TMIN_INTPRI を -4 に設定することはできず,NMI および -4 は常に
     75 *  カーネル管理外の割込みとなる.
    8076 */
    8177#ifndef TMIN_INTPRI
    82 #define TMIN_INTPRI             (-3)            /* Š„ž‚Ý—Dæ“x‚̍ŏ¬’liÅ‚’lj*/
     78#define TMIN_INTPRI             (-3)            /* 割込み優先度の最小値(最高値)*/
    8379#endif /* TMIN_INTPRI */
    84 #define TMAX_INTPRI             (-1)            /* Š„ž‚Ý—Dæ“x‚̍őå’liÅ’á’lj */
     80#define TMAX_INTPRI             (-1)            /* 割込み優先度の最大値(最低値) */
    8581
    8682/*
    87  *  Š„‚荞‚Ý‘®«
     83 *  割り込み属性
    8884 */
    89 #define TA_POSEDGE              TA_EDGE                 /* ƒ|ƒWƒeƒBƒuƒGƒbƒWƒgƒŠƒK */
    90 #define TA_NEGEDGE              UINT_C(0x04)    /* ƒlƒKƒeƒBƒuƒGƒbƒWƒgƒŠƒK */
    91 #define TA_BOTHEDGE             UINT_C(0x08)    /* —¼ƒGƒbƒWƒgƒŠƒK */
     85#define TA_POSEDGE              TA_EDGE                 /* ポジティブエッジトリガ */
     86#define TA_NEGEDGE              UINT_C(0x04)    /* ネガティブエッジトリガ */
     87#define TA_BOTHEDGE             UINT_C(0x08)    /* 両エッジトリガ */
    9288
    9389
  • ssp_qb_r5f100le_cs/trunk/arch/rl78_ca78k0r/prc_rename.def

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

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

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    66;             Nagoya Municipal Industrial Research Institute, 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‰ü•ÏE
    10 ;  Ä”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‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[ƒX
    13 ;      ƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    14 ;  (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg—p
    15 ;      ‚Å‚«‚éŒ`‚ōĔ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—p
    21 ;      ‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±‚ƁD
    22 ;    (a) Ä”z•z‚É”º‚¤ƒhƒLƒ
    23 ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ
    24 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ì
    25 ;        Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    26 ;    (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É•ñ
    27 ;        ‚·‚邱‚ƁD
    28 ;  (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹ŠQ
    29 ;      ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD‚Ü‚½C
    30 ;      –{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝—R‚ÉŠî‚Ã
    31 ;      ‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
     8;  上記著作権者は,以下の (1)〜(4) の条件を満たす場合に限り,本ソフトウェ
     9;  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改変・
     10;  再配布(以下,利用と呼ぶ)することを無償で許諾する.
     11;  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作権
     12;      表示,この利用条件および下記の無保証規定が,そのままの形でソース
     13;      コード中に含まれていること.
     14;  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使用
     15;      できる形で再配布する場合には,再配布に伴うドキュメント(利用者マ
     16;      ニュアルなど)に,上記の著作権表示,この利用条件および下記の無保
     17;      証規定を掲載すること.
     18;  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使用
     19;      できない形で再配布する場合には,次のいずれかの条件を満たすこと.
     20;    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著作
     21;        権表示,この利用条件および下記の無保証規定を掲載すること.
     22;    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに報
     23;        告すること.
     24;  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損害
     25;      からも,上記著作権者およびTOPPERSプロジェクトを免責すること.また,
     26;      本ソフトウェアのユーザまたはエンドユーザからのいかなる理由に基づ
     27;      く請求からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
    3228;
    33 –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨‚æ
    34 ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I‚ɑ΂·
    35 ‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p
    36 ‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»‚̐ӔC‚ð•‰
    37 ‚í‚È‚¢D
     29本ソフトウェアは,無保証で提供されているものである.上記著作権者およ
     30びTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的に対す
     31る適合性も含めて,いかなる保証も行わない.また,本ソフトウェアの利用
     32により直接的または間接的に生じたいかなる損害に関しても,その責任を負
     33わない.
    3834;
    3935;
    4036
    4137;
    42 ;  SIL‚̃AƒZƒ“ƒuƒ‰‹Lq•”•ª
     38;  SILのアセンブラ記述部分
    4339;
    4440
     
    5046;
    5147; uint8_t get_psw(void)
    52 ;   PSW‚Ì’l‚ðŽæ“¾
     48;   PSWの値を取得
    5349;
    5450_get_psw:
    5551        push    ax
    56         mov     a, psw          ; PSW ‚Ì’l‚ðŽæ“¾
     52        mov     a, psw          ; PSW の値を取得
    5753        mov     c, a
    5854        clrb    b
     
    6258;
    6359; void set_psw(uint8_t psw)
    64 ;   PSW‚Ì’l‚ðÝ’è
     60;   PSWの値を設定
    6561;
    6662_set_psw:
  • ssp_qb_r5f100le_cs/trunk/arch/rl78_ca78k0r/prc_sil.h

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    77 *             Nagoya Municipal Industrial Research Institute, JAPAN
    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  *              sil.h ƒvƒƒZƒbƒTˆË‘¶•”(RL78ƒtƒ@ƒ~ƒŠ‹¤’Ê•”•ª)
     41 *              sil.h プロセッサ依存部(RL78ファミリ共通部分)
    4642 */
    4743
     
    5046
    5147/*
    52  *  ƒRƒ“ƒpƒCƒ‰‚ª Inline ‚ðƒTƒ|[ƒg‚µ‚È‚¢‚½‚ß
    53  *  •W€‚̃ƒ‚ƒŠ‹óŠÔƒAƒNƒZƒXŠÖ”‚ðŽg—p‚µ‚È‚¢
     48 *  コンパイラが Inline をサポートしないため
     49 *  標準のメモリ空間アクセス関数を使用しない
    5450 */
    5551#define TOPPERS_OMIT_SIL_ACCESS
    5652
    5753/*
    58  * PSW ƒŒƒWƒXƒ^
     54 * PSW レジスタ
    5955 */
    6056#define PSW_IE_MASK     (0x80)
    6157#define PSW_ISP_MASK    (0x06)
    6258
    63 // psw ‚Ì ISP{0,1} •”•ª‚¾‚¯‚ðŽæ‚èo‚·
     59// psw の ISP{0,1} 部分だけを取り出す
    6460#define PSW2ISP(psw)    ((uint8_t)((psw) & PSW_ISP_MASK))
    65 // psw ‚Ì ISP{0,1} ‚̃rƒbƒgˆÊ’u‚É isp ‚ðƒZƒbƒg‚µ‚½ƒpƒ^[ƒ“‚ðì‚é
     61// psw の ISP{0,1} のビット位置に isp をセットしたパターンを作る
    6662#define PSW_SET_ISP(psw, isp)   ((uint8_t)((uint8_t)(psw & ~PSW_ISP_MASK) | isp))
    6763
     
    6965#ifndef TOPPERS_MACRO_ONLY
    7066
    71 // PSW‚̎擾EÝ’è
     67// PSWの取得・設定
    7268extern uint8_t get_psw(void);
    7369extern void set_psw(uint8_t psw);
    7470
    7571/*
    76  *  NMI‚ðœ‚­‚·‚ׂĂ̊„ž‚Ý‚Ì‹ÖŽ~(prc_config.c)
     72 *  NMIを除くすべての割込みの禁止(prc_config.c)
    7773 */
    7874extern uint8_t TOPPERS_disint(void);
    7975
    8076/*
    81  *  Š„ž‚Ý—Dæ“xƒ}ƒXƒNi“à•”•\Œ»j‚ÌŒ»Ý’l‚̐ݒè(prc_config.c)
     77 *  割込み優先度マスク(内部表現)の現在値の設定(prc_config.c)
    8278 */
    8379extern void TOPPERS_enaint(uint8_t TOPPERS_psw);
    8480
    8581/*
    86  *  ‘SŠ„ž‚݃ƒbƒNó‘Ԃ̐§Œä
     82 *  全割込みロック状態の制御
    8783 */
    8884#define SIL_PRE_LOC             uint8_t TOPPERS_ie_psw;
     
    9187
    9288/*
    93  *  ”÷­ŽžŠÔ‘Ò‚¿(target_support.asm, not yet)
     89 *  微少時間待ち(target_support.asm, not yet)
    9490 */
    9591extern void sil_dly_nse(ulong_t dlytim);
     
    9894
    9995/*
    100  *  ƒvƒƒZƒbƒT‚̃Gƒ“ƒfƒBƒAƒ“
     96 *  プロセッサのエンディアン
    10197 */
    102 #define SIL_ENDIAN_LITTLE                       /* ƒŠƒgƒ‹ƒGƒ“ƒfƒBƒAƒ“ */
     98#define SIL_ENDIAN_LITTLE                       /* リトルエンディアン */
    10399
    104100#endif /* TOPPERS_PRC_SIL_H */
  • ssp_qb_r5f100le_cs/trunk/arch/rl78_ca78k0r/prc_stddef.h

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    77 *             Nagoya Municipal Industrial Research Institute, JAPAN
    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  *              t_stddef.h‚̃vƒƒZƒbƒTˆË‘¶•”iRL78ƒtƒ@ƒ~ƒŠ‹¤’Ê•”•ªj
     41 *              t_stddef.hのプロセッサ依存部(RL78ファミリ共通部分)
    4642 *
    47  *  ‚±‚̃Cƒ“ƒNƒ‹[ƒhƒtƒ@ƒCƒ‹‚́Ctarget_stddef.h ‚Ì‚Ý‚©‚çƒCƒ“ƒNƒ‹[ƒh‚³‚ê‚éD
    48  *  ‘¼‚̃tƒ@ƒCƒ‹‚©‚ç’¼ÚƒCƒ“ƒNƒ‹[ƒh‚µ‚Ä‚Í‚È‚ç‚È‚¢D
     43 *  このインクルードファイルは,target_stddef.h のみからインクルードされる.
     44 *  他のファイルから直接インクルードしてはならない.
    4945 */
    5046
     
    5349
    5450/*
    55  *  ƒ^[ƒQƒbƒg‚ðŽ¯•Ê‚·‚邽‚߂̃}ƒNƒ‚Ì’è‹`
     51 *  ターゲットを識別するためのマクロの定義
    5652 */
    57 #define TOPPERS_RL78                            /* ƒvƒƒZƒbƒT—ªÌ */
     53#define TOPPERS_RL78                            /* プロセッサ略称 */
    5854
    5955#endif /* TOPPERS_PRC_STDDEF_H */
  • ssp_qb_r5f100le_cs/trunk/arch/rl78_ca78k0r/prc_support.asm

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    66;             Nagoya Municipal Industrial Research Institute, 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‰ü•ÏE
    10 ;  Ä”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‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[ƒX
    13 ;      ƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    14 ;  (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg—p
    15 ;      ‚Å‚«‚éŒ`‚ōĔ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—p
    21 ;      ‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±‚ƁD
    22 ;    (a) Ä”z•z‚É”º‚¤ƒhƒLƒ
    23 ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ
    24 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ì
    25 ;        Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    26 ;    (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É•ñ
    27 ;        ‚·‚邱‚ƁD
    28 ;  (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹ŠQ
    29 ;      ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD‚Ü‚½C
    30 ;      –{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝—R‚ÉŠî‚Ã
    31 ;      ‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
    32 ;
    33 ;  –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨‚æ
    34 ;  ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I‚ɑ΂·
    35 ;  ‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p
    36 ;  ‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»‚̐ӔC‚ð•‰
    37 ;  ‚í‚È‚¢D
    38 ;
    39 ;
    40 
    41 ;
    42 ;  ƒJ[ƒlƒ‹ŽÀ‘•‚̃vƒƒZƒbƒTˆË‘¶•”•ª
    43 ;
    44 
    45 ;
    46 ;  ƒ}ƒNƒ’è‹`‚̃Cƒ“ƒNƒ‹[ƒh
     8;  上記著作権者は,以下の (1)〜(4) の条件を満たす場合に限り,本ソフトウェ
     9;  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改変・
     10;  再配布(以下,利用と呼ぶ)することを無償で許諾する.
     11;  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作権
     12;      表示,この利用条件および下記の無保証規定が,そのままの形でソース
     13;      コード中に含まれていること.
     14;  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使用
     15;      できる形で再配布する場合には,再配布に伴うドキュメント(利用者マ
     16;      ニュアルなど)に,上記の著作権表示,この利用条件および下記の無保
     17;      証規定を掲載すること.
     18;  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使用
     19;      できない形で再配布する場合には,次のいずれかの条件を満たすこと.
     20;    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著作
     21;        権表示,この利用条件および下記の無保証規定を掲載すること.
     22;    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに報
     23;        告すること.
     24;  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損害
     25;      からも,上記著作権者およびTOPPERSプロジェクトを免責すること.また,
     26;      本ソフトウェアのユーザまたはエンドユーザからのいかなる理由に基づ
     27;      く請求からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     28;
     29;  本ソフトウェアは,無保証で提供されているものである.上記著作権者およ
     30;  びTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的に対す
     31;  る適合性も含めて,いかなる保証も行わない.また,本ソフトウェアの利用
     32;  により直接的または間接的に生じたいかなる損害に関しても,その責任を負
     33;  わない.
     34;
     35;
     36
     37;
     38;  カーネル実装のプロセッサ依存部分
     39;
     40
     41;
     42;  マクロ定義のインクルード
    4743;
    4844$INCLUDE(prc_support_def.inc)
    4945
    5046;
    51 ƒOƒ[ƒoƒ‹ƒVƒ“ƒ{ƒ‹
    52 ;
    53         ; ƒRƒ“ƒpƒCƒ‰‚ªŽg—p‚·‚é saddr—̈æ‚̃ŒƒWƒXƒ^
     47グローバルシンボル
     48;
     49        ; コンパイラが使用する saddr領域のレジスタ
    5450        extrn   _@RTARG0,_@RTARG2,_@RTARG4,_@RTARG6,_@SEGAX,_@SEGDE
    5551        extrn   _@NRARG0,_@NRARG1,_@NRARG2,_@NRARG3
    5652        extrn   _@NRAT00,_@NRAT02,_@NRAT04,_@NRAT06
    5753        ; kernel_cfg.c
    58         extrn   __kernel_istkpt         ; ƒXƒ^ƒbƒNƒ|ƒCƒ“ƒ^‚̏‰Šú’l
     54        extrn   __kernel_istkpt         ; スタックポインタの初期値
    5955        ; prc_config.c
    60         extrn   _t_lock_cpu             ; CPUƒƒbƒNó‘Ԃւ̈ڍs
    61         extrn   __kernel_intnest        ; Š„ž‚݂̃lƒXƒgƒJƒEƒ“ƒ^
    62         extrn   __kernel_lock_flag      ; CPUƒƒbƒNƒtƒ‰ƒO
     56        extrn   _t_lock_cpu             ; CPUロック状態への移行
     57        extrn   __kernel_intnest        ; 割込みのネストカウンタ
     58        extrn   __kernel_lock_flag      ; CPUロックフラグ
    6359        ; task.c
    64         extrn   __kernel_dispatcher     ; ƒfƒBƒXƒpƒbƒ`ƒƒ
    65         extrn   __kernel_reqflg         ; ƒfƒBƒXƒpƒbƒ`—v‹ƒtƒ‰ƒO
    66         extrn   __kernel_disdsp         ; ƒfƒBƒXƒpƒbƒ`‹ÖŽ~ó‘Ô
    67         extrn   __kernel_search_schedtsk        ; Å‚—Dæ“x‚̃T[ƒ`
    68         extrn   __kernel_run_task       ; ƒ^ƒXƒN‚ÌŠJŽn
     60        extrn   __kernel_dispatcher     ; ディスパッチャ
     61        extrn   __kernel_reqflg         ; ディスパッチ要求フラグ
     62        extrn   __kernel_disdsp         ; ディスパッチ禁止状態
     63        extrn   __kernel_search_schedtsk        ; 最高優先度のサーチ
     64        extrn   __kernel_run_task       ; タスクの開始
    6965        ; startup.c
    70         extrn   __kernel_exit_kernel    ; ƒJ[ƒlƒ‹‚̏I—¹ˆ—
     66        extrn   __kernel_exit_kernel    ; カーネルの終了処理
    7167
    7268        ; prc_support.asm
    73         public  __kernel_start_dispatch         ; ƒfƒBƒXƒpƒbƒ`‚ÌŠJŽnˆ—
    74         public  __kernel_call_exit_kernel       ; I—¹ˆ—‚̃R[ƒ‹
    75         public  __kernel_interrupt_entry        ; Š„ž‚Ý‚Ì“üŒûˆ—(‹¤’Ê•”)
    76         public  __kernel_int_return             ; ƒŒƒWƒXƒ^‚𕜋A‚µ‚ÄŠ„ž‚Ý”­¶Œ³‚ÖƒŠƒ^[ƒ“
    77         public  _unused_interrupt               ; –¢Žg—pŠ„ž‚݂̏ˆ—
    78 
    79 ;
    80 ; ƒRƒ“ƒpƒCƒ‰‚ÅŽg—p‚·‚ésaddr—̈æ‚̃ŒƒWƒXƒ^‚ð•Û‘¶
     69        public  __kernel_start_dispatch         ; ディスパッチの開始処理
     70        public  __kernel_call_exit_kernel       ; 終了処理のコール
     71        public  __kernel_interrupt_entry        ; 割込みの入口処理(共通部)
     72        public  __kernel_int_return             ; レジスタを復帰して割込み発生元へリターン
     73        public  _unused_interrupt               ; 未使用割込みの処理
     74
     75;
     76; コンパイラで使用するsaddr領域のレジスタを保存
    8177;
    8278restore_saddr_regs      macro
    83 $if (ALLOC_REGVAR_TO_SADDR) ; -qr ƒIƒvƒVƒ‡ƒ“‚ðŽg—p‚·‚éê‡
    84         pop     ax              ; ƒŒƒWƒXƒ^•œ‹A
     79$if (ALLOC_REGVAR_TO_SADDR) ; -qr オプションを使用する場合
     80        pop     ax              ; レジスタ復帰
    8581        movw    _@NRAT06, ax    ;
    8682        pop     ax              ;
     
    9995        movw    _@NRARG0, ax    ;
    10096$endif
    101         pop     ax              ; ƒŒƒWƒXƒ^•œ‹A
     97        pop     ax              ; レジスタ復帰
    10298        movw    _@SEGDE, ax     ;
    10399        pop     ax              ;
     
    114110
    115111;
    116 ƒXƒ^ƒbƒNƒ|ƒCƒ“ƒ^‚ð‰Šú‰»
     112スタックポインタを初期化
    117113;
    118114reset_sp        macro
     
    124120       
    125121;
    126 ;  PSW ‚Ì ISP1 = 1, ISP0 = 1 ‚É‚µ‚ÄŠ„ž‚݂̃}ƒXƒN‚ð‰ðœ‚·‚é
     122;  PSW の ISP1 = 1, ISP0 = 1 にして割込みのマスクを解除する
    127123;
    128124clear_pswisp_mask       macro
     
    136132
    137133;
    138 ƒJ[ƒlƒ‹‚Ì“®ìŠJŽn‚É•K—v‚Æ‚³‚ê‚éŒãŽn––‚ðs‚¤‚½‚߂̊֐”
    139 ;  sta_ker(startup.c) ‚©‚çŒÄ‚яo‚³‚ê‚éD
     134カーネルの動作開始に必要とされる後始末を行うための関数
     135;  sta_ker(startup.c) から呼び出される.
    140136;
    141137__kernel_start_dispatch:
    142138        ;
    143         ;  CPUƒƒbƒNó‘Ô‚Æ‘SŠ„ž‚݃ƒbƒNó‘Ô‚Æ‚ð‹æ•Ê‚·‚é•K—v‚ª‚ ‚éê‡C
    144         ;  CPUƒƒbƒNó‘Ô‚É‚µC‘SŠ„ž‚݃ƒbƒN‘Š“–‚̏ó‘Ô‚ð‰ðœ‚·‚éD
     139        ;  CPUロック状態と全割込みロック状態とを区別する必要がある場合,
     140        ;  CPUロック状態にし,全割込みロック相当の状態を解除する.
    145141        ;
    146142        call !!_t_lock_cpu
     
    151147$ENDIF
    152148        ;
    153         ;  ƒXƒ^ƒbƒNƒ|ƒCƒ“ƒ^‚ð‰Šú‰»‚·‚é
    154         ;  sta_ker ‚©‚ç start_dispatch ‚̊֐”ƒR[ƒ‹‚É‚æ‚éƒXƒ^ƒbƒNÁ”‚ð
    155         ;  ƒNƒŠƒA‚·‚邽‚߁CƒXƒ^ƒbƒNƒ|ƒCƒ“ƒ^‚ð‰Šú‰»‚·‚éD
     149        ;  スタックポインタを初期化する
     150        ;  sta_ker から start_dispatch の関数コールによるスタック消費分を
     151        ;  クリアするため,スタックポインタを初期化する.
    156152        ;
    157153        reset_sp
    158154
    159155        ;
    160         ;  dispatcher (task.c) ‚ÖƒWƒƒƒ“ƒv‚·‚é
    161         ;  ŠÖ”ƒR[ƒ‹‚É‚µ‚È‚¢‚̂̓Xƒ^ƒbƒN‚ðß–ñ‚·‚邽‚߁D
    162         ;
    163         ; dispatcher (kernel/task.c) ‚̌Ăяo‚µ
     156        ;  dispatcher (task.c) へジャンプする
     157        ;  関数コールにしないのはスタックを節約するため.
     158        ;
     159        ; dispatcher (kernel/task.c) の呼び出し
    164160        br      !!__kernel_dispatcher
    165161
    166162
    167163;
    168 I—¹ˆ—‚̌Ăяo‚µ
    169 ƒXƒ^ƒbƒNƒ|ƒCƒ“ƒ^‚ð‰Šú‰»‚µCexit_kernel ‚ðŒÄ‚яo‚·D
     164終了処理の呼び出し
     165スタックポインタを初期化し,exit_kernel を呼び出す.
    170166;
    171167 __kernel_call_exit_kernel:
     
    177173
    178174;
    179 Š„ž‚Ý/CPU—áŠO‚̏o“üŒûˆ—(‹¤’Ê•”)
    180 ;    ƒJ[ƒlƒ‹ŠÇ—‚ÌŠ„ž‚Ý‚Ü‚½‚ÍCPU—áŠO‚̏ꍇ‚ɃŒƒWƒXƒ^•Û‘¶ŒãCŒÄ‚яo‚³‚ê‚éD
    181 ;
    182 ;   ‘O’ñðŒ
    183 ;       EPSWƒŒƒWƒXƒ^‚ÌIEƒrƒbƒg=0, ISP‚ÍŽó•t‚¯‚½Š„ž‚Ý‚ÌISP.
    184 ;       Eƒnƒ“ƒhƒ‰‚̃AƒhƒŒƒX‚ª bc ‚ÉŠi”[‚³‚ê‚Ä‚¢‚é.
    185 ;   ECPU—áŠOƒnƒ“ƒhƒ‰‚Ì“üŒû‚©‚ç—ˆ‚½ê‡CƒXƒ^ƒbƒNƒ|ƒCƒ“ƒ^‚Ì
    186 ;     æ“ª”Ô’n(p_excinf)‚ª ax ‚ÉŠi”[‚³‚ê‚Ä‚¨‚èC
    187 ;     ‚±‚ê‚ÍCPU—áŠOƒnƒ“ƒhƒ‰‚̈ø”(p_excinf)‚Æ‚µ‚Ä‚»‚Ì‚Ü‚Ü“n‚³‚ê‚éD
    188 ;
    189 ;       ƒŒƒWƒXƒ^‚ªƒXƒ^ƒbƒNã‚ɂǂ̂悤‚É•Û‘¶‚³‚ê‚Ä‚¢‚é‚©‚ðˆÈ‰º‚ÉŽ¦‚·.
    190 ;       }‚Í•À‚я‡‚Ì‚Ý‚ð•\Œ»‚µ‚½‚à‚Ì‚Å‚ ‚èCƒTƒCƒY‚ðl—¶‚µ‚Ä‚¢‚È‚¢‚±‚Æ‚É’ˆÓ‚·‚éD
    191 ;       ³Šm‚ɂ̓f[ƒ^ƒV[ƒg‚ðŽQÆ‚Ì‚±‚ƁD
    192 ;       ‚±‚̐}‚ł͏オ’áˆÊ, ‰º‚ª‚ˆÊ‚̃AƒhƒŒƒX‚Å, ƒXƒ^ƒbƒN‚͐}‚̉º‘¤‚©‚ç
    193 ;       ã•ûŒü‚ÉŒü‚©‚Á‚Đςݏグ‚ç‚ê‚é‚à‚Ì‚Æ‚·‚é.
    194 ;
    195 ;       ¦1 saddr—̈æ‚̃[ƒNƒGƒŠƒA‚̓Rƒ“ƒpƒCƒ‰ƒIƒvƒVƒ‡ƒ“ -qr ‚ðŽw’è‚·‚éê‡‚É
    196 ;       •Û‘¶‚ª•K—v‚Å‚ ‚èC’ʏí‚Í•Û‘¶‚µ‚È‚¢D•Û‘¶‚·‚éê‡‚̓AƒZƒ“ƒuƒ‰ƒIƒvƒVƒ‡ƒ“
    197 ;       ‚ɂāuALLOC_REGVAR_TO_SADDRv‚ð’è‹`‚·‚邱‚ƁD
    198 ;
    199 ;       ¦2 CPU—áŠO‚Ì“üŒû‚ðŒo—R‚µ‚½ê‡‚Ì‚Ý•Û‘¶‚³‚ê‚é
    200 ;
    201 ;
    202 ;       ---------------<-- p_excinf(¦)
    203 ;       |  saddr—Ìˆæ   |
    204 ;       |ƒ[ƒN—pƒGƒŠƒA|
    205 ;       |  (16byte)¦1 |
     175割込み/CPU例外の出入口処理(共通部)
     176;    カーネル管理の割込みまたはCPU例外の場合にレジスタ保存後,呼び出される.
     177;
     178;   前提条件
     179;       ・PSWレジスタのIEビット=0, ISPは受付けた割込みのISP.
     180;       ・ハンドラのアドレスが bc に格納されている.
     181;   ・CPU例外ハンドラの入口から来た場合,スタックポインタの
     182;     先頭番地(p_excinf)が ax に格納されており,
     183;     これはCPU例外ハンドラの引数(p_excinf)としてそのまま渡される.
     184;
     185;       レジスタがスタック上にどのように保存されているかを以下に示す.
     186;       図は並び順のみを表現したものであり,サイズを考慮していないことに注意する.
     187;       正確にはデータシートを参照のこと.
     188;       この図では上が低位, 下が高位のアドレスで, スタックは図の下側から
     189;       上方向に向かって積み上げられるものとする.
     190;
     191;       ※1 saddr領域のワークエリアはコンパイラオプション -qr を指定する場合に
     192;       保存が必要であり,通常は保存しない.保存する場合はアセンブラオプション
     193;       にて「ALLOC_REGVAR_TO_SADDR」を定義すること.
     194;
     195;       ※2 CPU例外の入口を経由した場合のみ保存される
     196;
     197;
     198;       ---------------<-- p_excinf()
     199;       |  saddr領域   |
     200;       |ワーク用エリア|
     201;       |  (16byte)1 |
    206202;       ---------------<-- p_excinf
    207 ;       |  saddr—Ìˆæ   |
    208 ;       |ƒZƒOƒƒ“ƒgî•ñ|
    209 ;       | Ši”[—pƒGƒŠƒA |
     203;       |  saddr領域   |
     204;       |セグメント情報|
     205;       | 格納用エリア |
    210206;       |   (4byte)    |
    211207;       ---------------
    212 ;       |  saddr—Ìˆæ   |
    213 ;       |  ƒ‰ƒ“ƒ^ƒCƒ€  |
    214 ;       |  ˆø”ƒGƒŠƒA  |
     208;       |  saddr領域   |
     209;       |  ランタイム  |
     210;       |  引数エリア  |
    215211;       |   (8byte)    |
    216212;       ---------------
     
    230226;       ---------------
    231227;
    232 ;       ƒnƒ“ƒhƒ‰‚©‚烊ƒ^[ƒ“‚µ‚½Œã‚Í, ‘½dŠ„ž‚Ý‚Å‚È‚­, ‚©‚C
    233 ;       reqflg ‚ª TRUEC‚©‚Cdisdsp ‚ª FALSE ‚ÌŽž‚ɁCinterrupt_dispatch ‚Ö•ªŠò‚·‚éD
    234 ;
    235 ;       ‘½dŠ„ž‚Ý‚©‚Ç‚¤‚©‚ÍŠ„ž‚݃lƒXƒgƒJƒEƒ“ƒ^‚Ì’l‚Å”»’è‚·‚é.
    236 ;       intnest > 0 ‚È‚ç‚Α½dŠ„ž‚Ý‚Å‚ ‚é‚Æ”»’è‚·‚é.
     228;       ハンドラからリターンした後は, 多重割込みでなく, かつ,
     229;       reqflg が TRUE,かつ,disdsp が FALSE の時に,interrupt_dispatch へ分岐する.
     230;
     231;       多重割込みかどうかは割込みネストカウンタの値で判定する.
     232;       intnest > 0 ならば多重割込みであると判定する.
    237233;
    238234
    239235__kernel_interrupt_entry:
    240         inc     !__kernel_intnest       ; ƒlƒXƒgƒJƒEƒ“ƒ^‚ðƒCƒ“ƒNƒŠƒƒ“ƒg
    241         ei                              ; Š„ž‚Ý‹–‰Â(IPL‚͎󂯕t‚¯‚ç‚ꂽŠ„ž‚݂̃Œƒxƒ‹)
    242         call    bc                      ; Š„ž‚݃nƒ“ƒhƒ‰ŒÄ‚яo‚µ
    243         di                              ; Š„ž‚Ý‹ÖŽ~
    244         dec     !__kernel_intnest       ; ƒlƒXƒgƒJƒEƒ“ƒ^‚ðƒfƒNƒŠƒƒ“ƒg
    245         bnz     $__kernel_int_return    ; –ß‚èæ‚ª”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg(”ñƒ[ƒ)‚È‚ç’P‚ɃŠƒ^[ƒ“
    246         movw    ax,!__kernel_reqflg     ; ƒfƒBƒXƒpƒbƒ`—v‹‚ª‚ ‚é‚©‚Ç‚¤‚©
     236        inc     !__kernel_intnest       ; ネストカウンタをインクリメント
     237        ei                              ; 割込み許可(IPLは受け付けられた割込みのレベル)
     238        call    bc                      ; 割込みハンドラ呼び出し
     239        di                              ; 割込み禁止
     240        dec     !__kernel_intnest       ; ネストカウンタをデクリメント
     241        bnz     $__kernel_int_return    ; 戻り先が非タスクコンテキスト(非ゼロ)なら単にリターン
     242        movw    ax,!__kernel_reqflg     ; ディスパッチ要求があるかどうか
    247243        cmpw    ax, #0
    248         bz      $__kernel_int_return    ; ‚È‚¯‚ê‚΁C’P‚ɃŠƒ^[ƒ“
     244        bz      $__kernel_int_return    ; なければ,単にリターン
    249245        movw    ax, #0
    250         movw    !__kernel_reqflg, ax    ; reqflg = FALSE ‚É–ß‚µ‚Ä‚¨‚­
    251         movw    ax, !__kernel_disdsp    ; ƒfƒBƒXƒpƒbƒ`‹ÖŽ~‚©‚Ç‚¤‚©
     246        movw    !__kernel_reqflg, ax    ; reqflg = FALSE に戻しておく
     247        movw    ax, !__kernel_disdsp    ; ディスパッチ禁止かどうか
    252248        cmpw    ax, #0
    253         bnz     $__kernel_int_return    ; ‹ÖŽ~‚È‚çC’P‚ɃŠƒ^[ƒ“
    254 
    255 ;
    256 Š„ž‚݂̏oŒûˆ—(ƒfƒBƒXƒpƒbƒ`•t‚«)
    257 ;    CPU ƒƒbƒN‘Š“–‚̏ó‘ԂɈڍs‚µCV‹Kƒ^ƒXƒN‚ðŠJŽn‚·‚é
    258 ;
    259 ‘O’ñðŒF
    260 ;    PSWƒŒƒWƒXƒ^‚ÌIEƒtƒ‰ƒO = 0 (Š„ž‚Ý‹ÖŽ~)
    261 ;    PSWƒŒƒWƒXƒ^‚ÌISP{1,0} = Žó‚¯•t‚¯‚½Š„ž‚Ý‚ÌŠ„ž‚݃Œƒxƒ‹
     249        bnz     $__kernel_int_return    ; 禁止なら,単にリターン
     250
     251;
     252割込みの出口処理(ディスパッチ付き)
     253;    CPU ロック相当の状態に移行し,新規タスクを開始する
     254;
     255前提条件:
     256;    PSWレジスタのIEフラグ = 0 (割込み禁止)
     257;    PSWレジスタのISP{1,0} = 受け付けた割込みの割込みレベル
    262258;
    263259__kernel_interrupt_dispatch:
     
    272268        call    !!__kernel_run_task
    273269
    274         ; run_task ‚©‚ç‚̃Šƒ^[ƒ“Œã‚̏ó‘Ô: CPUƒƒbƒNó‘Ô
    275         ; __kernel_int_return ‚Ì reti ‚Å PSW ‚Ì IE, ISP ‚Í
    276         ; Š„ž‚Ý”­¶‘O‚̏ó‘Ԃɖ߂邽‚߁Clock_flag ‚¾‚¯Œ³‚É–ß‚·D
     270        ; run_task からのリターン後の状態: CPUロック状態
     271        ; __kernel_int_return の reti で PSW の IE, ISP は
     272        ; 割込み発生前の状態に戻るため,lock_flag だけ元に戻す.
    277273        movw    ax, #0
    278         movw    !__kernel_lock_flag, ax         ; lock_flag ‚ðƒNƒŠƒA
    279 
    280 ;
    281 ƒŒƒWƒXƒ^•œ‹A‚µ‚ÄŠ„ž‚Ý‚©‚烊ƒ^[ƒ“
     274        movw    !__kernel_lock_flag, ax         ; lock_flag をクリア
     275
     276;
     277レジスタ復帰して割込みからリターン
    282278;
    283279__kernel_int_return:
    284         restore_saddr_regs      ; saddr—̈æ‚̃ŒƒWƒXƒ^•œ‹A
    285         pop     ax          ; ES, CS ‚Ì•œ‹A
     280        restore_saddr_regs      ; saddr領域のレジスタ復帰
     281        pop     ax          ; ES, CS の復帰
    286282        mov     cs, a       ;
    287283        mov     a, x        ;
    288284        mov     es, a       ;
    289         pop     hl          ; ƒŒƒWƒXƒ^‚𕜋A
     285        pop     hl          ; レジスタを復帰
    290286        pop     de
    291287        pop     bc
     
    294290
    295291;
    296 –³ŒÀƒ‹[ƒv(”O‚Ì‚½‚ß)
     292無限ループ(念のため)
    297293;
    298294_loop:
     
    300296
    301297;
    302 –¢Žg—pŠ„ž‚Ý
     298未使用割込み
    303299;
    304300_unused_interrupt:
  • ssp_qb_r5f100le_cs/trunk/arch/rl78_ca78k0r/prc_unrename.h

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

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    11=====================================================================
    2                          RL78ƒvƒƒZƒbƒTˆË‘¶•”
     2                         RL78プロセッサ依存部
    33                                  Last Modified: '15/6/2
    44=====================================================================
    55
    66
    7 (1) ‘Ήž‚µ‚Ä‚¢‚éƒ^[ƒQƒbƒgƒVƒXƒeƒ€‚ÌŽí—ށE\¬
    8 
    9 RL78ƒvƒƒZƒbƒTˆË‘¶•”(ˆÈ‰ºCRL78ˆË‘¶•”)‚́Cƒ‹ƒlƒTƒXƒGƒŒƒNƒgƒƒjƒNƒX» RL78ƒtƒ@ƒ~ƒŠ
    10 ‚̃vƒƒZƒbƒT‚ðŽå‚ȃ^[ƒQƒbƒg‚Æ‚·‚éDRL78ƒtƒ@ƒ~ƒŠ‚́C‚¢‚­‚‚©‚̃Oƒ‹[ƒvC
    11 ‚»‚µ‚Ä‚Ü‚½‚»‚̃Oƒ‹[ƒv‚Ì’†‚ɁC—lX‚ÈŒ^”Ô‚Å•\Œ»‚³‚ê‚éƒvƒƒZƒbƒT‚̃oƒŠƒG[ƒVƒ‡ƒ“‚ª
    12 ‘¶Ý‚µ‚Ä‚¢‚éD
    13 
    14 ‚½‚¾‚µC–{ƒvƒƒZƒbƒTˆË‘¶•”‚É‚¨‚¢‚āCŒ»ó‚ł́CƒTƒ|[ƒg‚·‚éƒ^[ƒQƒbƒgƒ{[ƒh‚Æ‚ÌŠÖŒW‚©‚çC
    15 RL78/G13 ‚ÉŠÖ‚·‚é’è‹`‚Ì‚Ý‚ð—pˆÓ‚µ‚Ä‚¢‚éD
    16 
    17 
    18 (2) ƒvƒƒZƒbƒTˆË‘¶•”‚̃tƒ@ƒCƒ‹\¬
    19 
    20 ƒŠƒAƒ‹ƒ^ƒCƒ€OSƒJ[ƒlƒ‹‚̃vƒƒZƒbƒTˆË‘¶•”‚Æ‚µ‚ÄŽÀ‘•‚·‚é•”•ª‚Ì‚Ý‚ðl‚¦‚½ê‡C
    21 RL78ˆË‘¶•”‚Ì’è‹`‚́C‘å’ï‚̏ꍇC‘S‚ẴvƒƒZƒbƒT‚É‹¤’Ê‚·‚é•”•ª‚ƁC
    22 ƒvƒƒZƒbƒT‚ÌŒ^”ԂňقȂ镔•ª(¦1)‚ƂɃR[ƒh‚𐮗‚·‚邱‚Æ‚ª‰Â”\‚Å‚ ‚éD
    23 ˆÙ‚È‚é•”•ª‚ɂ‚¢‚Ă̓vƒƒZƒbƒTŒ^”Ô‚ÉŠî‚­ƒtƒ@ƒCƒ‹‚ð—pˆÓ‚µ‚Ä‚¢‚éD
    24 
    25 ¦1 Š„ž‚ݔԍ†CŠ„ž‚݃nƒ“ƒhƒ‰”ԍ†C‹y‚сCŠ„ž‚ݐ§ŒäƒŒƒWƒXƒ^‚Ì”z’u‚È‚Ç
    26 
    27 ˆÈã‚æ‚èCƒvƒƒZƒbƒTˆË‘¶•”‚̃R[ƒh‚́CˆÈ‰º‚Ì–½–¼‹K‘¥‚ɏ]‚Á‚Ä—pˆÓ‚³‚ꂽ
    28 ƒtƒ@ƒCƒ‹‚ցC‹¤’Ê•”•ª‚Ɖ•ϕ”•ª‚Æ‚É•ª—Þ‚µ‚Ä”z’u‚³‚ê‚Ä‚¢‚éD
    29 
    30 prc_*  F ‘S‚ẴvƒƒZƒbƒT‚É‹¤’Ê‚·‚é’è‹`
    31 rl78g13_* ‚ȂǁFƒvƒƒZƒbƒTŒ^”Ô–ˆ‚ɈقȂé’è‹`
    32 
    33 ’è‹`‚Ì”z’u‚̓Tƒ|[ƒg‚·‚éƒvƒƒZƒbƒT‚𑝂₷–ˆ‚ÉŒ©’¼‚µ‚ª•K—v‚Æ‚È‚é‚©‚à‚µ‚ê‚È‚¢D
    34 ‚à‚µŒ»ó‚̃R[ƒh”z’u‚Å•s“s‡‚ª¶‚¶‚éê‡‚ɂ̓Tƒ|[ƒgƒ[ƒŠƒ“ƒOƒŠƒXƒg‚Ü‚Å
    35 ‚²˜A—’¸‚¯‚é‚ƍK‚¢‚Å‚ ‚éD
    36 
    37 
    38 (3) Žg—p‚·‚éŠJ”­ŠÂ‹«‚Æ“®ìŒŸØ‚µ‚½ðŒ
    39 
    40 ƒRƒ“ƒpƒCƒ‹C‹y‚уrƒ‹ƒhŠÇ—‚ɂ̓‹ƒlƒTƒXƒGƒŒƒNƒgƒƒjƒNƒX»ƒc[ƒ‹‚ð—p‚¢‚éD
    41 “®ìŠm”F‚µ‚½ƒo[ƒWƒ‡ƒ“‚̓^[ƒQƒbƒgˆË‘¶•”‚̃hƒLƒ
    42 ƒƒ“ƒg‚É‹LÚ‚·‚éD
    43 
    44 
    45 (4) ƒ^[ƒQƒbƒg’è‹`Ž–€‚Ì‹K’è
    46 
    47 (4-1) ƒf[ƒ^Œ^‚ÉŠÖ‚·‚é‹K’è
    48 
    49 TOPPERS‹¤’ʃf[ƒ^Œ^‚Ì‚¤‚¿CTOPPERSV¢‘ãƒJ[ƒlƒ‹“‡Žd—l‘(ˆÈ‰ºC“‡Žd—l‘)‚Å
    50 ƒIƒvƒVƒ‡ƒ“ˆµ‚¢‚Æ‚³‚ê‚Ä‚¢‚éƒf[ƒ^Œ^‚ð‘ΏۂɁCƒ^[ƒQƒbƒgˆË‘¶•”‚ł̃Tƒ|[ƒgó‹µ‚ɂ‚¢‚Ä
    51 ‹Lq‚·‚éD‚±‚ê‚ç‚Ì’è‹`‚Í arch/ca78k0r/tool_stddef.h ‚Å’è‹`‚³‚ê‚Ä‚¢‚é
    52 
    53 y®”Œ^z
    54 
    55 EƒTƒ|[ƒg
    56         int8_t          •„†•t‚«8ƒrƒbƒg®”iƒIƒvƒVƒ‡ƒ“CC99€‹’j
    57         uint8_t         •„†–³‚µ8ƒrƒbƒg®”iƒIƒvƒVƒ‡ƒ“CC99€‹’j
    58         float32_t       IEEE754€‹’‚Ì32ƒrƒbƒg’P¸“x•‚“®¬”“_”iƒIƒvƒVƒ‡ƒ“j
    59 
    60         ‚±‚Ì‚¤‚¿Cfloat32_t ‚́CIEEE754€‹’‚Ì’P¸“x•‚“®¬”“_”‚Å‚ ‚éD
    61 
    62 E–¢ƒTƒ|[ƒg
    63         int64_t         •„†•t‚«64ƒrƒbƒg®”iƒIƒvƒVƒ‡ƒ“CC99€‹’j
    64         uint64_t        •„†–³‚µ64ƒrƒbƒg®”iƒIƒvƒVƒ‡ƒ“CC99€‹’j
    65         double64_t      IEEE754€‹’‚Ì64ƒrƒbƒg”{¸“x•‚“®¬”“_”iƒIƒvƒVƒ‡ƒ“j
    66         int128_t        •„†•t‚«128ƒrƒbƒg®”iƒIƒvƒVƒ‡ƒ“CC99€‹’j
    67         uint128_t       •„†–³‚µ128ƒrƒbƒg®”iƒIƒvƒVƒ‡ƒ“CC99€‹’j
    68 
    69 yÅ‘å’lCÅ¬’l‚̒萔z
    70 
    71 EƒTƒ|[ƒg
    72         INT8_MAX                        int8_t‚ÉŠi”[‚Å‚«‚éÅ‘å’liƒIƒvƒVƒ‡ƒ“CC99€‹’j
    73         INT8_MIN                        int8_t‚ÉŠi”[‚Å‚«‚éÅ¬’liƒIƒvƒVƒ‡ƒ“CC99€‹’j
    74         UINT8_MAX                       uint8_t‚ÉŠi”[‚Å‚«‚éÅ‘å’liƒIƒvƒVƒ‡ƒ“CC99€‹’j
    75         FLOAT32_MIN                     float32_t‚ÉŠi”[‚Å‚«‚éÅ¬‚̐³‹K‰»‚³‚ꂽ³‚Ì•‚“®¬”“_”iƒIƒvƒVƒ‡ƒ“j
    76         FLOAT32_MAX                     float32_t‚ÉŠi”[‚Å‚«‚é•\Œ»‰Â”\‚ȍőå‚Ì—LŒÀ•‚“®¬”“_”iƒIƒvƒVƒ‡ƒ“j
    77 
    78 E–¢ƒTƒ|[ƒg
    79         INT64_MAX                       int64_t‚ÉŠi”[‚Å‚«‚éÅ‘å’liƒIƒvƒVƒ‡ƒ“CC99€‹’j
    80         INT64_MIN                       int64_t‚ÉŠi”[‚Å‚«‚éÅ¬’liƒIƒvƒVƒ‡ƒ“CC99€‹’j
    81         UINT64_MAX                      uint64_t‚ÉŠi”[‚Å‚«‚éÅ‘å’liƒIƒvƒVƒ‡ƒ“CC99€‹’j
    82         DOUBLE64_MIN            double64_t‚ÉŠi”[‚Å‚«‚éÅ¬‚̐³‹K‰»‚³‚ꂽ³‚Ì•‚“®¬”“_”iƒIƒvƒVƒ‡ƒ“j
    83         DOUBLE64_MAX            double64_t‚ÉŠi”[‚Å‚«‚é•\Œ»‰Â”\‚ȍőå‚Ì—LŒÀ•‚“®¬”“_”iƒIƒvƒVƒ‡ƒ“j
    84         INT128_MAX                      int128_t‚ÉŠi”[‚Å‚«‚éÅ‘å’liƒIƒvƒVƒ‡ƒ“CC99€‹’j
    85         INT128_MIN                      int128_t‚ÉŠi”[‚Å‚«‚éÅ¬’liƒIƒvƒVƒ‡ƒ“CC99€‹’j
    86         UINT128_MAX                     uint128_t‚ÉŠi”[‚Å‚«‚éÅ‘å’liƒIƒvƒVƒ‡ƒ“CC99€‹’j
    87 
    88 (4-2) Š„ž‚ݏˆ—‚ÉŠÖ‚·‚é‹K’è
    89 
    90 (4-2-1) Š„ž‚݃nƒ“ƒhƒ‰”ԍ†‚ÆŠ„ž‚ݔԍ†‚ÌŠ„“–‚āC—¼ŽÒ‚̑Ήž
    91 
    92 Š„ž‚݃nƒ“ƒhƒ‰”ԍ†(inhno)‚ÆŠ„ž‚ݔԍ†(intno)‚́C‹¤‚ɃfƒtƒHƒ‹ƒgƒvƒ‰ƒCƒIƒŠƒeƒB‚Ì’l‚ð—p‚¢‚éD
    93 —¼ŽÒ‚ÍŠî–{“I‚É“¯‚¶”ԍ†‚ª1‘Î1‚ɑΉž‚·‚éD]‚Á‚ÄŽg—p‰Â”\‚È‘S‚Ä‚ÌŠ„ž‚ݔԍ†‚ɑ΂µ‚Ä
    94 Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“(ISR)‚ð“o˜^‰Â”\‚Å‚ ‚éD
    95 Š„ž‚ݔԍ†CŠ„ž‚݃nƒ“ƒhƒ‰”ԍ†‚Í <ƒvƒƒZƒbƒT–¼>.h ƒtƒ@ƒCƒ‹‚Å’è‹`‚µ‚Ä‚¢‚éD
    96 (—Ⴆ‚Î rl78g13.h ‚È‚Ç)
    97 
    98 (4-2-2) Š„ž‚Ý—Dæ“x‚Ì’iŠK”iTMIN_INTPRI‚Ì’ljC‚»‚̐ݒè•û–@
    99 
    100 ƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚݂ɑ΂·‚éCDEF_INH,CFG_INT‚̓Tƒ|[ƒg‚·‚éD
    101 ‚»‚Ì‚½‚߁CRL78ˆË‘¶•”‚Å CFG_INT ‚̃pƒ‰ƒ[ƒ^‚Æ‚µ‚ÄŽw’è‰Â”\‚ÈŠ„ž‚Ý—Dæ“x‚Ì’l‚́C
    102 RL78 ‚ªŽ‚Š„ž‚Ý—Dæ“xƒŒƒxƒ‹‚Ì’l‚͈̔͂ɑΉž‚µ‚Ä -1(=TMAX_INTPRI) ‚©‚ç -4 ‚Ü‚Å‚Ì
    103 ’l‚ðÝ’è‰Â”\‚Å‚ ‚é(¦2)(¦3)D‚½‚¾‚µCŒãq‚·‚é‚悤‚ɁCTMIN_INTPRI ‚Å’è‹`‚³‚ê‚é’l‚ɉž‚¶‚āC
    104 ƒJ[ƒlƒ‹ŠÇ—‹y‚уJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚݃nƒ“ƒhƒ‰‚ÉŽw’è‰Â”\‚È’l‚͈̔͂ª•Ï‰»‚·‚éD
    105 
    106 CFG_INT ‚Őݒ肳‚ꂽŠ„ž‚Ý—v‹ƒ‰ƒCƒ“‚ɃJ[ƒlƒ‹ŠÇ—‚ÌŠ„ž‚݃nƒ“ƒhƒ‰‚ð
    107 “o˜^‚·‚éê‡‚́CTMAX_INTPRI ˆÈ‰ºCTMIN_INTPRI ˆÈã‚Ì’l‚ðŽw’肵‚È‚¯‚ê‚΂Ȃç‚È‚¢D
    108 ‘¼•ûCƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚݃nƒ“ƒhƒ‰‚ð“o˜^‚·‚銄ž‚Ý—v‹ƒ‰ƒCƒ“‚ðÝ’è‚·‚éê‡‚́C
    109 TMIN_INTPRI ‚æ‚菬‚³‚­C-4 ˆÈã‚Ì’l‚ðŽw’肵‚È‚¯‚ê‚΂Ȃç‚È‚¢D
    110 
    111 (¦2) ƒJ[ƒlƒ‹‚ÌŠ„ž‚ݏˆ—ƒ‚ƒfƒ‹‚̏ã‚Å‚ÍŠ„ž‚Ý—Dæ“x‚ð -1 ‚©‚çŽn‚܂镉”‚Å
    112  @  •\Œ»‚·‚邱‚Æ‚É‚È‚Á‚Ä‚¢‚邽‚߁C•‰†‚ª‚‚¢‚Ä‚¢‚éD
    113 
    114 (¦3) TMIN_INTPRI ‚ð -4 ‚É‚µ‚½ê‡CCFG_INT ‚Å—Dæ“x -4 ‚ɐݒ肵‚½Š„ž‚Ý—vˆö‚́C
    115 CPUƒƒbƒNó‘Ô‚É‚µ‚È‚¢ŒÀ‚艽d‚É‚à‘½dŠ„ž‚Ý‚ª‰Â”\‚ƂȂ邽‚߁C’ˆÓ‚ª•K—v‚Å‚ ‚éD
    116 
    117 (4-2-3) ƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚Ý
    118 
    119 RL78ˆË‘¶•”‚ł́CƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚Ý‚ðƒTƒ|[ƒg‚µ‚Ä‚¢‚éD
    120 
    121 TMIN_INTPRI ‚æ‚荂‚¢(”’l‚Æ‚µ‚Ä‚Í‚æ‚菬‚³‚¢)Š„ž‚Ý—Dæ“x‚ɐݒ肳‚ꂽ
    122 Š„ž‚Ý—v‹ƒ‰ƒCƒ“‚ÌŠ„ž‚݂́CƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚Ý‚Æ‚µ‚Ä—p‚¢‚邱‚Æ‚ª
    123 ‰Â”\‚Å‚ ‚éDƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚Ý‚ÍOSŽÀs’†‚à‹ÖŽ~‚ɂȂ邱‚Æ‚Í‚È‚­
    124 iŒµ–§‚É‚ÍŠ„ž‚݂̏oŒû‚Å‚²‚­’Z‚¢‹æŠÔ‹ÖŽ~‚³‚ê‚éjCŠ„ž‚Ý”­¶Žž‚́C
    125 ƒJ[ƒlƒ‹‚̃R[ƒh‚ðŒo—R‚¹‚¸‚ɌĂяo‚³‚ê‚éD
    126 
    127 TMIN_INTPRI ‚̓J[ƒlƒ‹ŠÇ—‚ÌŠ„ž‚݂ɐݒ肷‚邱‚Æ‚Ì‚Å‚«‚銄ž‚Ý—Dæ“x‚̍ō‚’l
    128 (’l‚Æ‚µ‚Ă͍ŏ¬’l)‚ð’è‹`‚µ‚½ƒ}ƒNƒ‚ŁCarch/m16c_ncxx/prc_kernel.h ‚Å
    129 ’è‹`‚³‚ê‚Ä‚¢‚éDŠù’è‚ł́C-3‚Æ‚È‚Á‚Ä‚¢‚éD‚±‚Ì’l‚̓^[ƒQƒbƒgˆË‘¶•”‚ŏ㏑‚«‚ª‰Â”\‚Å‚ ‚éD
    130 
    131 (4-2-4) ƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚݂̐ݒè•û–@
    132 
    133 CFG_INT, DEF_INH ‚ð—p‚¢‚ăJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚݃nƒ“ƒhƒ‰‚ð“o˜^‚·‚éê‡‚̐§–ñ‚́C
    134 (1) DEF_INH ‚Å“o˜^‚·‚銄ž‚݃nƒ“ƒhƒ‰‚Ì‘®«‚Æ‚µ‚Ä TA_NONKERNEL ‚ðŽw’è‚·‚邱‚ƁC
    135 ‹y‚сC(2) ƒnƒ“ƒhƒ‰“o˜^æ‚ÌŠ„ž‚Ý—v‹ƒ‰ƒCƒ“‚ª‚à‚Š„ž‚Ý—Dæ“x‚́C
    136 CFG_INT ‚É‚æ‚è TMIN_INTPRI ‚æ‚荂‚­ (’l‚Æ‚µ‚Ă͏¬‚³‚¢’l)‚ɐݒ肷‚邱‚ƁC
    137 ‚Å‚ ‚éD
    138 
    139 (4-2-5) ƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚݃nƒ“ƒhƒ‰‚Ì‹Lq•û–@
    140 
    141 ƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚݃nƒ“ƒhƒ‰‚́CˆÈ‰º‚̂悤‚Ɉø”C–ß‚è’l‚ª‹¤‚É void ‚̊֐”
    142 ‚Æ‚µ‚ÄŽÀ‘•‚·‚邱‚ƁD
     7(1) 対応しているターゲットシステムの種類・構成
     8
     9RL78プロセッサ依存部(以下,RL78依存部)は,ルネサスエレクトロニクス製 RL78ファミリ
     10のプロセッサを主なターゲットとする.RL78ファミリは,いくつかのグループ,
     11そしてまたそのグループの中に,様々な型番で表現されるプロセッサのバリエーションが
     12存在している.
     13
     14ただし,本プロセッサ依存部において,現状では,サポートするターゲットボードとの関係から,
     15RL78/G13 に関する定義のみを用意している.
     16
     17
     18(2) プロセッサ依存部のファイル構成
     19
     20リアルタイムOSカーネルのプロセッサ依存部として実装する部分のみを考えた場合,
     21RL78依存部の定義は,大抵の場合,全てのプロセッサに共通する部分と,
     22プロセッサの型番で異なる部分(※1)とにコードを整理することが可能である.
     23異なる部分についてはプロセッサ型番に基づくファイルを用意している.
     24
     25※1 割込み番号,割込みハンドラ番号,及び,割込み制御レジスタの配置など
     26
     27以上より,プロセッサ依存部のコードは,以下の命名規則に従って用意された
     28ファイルへ,共通部分と可変部分とに分類して配置されている.
     29
     30prc_*  : 全てのプロセッサに共通する定義
     31rl78g13_* など:プロセッサ型番毎に異なる定義
     32
     33定義の配置はサポートするプロセッサを増やす毎に見直しが必要となるかもしれない.
     34もし現状のコード配置で不都合が生じる場合にはサポートメーリングリストまで
     35ご連絡頂けると幸いである.
     36
     37
     38(3) 使用する開発環境と動作検証した条件
     39
     40コンパイル,及びビルド管理にはルネサスエレクトロニクス製ツールを用いる.
     41動作確認したバージョンはターゲット依存部のドキュメントに記載する.
     42
     43
     44(4) ターゲット定義事項の規定
     45
     46(4-1) データ型に関する規定
     47
     48TOPPERS共通データ型のうち,TOPPERS新世代カーネル統合仕様書(以下,統合仕様書)で
     49オプション扱いとされているデータ型を対象に,ターゲット依存部でのサポート状況について
     50記述する.これらの定義は arch/ca78k0r/tool_stddef.h で定義されている
     51
     52【整数型】
     53
     54・サポート
     55        int8_t          符号付き8ビット整数(オプション,C99準拠)
     56        uint8_t         符号無し8ビット整数(オプション,C99準拠)
     57        float32_t       IEEE754準拠の32ビット単精度浮動小数点数(オプション)
     58
     59        このうち,float32_t は,IEEE754準拠の単精度浮動小数点数である.
     60
     61・未サポート
     62        int64_t         符号付き64ビット整数(オプション,C99準拠)
     63        uint64_t        符号無し64ビット整数(オプション,C99準拠)
     64        double64_t      IEEE754準拠の64ビット倍精度浮動小数点数(オプション)
     65        int128_t        符号付き128ビット整数(オプション,C99準拠)
     66        uint128_t       符号無し128ビット整数(オプション,C99準拠)
     67
     68【最大値,最小値の定数】
     69
     70・サポート
     71        INT8_MAX                        int8_tに格納できる最大値(オプション,C99準拠)
     72        INT8_MIN                        int8_tに格納できる最小値(オプション,C99準拠)
     73        UINT8_MAX                       uint8_tに格納できる最大値(オプション,C99準拠)
     74        FLOAT32_MIN                     float32_tに格納できる最小の正規化された正の浮動小数点数(オプション)
     75        FLOAT32_MAX                     float32_tに格納できる表現可能な最大の有限浮動小数点数(オプション)
     76
     77・未サポート
     78        INT64_MAX                       int64_tに格納できる最大値(オプション,C99準拠)
     79        INT64_MIN                       int64_tに格納できる最小値(オプション,C99準拠)
     80        UINT64_MAX                      uint64_tに格納できる最大値(オプション,C99準拠)
     81        DOUBLE64_MIN            double64_tに格納できる最小の正規化された正の浮動小数点数(オプション)
     82        DOUBLE64_MAX            double64_tに格納できる表現可能な最大の有限浮動小数点数(オプション)
     83        INT128_MAX                      int128_tに格納できる最大値(オプション,C99準拠)
     84        INT128_MIN                      int128_tに格納できる最小値(オプション,C99準拠)
     85        UINT128_MAX                     uint128_tに格納できる最大値(オプション,C99準拠)
     86
     87(4-2) 割込み処理に関する規定
     88
     89(4-2-1) 割込みハンドラ番号と割込み番号の割当て,両者の対応
     90
     91割込みハンドラ番号(inhno)と割込み番号(intno)は,共にデフォルトプライオリティの値を用いる.
     92両者は基本的に同じ番号が1対1に対応する.従って使用可能な全ての割込み番号に対して
     93割込みサービスルーチン(ISR)を登録可能である.
     94割込み番号,割込みハンドラ番号は <プロセッサ名>.h ファイルで定義している.
     95(例えば rl78g13.h など)
     96
     97(4-2-2) 割込み優先度の段階数(TMIN_INTPRIの値),その設定方法
     98
     99カーネル管理外の割込みに対する,DEF_INH,CFG_INTはサポートする.
     100そのため,RL78依存部で CFG_INT のパラメータとして指定可能な割込み優先度の値は,
     101RL78 が持つ割込み優先度レベルの値の範囲に対応して -1(=TMAX_INTPRI) から -4 までの
     102値を設定可能である(※2)(※3).ただし,後述するように,TMIN_INTPRI で定義される値に応じて,
     103カーネル管理及びカーネル管理外の割込みハンドラに指定可能な値の範囲が変化する.
     104
     105CFG_INT で設定された割込み要求ラインにカーネル管理の割込みハンドラを
     106登録する場合は,TMAX_INTPRI 以下,TMIN_INTPRI 以上の値を指定しなければならない.
     107他方,カーネル管理外の割込みハンドラを登録する割込み要求ラインを設定する場合は,
     108TMIN_INTPRI より小さく,-4 以上の値を指定しなければならない.
     109
     110(※2) カーネルの割込み処理モデルの上では割込み優先度を -1 から始まる負数で
     111    表現することになっているため,負号がついている.
     112
     113(※3) TMIN_INTPRI を -4 にした場合,CFG_INT で優先度 -4 に設定した割込み要因は,
     114CPUロック状態にしない限り何重にも多重割込みが可能となるため,注意が必要である.
     115
     116(4-2-3) カーネル管理外の割込み
     117
     118RL78依存部では,カーネル管理外の割込みをサポートしている.
     119
     120TMIN_INTPRI より高い(数値としてはより小さい)割込み優先度に設定された
     121割込み要求ラインの割込みは,カーネル管理外の割込みとして用いることが
     122可能である.カーネル管理外の割込みはOS実行中も禁止になることはなく
     123(厳密には割込みの出口でごく短い区間禁止される),割込み発生時は,
     124カーネルのコードを経由せずに呼び出される.
     125
     126TMIN_INTPRI はカーネル管理の割込みに設定することのできる割込み優先度の最高値
     127(値としては最小値)を定義したマクロで,arch/m16c_ncxx/prc_kernel.h で
     128定義されている.既定では,-3となっている.この値はターゲット依存部で上書きが可能である.
     129
     130(4-2-4) カーネル管理外の割込みの設定方法
     131
     132CFG_INT, DEF_INH を用いてカーネル管理外の割込みハンドラを登録する場合の制約は,
     133(1) DEF_INH で登録する割込みハンドラの属性として TA_NONKERNEL を指定すること,
     134及び,(2) ハンドラ登録先の割込み要求ラインがもつ割込み優先度は,
     135CFG_INT により TMIN_INTPRI より高く (値としては小さい値)に設定すること,
     136である.
     137
     138(4-2-5) カーネル管理外の割込みハンドラの記述方法
     139
     140カーネル管理外の割込みハンドラは,以下のように引数,戻り値が共に void の関数
     141として実装すること.
    143142
    144143void
    145144interrupt_handler (void)
    146145{
    147         /* ƒnƒ“ƒhƒ‰‚Ì“à—e */
     146        /* ハンドラの内容 */
    148147}
    149148
    150 (4-2-6) CFG_INT ‚Ń^[ƒQƒbƒg“ÆŽ©‚ÉŽg—p‚Å‚«‚銄ž‚Ý‘®«
    151 
    152 INTŠ„ž‚Ý‚ÉŠÖ‚µ‚Ă̂݁CŠ„ž‚Ý—v‹ƒ‰ƒCƒ“‚̃gƒŠƒKƒ‚[ƒh‚̐ݒè‚ðƒTƒ|[ƒg‚·‚éD
    153 Ý’è‚Å‚«‚é‚̂́CˆÈ‰º‚Ì‚¢‚¸‚ê‚©‚Å‚ ‚éD
    154         Eƒ|ƒWƒeƒBƒuƒGƒbƒW(ƒgƒŠƒKŠ„ž‚Ý)FTA_POSEDGE
    155         EƒlƒKƒeƒBƒuƒGƒbƒW(ƒgƒŠƒKŠ„ž‚Ý)FTA_NEGEDGE
    156         E—¼ƒGƒbƒW(ƒgƒŠƒKŠ„ž‚Ý)FTA_BOTHEDGE
    157 
    158 (4-2-7) dis_int‚Æena_int‚̃Tƒ|[ƒg‚Ì—L–³C‚»‚̐§ŒÀŽ–€
    159 
    160 RL78ˆË‘¶•”‚Å‚Í dis_int ‹y‚Ñ ena_int ‚ðƒTƒ|[ƒg‚·‚éD§ŒÀŽ–€‚Í“Á‚É‚È‚¢D
    161 
    162 TOPPERSŠ„ž‚ݏˆ—ƒ‚ƒfƒ‹‚É‚¨‚¯‚銄ž‚Ý—v‹‹ÖŽ~ƒtƒ‰ƒO‚Í
    163 RL78ƒvƒƒZƒbƒT‚ÌŠ„ž‚݃}ƒXƒNEƒtƒ‰ƒOEƒŒƒWƒXƒ^‚ª‘Ήž‚·‚éD
    164 
    165 (4-2-8) ‘½dŠ„ž‚݂̃Tƒ|[ƒg
    166 
    167 ‘½dŠ„ž‚Ý‚ð‹–‰Â‚·‚éD‚½‚¾‚µCƒJ[ƒlƒ‹ŠÇ—ŠO‚ÌŠ„ž‚݂̏ꍇCŠ„ž‚݃nƒ“ƒhƒ‰‚Ì’†‚Å
    168 PSWƒŒƒWƒXƒ^‚ÌIEƒrƒbƒg‚𖾎¦“I‚ɃZƒbƒg‚µCŠ„ž‚Ý‹–‰Â‚É‚µ‚È‚¯‚ê‚Α½dŠ„ž‚Ý‚ª
    169 —LŒø‚Æ‚È‚ç‚È‚¢‚½‚߁C’ˆÓ‚ª•K—v‚Å‚ ‚éD
    170 
    171 ‚Ü‚½ TMIN_INTPRI==-4 ‚̏ꍇCCFG_INT ‚Å -4 ‚ɐݒ肵‚½Š„ž‚݂́C
    172 CPUƒƒbƒN‰ðœó‘Ô‚É‚¨‚¢‚Ä“¯‚¶—Dæ“x -4 ‚ÌŠ„ž‚ݏˆ—‚ªŽÀs’†‚Å‚à
    173 ‘½d‚ÉŠ„ž‚Ý‚ªŽó‚¯•t‚¯‚ç‚ê‚éD‚±‚ê‚ÍRL78‚̃vƒƒZƒbƒT‚ÌŽd—l‚É‚æ‚é‚à‚̂ŁC
    174 PSW‚ÌIEƒrƒbƒg‚ª1‚Å‚ ‚éŒÀ‚èC(ƒvƒƒZƒbƒT“à•”•\Œ»‚É‚¨‚¯‚é)ƒŒƒxƒ‹0‚ÌŠ„ž‚Ý
    175 (Š„ž‚ݏˆ—ƒ‚ƒfƒ‹‚Å‚Í—Dæ“x-4‚ÌŠ„ž‚Ý)‚́CPSW‚ÌISP‚ðŽg—p‚µ‚½
    176 ƒŒƒxƒ‹‚É‚æ‚銄ž‚݂̃}ƒXƒN‚ðs‚¤‚±‚Æ‚ª‚Å‚«‚È‚¢D
    177 
    178 Š„ž‚Ý—Dæ“x-4 ‚̃J[ƒlƒ‹ŠÇ—‚ÌŠ„ž‚݃nƒ“ƒhƒ‰‚ÍCPUƒƒbƒN‰ðœó‘Ô‚Å
    179 ‹N“®‚³‚ê‚邽‚߁C’ˆÓ‚ª•K—v‚Å‚ ‚éD
    180 
    181 (4-2-9) Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“‚àŠ„ž‚݃nƒ“ƒhƒ‰‚à“o˜^‚µ‚Ä‚¢‚È‚¢Š„ž‚Ý—v‹
    182 
    183 ‚ ‚銄ž‚Ý—v‹ƒ‰ƒCƒ“‚ÅŠ„ž‚Ý—v‹‚ðŽó‚¯•t‚¯‚½‚ªC‚»‚̃‰ƒCƒ“‚ÉŠ„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“‹y‚Ñ
    184 Š„ž‚݃nƒ“ƒhƒ‰‚Ì‚Ç‚¿‚ç‚à“o˜^‚µ‚Ä‚¢‚È‚¢ê‡C_unused_interrupt (prc_support.asm) ‚Ö
    185 ƒWƒƒƒ“ƒv‚·‚é‚悤‚ɃRƒ“ƒtƒBƒMƒ
    186 ƒŒ[ƒ^‚ªŠ„ž‚݃xƒNƒ^‚𐶐¬‚·‚éD‚»‚µ‚āC
    187 ‚»‚±‚©‚瑦À‚ɃŠƒ^[ƒ“‚·‚é‚悤‚É‚È‚Á‚Ä‚¢‚éD
    188 
    189 
    190 (4-3) CPU—áŠOˆ—‚ÉŠÖ‚·‚é‹K’è
    191 
    192 (4-3-1) CPU—áŠOƒnƒ“ƒhƒ‰”ԍ†
    193 
    194 RL78 ˆË‘¶•”‚Å‚ÍBRK–½—ß‚É‚æ‚éƒ\ƒtƒgƒEƒFƒAŠ„ž‚Ý‚ðCPU—áŠO‚Æ‚µ‚Ĉµ‚¤D
    195 CPU—áŠOƒnƒ“ƒhƒ‰”ԍ†‚Æ‚µ‚Ä0 ‚ðŠ„‚èU‚邱‚Æ‚É‚·‚éD
    196 
    197 ŠeCPU—áŠO‚ɑ΂·‚é CPU—áŠOƒnƒ“ƒhƒ‰”ԍ†‚͈ȉº‚Ì’Ê‚èD
    198 ‚±‚ê‚ç‚Í <ƒvƒƒZƒbƒT–¼>.h ‚Å’è‹`‚³‚ê‚Ä‚¢‚éD
    199 
    200                 —áŠO        —áŠO”ԍ†
    201 #define EXCNO_BRK       0       /* ƒ\ƒtƒgƒEƒFƒAƒxƒNƒ^Š„ž‚Ý–½—ß */
    202 
    203 
    204 (4-3-2) ƒnƒ“ƒhƒ‰‚ð“o˜^‚µ‚Ä‚¢‚È‚¢CPU—áŠO‚ª”­¶‚µ‚½‚Æ‚«
    205 
    206 ”­¶‚µ‚½CPU—áŠO‚ɑ΂µ‚āCCPU—áŠOƒnƒ“ƒhƒ‰‚ª“o˜^‚³‚ê‚Ä‚¢‚È‚¢ê‡C
    207 _unused_interrupt (prc_support.asm) ‚ÖƒWƒƒƒ“ƒv‚·‚é‚悤‚ɃRƒ“ƒtƒBƒMƒ
    208 ƒŒ[ƒ^‚ª
    209 Š„ž‚݃xƒNƒ^‚𐶐¬‚·‚éD‚»‚µ‚āC‚»‚±‚©‚瑦À‚ɃŠƒ^[ƒ“‚·‚éD
    210 
    211 (4-3-3) ƒ\ƒtƒgƒEƒFƒAŠ„ž‚݂̈µ‚¢
    212 
    213 ƒ\ƒtƒgƒEƒFƒAŠ„ž‚݂ɑ΂·‚éƒnƒ“ƒhƒ‰‚Í DEF_EXC ‚ŌĂяo‚·‚±‚Æ‚Í‚Å‚«‚È‚¢D
    214 ˆê•ûCDEF_INH ‚ð—p‚¢‚Čďo‚µ‰Â”\‚Å‚ ‚邪Cƒ\ƒtƒgƒEƒFƒAŠ„ž‚Ý‚ÍŒµ–§‚É‚Í
    215 CPU—áŠO‚É‘®‚·‚é‚à‚Ì‚Å‚ ‚èC‚µ‚©‚àƒmƒ“ƒ}ƒXƒJƒuƒ‹‚Å‚ ‚邽‚߁C
    216 ƒVƒXƒeƒ€ƒR[ƒ‹‚ðŒÄ‚яo‚·‚Ȃǂ̒ʏí‚ÌŠ„ž‚݃nƒ“ƒhƒ‰‚Æ“¯—l‚ÌŽg—p‚Í”ð‚¯‚½
    217 •û‚ª–³“ï‚Å‚ ‚éD
    218 
    219 
    220 (4-4) CPUƒƒbƒNEŠ„ž‚݃ƒbƒN
    221 
    222 Š„ž‚݃ƒbƒNó‘Ԃ́CPSWƒŒƒWƒXƒ^‚ÌIEƒrƒbƒg‚É‚æ‚èŽÀŒ»‚µ‚Ä‚¢‚éD
    223 IEƒrƒbƒg‚ª0‚Ì‚Æ‚«Š„ž‚݃ƒbƒNó‘ԁC1‚Ì‚Æ‚«Š„ž‚݃ƒbƒN‰ðœó‘Ô‚Æ‚·‚éD
    224 
    225 ƒJ[ƒlƒ‹‚ÌCPUƒƒbƒNó‘Ԃ́CTMIN_INTPRI ‚Å’è‹`‚·‚é’l‚É‚æ‚èˆÙ‚È‚éD
    226 
    227 (4-4-1) TMIN_INTPRI ‚ª -4 ‚̏ꍇ
    228 
    229 CPUƒƒbƒNó‘Ԃ́CPSWƒŒƒWƒXƒ^‚ÌIEƒrƒbƒg‚É‚æ‚èŽÀŒ»‚·‚éD
    230 IEƒrƒbƒg‚ª0‚Ì‚Æ‚«CPUƒƒbƒNó‘ԁC1‚Ì‚Æ‚«CPUƒƒbƒN‰ðœó‘Ô‚Æ‚·‚éD
    231 ‚±‚̏ꍇCCPUƒƒbƒN‚ÆŠ„ž‚݃ƒbƒN‚Í“¯‚¶‚Å‚ ‚éD
    232 
    233 (4-4-2) TMIN_INTPRI ‚ª -1 ˆÈã -3 ˆÈ‰º‚̏ꍇ
    234 
    235 PSW‚̃Cƒ“ƒT[ƒrƒXEƒvƒ‰ƒCƒIƒŠƒeƒBƒtƒ‰ƒO(ISP{1,0})‚Ì’l‚ð
    236 (-TMIN_INTPRI+3) ‚ɐݒ肷‚邱‚Æ‚ÅŽÀŒ»‚·‚éD
    237 —Ⴆ‚Î -3 ‚̏ꍇCPSW ƒŒƒWƒXƒ^‚Ì ISP{1,0} ‚ª (0,0) ‚ɐݒ肳‚ê‚éD
    238 
    239 RL78 ‚ł́CISP{1,0} ‚ɐݒ肵‚½’luˆÈã(’l‚Æ‚µ‚Ă͏¬)v‚Ì—Dæ‡ˆÊ‚ðŽ‚ÂŠ„ž‚Ý‚ª
    240 u‹–‰Âv‚³‚ê‚éC‚Æ‚¢‚¤Žd—l‚É‚È‚Á‚Ä‚¢‚éD‚µ‚½‚ª‚Á‚āCƒ}ƒXƒN‚µ‚½‚¢ƒŒƒxƒ‹‚æ‚è
    241 ˆê’i‚‚¢’l‚ðƒZƒbƒg‚·‚é•K—v‚ª‚ ‚éD
    242 
    243 
    244 (4-5) «”\•]‰¿—pƒVƒXƒeƒ€Žž‚ÌŽQÆ‚ÉŠÖ‚·‚é‹K’è
    245 
    246 get_utm‚ðƒTƒ|[ƒg‚·‚é—\’è‚Å‚ ‚邪‚Ü‚¾ŽÀ‘•‚µ‚Ä‚¢‚È‚¢D
    247 
    248 
    249 (4-6) ƒVƒXƒeƒ€‰Šú‰»Žè‡‚Ì“à—e
    250 
    251 ƒXƒ^[ƒgƒAƒbƒvƒ‹[ƒ`ƒ“‚́CƒVƒXƒeƒ€ƒŠƒZƒbƒg’¼Œã‚ɌĂяo‚³‚êCŽÀs‚ðŠJŽn‚·‚éD
    252 ‚»‚̍ۂ̃vƒƒZƒbƒTó‘Ԃ͈ȉº‚ð‘O’ñ‚Æ‚µ‚Ä‚¢‚éD
    253         ESP, MAA ‚Í–¢‰Šú‰»
    254         EƒŒƒWƒXƒ^ƒoƒ“ƒN‚Í RB0
    255         EPSWƒŒƒWƒXƒ^‚ÌIEƒtƒ‰ƒO‚ª0 (Š„ž‚݃ƒbƒNó‘Ô‚Æ“¯“™‚̏ó‘Ô)
    256         EPSWƒŒƒWƒXƒ^‚ÌISP=(1,1)
    257         EƒVƒXƒeƒ€ƒNƒƒbƒN‚Í–¢‰Šú‰»(“à•”ƒIƒVƒŒ[ƒ^“®ì 1MHz)
    258         Eƒƒ‚ƒŠ–¢‰Šú‰»(‚à‚µƒ\ƒtƒgƒEƒFƒAƒŠƒZƒbƒg‚ð“ÆŽ©‚ÉŽÀ‘•‚µ‚Ä‚¢‚ê‚Εێ‚³‚ê‚Ä‚¢‚é)
    259 
    260 ‚Ü‚¸CƒXƒ^[ƒgƒAƒbƒvƒ‹[ƒ`ƒ“‚Ì start (start.asm) ‚ªˆÈ‰º‚̏ˆ—‚ðs‚¤D
    261         ISP, MAA ‚̏‰Šú‰»
    262         ƒƒ‚ƒŠ‰Šú‰»
    263         sta_ker (startup.c) ƒR[ƒ‹
    264 ‚»‚µ‚āCtarget_initialize (target_config.c) ‚ɂăNƒƒbƒNÝ’肪s‚í‚ê‚éD
    265 
    266 ‚»‚ÌŒãCdispatcher (task.c) ‚ðŽÀs‚·‚é‘O‚É CPUƒƒbƒNó‘Ô‚©‚Š„ž‚݃ƒbƒN‰ðœó‘Ô‚É
    267 ‚µ‚Ä‚¨‚­•K—v‚ª‚ ‚邽‚߁Cstart_dispatch (prc_support.asm)‚É‚¨‚¢‚Ä
    268 PSW ƒŒƒWƒXƒ^‚Ì ISP ‹y‚Ñ IEƒrƒbƒg‚ðCˆÈ‰º‚Ì’l‚ɃZƒbƒg‚·‚éD
    269 
    270 (a) TMIN_INTPRI ‚ª -1 ˆÈ‰º‚©‚ -3 ˆÈã‚̏ꍇ
    271         IPL=-(TMIN_INTPRI)+3 ‚©‚CIEƒrƒbƒg=1
    272 
    273 (b) TMIN_INTPRI==-4‚̏ꍇ
    274         IPL=3 ‚©‚CIEƒrƒbƒg=0
    275 
    276 ‚³‚ç‚ɁCdispatcher ‚Í–³ŒÀƒ‹[ƒv‚ŃŠƒ^[ƒ“‚µ‚È‚¢‚½‚߁CƒWƒƒƒ“ƒv‘O‚É
    277 start_dispatch ‚ŃXƒ^ƒbƒN‚̏‰Šú‰»‚ðs‚Á‚Ä‚¢‚éD
    278 
    279 
    280 (4-7) ƒVƒXƒeƒ€I—¹Žè‡
    281 
    282 ƒVƒXƒeƒ€I—¹Žž‚Í call_exit_kernel (prc_support.asm) ‚ŃXƒ^ƒbƒN‚ð‰Šú‰»‚µC
    283 exit_kernel (startup.c) ‚ðŒÄ‚яo‚·D
    284 
    285 ‚»‚ÌŒãCtarget_exit (target_config.c) ‚Ń^[ƒQƒbƒgˆË‘¶‚̏I—¹‚ðs‚¤D
    286 ‹K’è‚Å‚Í–³ŒÀƒ‹[ƒv‚³‚¹‚é‚Ì‚Ý‚Å“Á‚ɉ½‚à‚µ‚Ä‚¢‚È‚¢D
    287 ‚à‚µCƒ^[ƒQƒbƒgŒÅ—L‚̏I—¹ˆ—‚ðs‚¤•K—v‚ª‚ ‚éê‡Ctarget_exit ‚à‚µ‚­‚Í
    288 ‚»‚±‚©‚çŒÄ‚яo‚³‚ê‚éŠÖ”‚ŏˆ—‚ðŽÀŽ{‚·‚éD
    289 
    290 
    291 (5) ƒ^ƒCƒ}ƒhƒ‰ƒCƒoŠÖ˜A‚̏î•ñ
    292 
    293 Å¬ƒZƒbƒgƒJ[ƒlƒ‹‚ÌŠg’£‹@”\‚Æ‚µ‚ÄŽüŠúƒnƒ“ƒhƒ‰‹y‚уAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‚ª
    294 —pˆÓ‚³‚ê‚Ä‚¢‚éD‚±‚ê‚ç‚ðŽg—p‚·‚邽‚߂ɂ̓^ƒCƒ€ƒeƒBƒbƒN‚ð‹Ÿ‹‹‚·‚é
    295 ƒ^ƒCƒ}ƒhƒ‰ƒCƒo‚ðƒ^[ƒQƒbƒg‚Å—pˆÓ‚·‚é•K—v‚ª‚ ‚éD
    296 
    297 
    298 (6) §ŒÀŽ–€
    299 
    300 EƒJ[ƒlƒ‹‚̃Rƒ“ƒtƒBƒMƒ
    301 ƒŒ[ƒVƒ‡ƒ“
    302         ƒRƒ“ƒtƒBƒMƒ
    303 ƒŒ[ƒVƒ‡ƒ“‚̃pƒX3iƒrƒ‹ƒhŒã‚̍\¬ƒ`ƒFƒbƒNj‚͍s‚Á‚Ä‚¢‚È‚¢B
    304         ‚»‚Ì‚½‚߁Cƒ^ƒXƒNCŠ„ž‚݃nƒ“ƒhƒ‰CŠ„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“CCPU—áŠOƒnƒ“ƒhƒ‰C
    305         ‰Šú‰»ˆ—ƒ‹[ƒ`ƒ“CI—¹ˆ—ƒ‹[ƒ`ƒ“CŽüŠúƒnƒ“ƒhƒ‰CƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‚ª
    306         •s³‚Å‚ ‚éê‡‚ð E_PAR ƒGƒ‰[‚Æ‚µ‚ÄŒŸo‚·‚邱‚Æ‚ª‚Å‚«‚È‚¢D
    307         ]‚Á‚ăAƒvƒŠƒP[ƒVƒ‡ƒ“ŠJ”­Žž‚ɃeƒXƒg‚·‚邱‚Æ‚Å‚±‚ê‚ç‚ُ̈í‚ðŒŸo‚·‚é•K—v‚ª‚ ‚éD
    308 
    309 E•¶ŽšƒR[ƒhC‰üsƒR[ƒh‚ɂ‚¢‚Ä
    310         RL78ƒvƒƒZƒbƒTˆË‘¶•”‚Í Windowsã‚Å“®ì‚·‚éŠJ”­ŠÂ‹« CubeSuite+ ‚ð—p‚¢‚Ä
    311         ŠJ”­‚·‚邱‚Æ‚ð‘O’ñ‚Æ‚µ‚Ä‚¢‚éDTOPPERSƒvƒƒWƒFƒNƒg‚©‚çŒöŠJ‚³‚ê‚éƒ\[ƒXƒpƒbƒP[ƒW‚Í
    312         •¶ŽšƒR[ƒh‚ÍSJIS, ‰üsƒR[ƒh‚Í CR+LF ‚Æ‚µ‚ÄŒöŠJ‚µ‚Ä‚¢‚éD
    313 
    314 
    315 (7) ƒTƒ|[ƒgƒvƒƒZƒbƒT‚̒ljÁ
    316 
    317 (7-1) ƒvƒƒZƒbƒT–ˆ‚Ì’è‹`Ž–€
    318 
    319 ƒvƒƒZƒbƒT–ˆ‚ɈقȂ鎖€‚Æ‚µ‚Ă͈ȉº‚ÌŽ–€‚ª‚ ‚éD
    320         E—LŒø‚ÈŠ„ž‚ݔԍ†CŠ„ž‚݃nƒ“ƒhƒ‰”ԍ†CCPU—áŠOƒnƒ“ƒhƒ‰”ԍ†‚͈̔Í
    321         EŠ„ž‚ݔԍ†CŠ„ž‚݃nƒ“ƒhƒ‰”ԍ†CCPU—áŠOƒnƒ“ƒhƒ‰”ԍ†‚ÌŠ„‚è“–‚Ä
    322 
    323 ]‚Á‚āCƒTƒ|[ƒg‚·‚éƒvƒƒZƒbƒT‚ð’ljÁ‚·‚éê‡‚ɂ́C‚Ü‚¸ƒvƒƒZƒbƒT–¼‚ÉŠî‚­
    324 ŽŸ‚̃tƒ@ƒCƒ‹‚ð—pˆÓ‚·‚éD—Ⴆ‚Î RL78/G13 ‚̏ꍇC
     149(4-2-6) CFG_INT でターゲット独自に使用できる割込み属性
     150
     151INT割込みに関してのみ,割込み要求ラインのトリガモードの設定をサポートする.
     152設定できるのは,以下のいずれかである.
     153        ・ポジティブエッジ(トリガ割込み):TA_POSEDGE
     154        ・ネガティブエッジ(トリガ割込み):TA_NEGEDGE
     155        ・両エッジ(トリガ割込み):TA_BOTHEDGE
     156
     157(4-2-7) dis_intとena_intのサポートの有無,その制限事項
     158
     159RL78依存部では dis_int 及び ena_int をサポートする.制限事項は特にない.
     160
     161TOPPERS割込み処理モデルにおける割込み要求禁止フラグは
     162RL78プロセッサの割込みマスク・フラグ・レジスタが対応する.
     163
     164(4-2-8) 多重割込みのサポート
     165
     166多重割込みを許可する.ただし,カーネル管理外の割込みの場合,割込みハンドラの中で
     167PSWレジスタのIEビットを明示的にセットし,割込み許可にしなければ多重割込みが
     168有効とならないため,注意が必要である.
     169
     170また TMIN_INTPRI==-4 の場合,CFG_INT で -4 に設定した割込みは,
     171CPUロック解除状態において同じ優先度 -4 の割込み処理が実行中でも
     172多重に割込みが受け付けられる.これはRL78のプロセッサの仕様によるもので,
     173PSWのIEビットが1である限り,(プロセッサ内部表現における)レベル0の割込み
     174(割込み処理モデルでは優先度-4の割込み)は,PSWのISPを使用した
     175レベルによる割込みのマスクを行うことができない.
     176
     177割込み優先度-4 のカーネル管理の割込みハンドラはCPUロック解除状態で
     178起動されるため,注意が必要である.
     179
     180(4-2-9) 割込みサービスルーチンも割込みハンドラも登録していない割込み要求
     181
     182ある割込み要求ラインで割込み要求を受け付けたが,そのラインに割込みサービスルーチン及び
     183割込みハンドラのどちらも登録していない場合,_unused_interrupt (prc_support.asm) へ
     184ジャンプするようにコンフィギュレータが割込みベクタを生成する.そして,
     185そこから即座にリターンするようになっている.
     186
     187
     188(4-3) CPU例外処理に関する規定
     189
     190(4-3-1) CPU例外ハンドラ番号
     191
     192RL78 依存部ではBRK命令によるソフトウェア割込みをCPU例外として扱う.
     193CPU例外ハンドラ番号として0 を割り振ることにする.
     194
     195各CPU例外に対する CPU例外ハンドラ番号は以下の通り.
     196これらは <プロセッサ名>.h で定義されている.
     197
     198                例外        例外番号
     199#define EXCNO_BRK       0       /* ソフトウェアベクタ割込み命令 */
     200
     201
     202(4-3-2) ハンドラを登録していないCPU例外が発生したとき
     203
     204発生したCPU例外に対して,CPU例外ハンドラが登録されていない場合,
     205_unused_interrupt (prc_support.asm) へジャンプするようにコンフィギュレータが
     206割込みベクタを生成する.そして,そこから即座にリターンする.
     207
     208(4-3-3) ソフトウェア割込みの扱い
     209
     210ソフトウェア割込みに対するハンドラは DEF_EXC で呼び出すことはできない.
     211一方,DEF_INH を用いて呼出し可能であるが,ソフトウェア割込みは厳密には
     212CPU例外に属するものであり,しかもノンマスカブルであるため,
     213システムコールを呼び出すなどの通常の割込みハンドラと同様の使用は避けた
     214方が無難である.
     215
     216
     217(4-4) CPUロック・割込みロック
     218
     219割込みロック状態は,PSWレジスタのIEビットにより実現している.
     220IEビットが0のとき割込みロック状態,1のとき割込みロック解除状態とする.
     221
     222カーネルのCPUロック状態は,TMIN_INTPRI で定義する値により異なる.
     223
     224(4-4-1) TMIN_INTPRI が -4 の場合
     225
     226CPUロック状態は,PSWレジスタのIEビットにより実現する.
     227IEビットが0のときCPUロック状態,1のときCPUロック解除状態とする.
     228この場合,CPUロックと割込みロックは同じである.
     229
     230(4-4-2) TMIN_INTPRI が -1 以上 -3 以下の場合
     231
     232PSWのインサービス・プライオリティフラグ(ISP{1,0})の値を
     233(-TMIN_INTPRI+3) に設定することで実現する.
     234例えば -3 の場合,PSW レジスタの ISP{1,0} が (0,0) に設定される.
     235
     236RL78 では,ISP{1,0} に設定した値「以上(値としては小)」の優先順位を持つ割込みが
     237「許可」される,という仕様になっている.したがって,マスクしたいレベルより
     238一段高い値をセットする必要がある.
     239
     240
     241(4-5) 性能評価用システム時刻の参照に関する規定
     242
     243get_utmをサポートする予定であるがまだ実装していない.
     244
     245
     246(4-6) システム初期化手順の内容
     247
     248スタートアップルーチンは,システムリセット直後に呼び出され,実行を開始する.
     249その際のプロセッサ状態は以下を前提としている.
     250        ・SP, MAA は未初期化
     251        ・レジスタバンクは RB0
     252        ・PSWレジスタのIEフラグが0 (割込みロック状態と同等の状態)
     253        ・PSWレジスタのISP=(1,1)
     254        ・システムクロックは未初期化(内部オシレータ動作 1MHz)
     255        ・メモリ未初期化(もしソフトウェアリセットを独自に実装していれば保持されている)
     256
     257まず,スタートアップルーチンの start (start.asm) が以下の処理を行う.
     258        ISP, MAA の初期化
     259        メモリ初期化
     260        sta_ker (startup.c) コール
     261そして,target_initialize (target_config.c) にてクロック設定が行われる.
     262
     263その後,dispatcher (task.c) を実行する前に CPUロック状態かつ割込みロック解除状態に
     264しておく必要があるため,start_dispatch (prc_support.asm)において
     265PSW レジスタの ISP 及び IEビットを,以下の値にセットする.
     266
     267(a) TMIN_INTPRI が -1 以下かつ -3 以上の場合
     268        IPL=-(TMIN_INTPRI)+3 かつ,IEビット=1
     269
     270(b) TMIN_INTPRI==-4の場合
     271        IPL=3 かつ,IEビット=0
     272
     273さらに,dispatcher は無限ループでリターンしないため,ジャンプ前に
     274start_dispatch でスタックの初期化を行っている.
     275
     276
     277(4-7) システム終了手順
     278
     279システム終了時は call_exit_kernel (prc_support.asm) でスタックを初期化し,
     280exit_kernel (startup.c) を呼び出す.
     281
     282その後,target_exit (target_config.c) でターゲット依存の終了を行う.
     283規定では無限ループさせるのみで特に何もしていない.
     284もし,ターゲット固有の終了処理を行う必要がある場合,target_exit もしくは
     285そこから呼び出される関数で処理を実施する.
     286
     287
     288(5) タイマドライバ関連の情報
     289
     290最小セットカーネルの拡張機能として周期ハンドラ及びアラームハンドラが
     291用意されている.これらを使用するためにはタイムティックを供給する
     292タイマドライバをターゲットで用意する必要がある.
     293
     294
     295(6) 制限事項
     296
     297・カーネルのコンフィギュレーション
     298        コンフィギュレーションのパス3(ビルド後の構成チェック)は行っていない。
     299        そのため,タスク,割込みハンドラ,割込みサービスルーチン,CPU例外ハンドラ,
     300        初期化処理ルーチン,終了処理ルーチン,周期ハンドラ,アラームハンドラが
     301        不正である場合を E_PAR エラーとして検出することができない.
     302        従ってアプリケーション開発時にテストすることでこれらの異常を検出する必要がある.
     303
     304・文字コード,改行コードについて
     305        RL78プロセッサ依存部は Windows上で動作する開発環境 CubeSuite+ を用いて
     306        開発することを前提としている.TOPPERSプロジェクトから公開されるソースパッケージは
     307        文字コードはSJIS, 改行コードは CR+LF として公開している.
     308
     309
     310(7) サポートプロセッサの追加
     311
     312(7-1) プロセッサ毎の定義事項
     313
     314プロセッサ毎に異なる事項としては以下の事項がある.
     315        ・有効な割込み番号,割込みハンドラ番号,CPU例外ハンドラ番号の範囲
     316        ・割込み番号,割込みハンドラ番号,CPU例外ハンドラ番号の割り当て
     317
     318従って,サポートするプロセッサを追加する場合には,まずプロセッサ名に基づく
     319次のファイルを用意する.例えば RL78/G13 の場合,
    325320        rl78g13.h
    326                 Š„ž‚ݔԍ†CŠ„ž‚݃nƒ“ƒhƒ‰”ԍ†CCPU—áŠOƒnƒ“ƒhƒ‰”ԍ†‚Ì’è‹`
     321                割込み番号,割込みハンドラ番号,CPU例外ハンドラ番号の定義
    327322        rl78g13_config.h
    328                 Š„ž‚ݔԍ†‚̍őå’l(INTNO_MAX), —LŒø‚ÈŠ„ž‚ݔԍ†
     323                割込み番号の最大値(INTNO_MAX), 有効な割込み番号
    329324        rl78g13.tf
    330                 ECFG_INT, DEF_INH, ATT_ISR, DEF_EXC ‚È‚Ç‚ÅŽw’è‰Â”\‚ȃpƒ‰ƒ[ƒ^’l‚Ì’è‹`
    331                         E—LŒø‚ÈŠ„ž‚ݔԍ†CŠ„ž‚݃nƒ“ƒhƒ‰”ԍ†CCPU—áŠOƒnƒ“ƒhƒ‰”ԍ†‚͈̔͂̒è‹`
     325                ・CFG_INT, DEF_INH, ATT_ISR, DEF_EXC などで指定可能なパラメータ値の定義
     326                        ・有効な割込み番号,割込みハンドラ番号,CPU例外ハンドラ番号の範囲の定義
    332327                                $INTNO_VALID
    333328                                $INHNO_VALID
    334329                                $EXCNO_VALID
    335                         EŠ„ž‚ݔԍ†CŠ„ž‚݃nƒ“ƒhƒ‰”ԍ†CCPU—áŠOƒnƒ“ƒhƒ‰”ԍ†‚͈̔Í(–³Œø’l‚àŠÜ‚Þ)
     330                        ・割込み番号,割込みハンドラ番号,CPU例外ハンドラ番号の範囲(無効値も含む)
    336331                                $INTNO_RANGE
    337332                                $INHNO_RANGE
    338333                                $EXCNO_RANGE
    339334
    340 ‚»‚µ‚Ä‚±‚ê‚炪Cƒrƒ‹ƒh‰ß’ö‚ÅŽg—p‚³‚ê‚é‚悤‚ɁCƒ^[ƒQƒbƒgˆË‘¶•”‚̃tƒ@ƒCƒ‹‚©‚ç
    341 ‚±‚ê‚ç‚ðƒCƒ“ƒNƒ‹[ƒh‚·‚éD
    342         rl78g13_config.h ‚̏ꍇCtarget_config.h ‚©‚ç
    343         rl78g13.h ‚̏ꍇC<ƒ^[ƒQƒbƒg–¼Ì>.h ‚©‚ç
    344         rl78g13.tf ‚̏ꍇCƒ^[ƒQƒbƒgˆË‘¶•”‚ÌCFG—pƒeƒ“ƒvƒŒ[ƒgƒtƒ@ƒCƒ‹(target.tf) ‚©‚ç
    345                 Etarget.tf ‚ł́Cprc.tf ‚ðƒCƒ“ƒNƒ‹[ƒh‚·‚é‘O‚ɁCŽg—p‚·‚éƒ^[ƒQƒbƒgƒvƒƒZƒbƒT‚Ì
    346                 @CFG—pƒeƒ“ƒvƒŒ[ƒgƒtƒ@ƒCƒ‹(‚±‚̏ꍇCrl78g13.tf)‚ðƒCƒ“ƒNƒ‹[ƒh‚·‚邱‚ƁD
    347 
    348 ‚Ü‚½C‚±‚ê‚ç‚̃tƒ@ƒCƒ‹‚©‚çC‚»‚ꂼ‚ê‚̃tƒ@ƒCƒ‹‚ɑΉž‚·‚鋤’Ê•”•ª‚Ì
    349 ƒtƒ@ƒCƒ‹‚ðƒCƒ“ƒNƒ‹[ƒh‚·‚é
    350         rl78g13_config.h ‚̏ꍇCprc_config.h ‚ð
    351         rl78g13.tf ‚̏ꍇCprc.tf (M16Cƒtƒ@ƒ~ƒŠ‚Ì‘SƒvƒƒZƒbƒT‚É‹¤’Ê‚Ìtf)‚ð
    352 
    353 ã‹LˆÈŠO‚ɁCprc_ ‚Å’è‹`‚³‚ê‚Ä‚¢‚鎖€‚Ì’†‚ɁC‚±‚ê‚܂łƂ͈قȂé’è‹`‚ÌŽd•û‚ð
    354 ‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢‚à‚Ì‚ªo‚Ä‚­‚é‚©‚à‚µ‚ê‚È‚¢D‚»‚̏ꍇ‚́C’è‹`‚Ì”z’u‚ð
    355 •ÏX‚·‚é•K—v‚ª‚ ‚邽‚߁CƒTƒ|[ƒgƒ[ƒŠƒ“ƒOƒŠƒXƒg‚Ö•ñ’¸‚¯‚ê‚΍K‚¢‚Å‚ ‚éD
    356 •ñ’¸‚¢‚½ê‡CˆÈ~‚̃o[ƒWƒ‡ƒ“ƒAƒbƒv‚ɂđΉž‚·‚é—\’è‚Å‚ ‚éD
    357 
    358 
    359 ›•ÏX—š—ð
    360 2014/8/21  EV‹Kì¬
    361 2014/9/05  ETMIN_INTPRI ‚ª -4 ‚̏ꍇ‚É‚à‘Ήž‚µ‚½‚½‚߁CŠÖ˜A‰ÓŠ‚ð’Ç‹LD
    362 2014/10/14 ETMIN_INTPRI ‚ª -4 ‚̏ꍇ‚Ì‘½dŠ„ž‚݂ɂ‚¢‚Ä’ˆÓŽ–€‚ð’Ç‹L(4-2-2,4-2-8)D
    363            ETMIN_INTPRI ‚ð -4 ‚É‚µ‚½ê‡‚ɃAƒZƒ“ƒuƒ‰‚̃IƒvƒVƒ‡ƒ“‚ð•ÏX‚·‚é
    364            @•K—v‚ª‚È‚­‚È‚Á‚½‚½‚߁Cˆê•”‹LÚ‚ðíœD(4-4-1)
    365            EƒVƒXƒeƒ€‰Šú‰»Žè‡‚ł̏ˆ—“à—e‚ɂ‚¢‚Ä TMIN_INTPRI ‚ª -4 ‚̏ꍇ‚ð’ljÁ(4-6)D
    366 2014/10/15 E‘½dŠ„ž‚Ý‚Ì’ˆÓŽ–€‚ɂ‚¢‚ĈꕔC³(4-2-8)D
    367 2015/6/2   ESSP-1.3.0‘Ήž
    368 ˆÈã
     335そしてこれらが,ビルド過程で使用されるように,ターゲット依存部のファイルから
     336これらをインクルードする.
     337        rl78g13_config.h の場合,target_config.h から
     338        rl78g13.h の場合,<ターゲット名称>.h から
     339        rl78g13.tf の場合,ターゲット依存部のCFG用テンプレートファイル(target.tf) から
     340                ・target.tf では,prc.tf をインクルードする前に,使用するターゲットプロセッサの
     341                 CFG用テンプレートファイル(この場合,rl78g13.tf)をインクルードすること.
     342
     343また,これらのファイルから,それぞれのファイルに対応する共通部分の
     344ファイルをインクルードする
     345        rl78g13_config.h の場合,prc_config.h を
     346        rl78g13.tf の場合,prc.tf (M16Cファミリの全プロセッサに共通のtf)を
     347
     348上記以外に,prc_ で定義されている事項の中に,これまでとは異なる定義の仕方を
     349しなければならないものが出てくるかもしれない.その場合は,定義の配置を
     350変更する必要があるため,サポートメーリングリストへ報告頂ければ幸いである.
     351報告頂いた場合,以降のバージョンアップにて対応する予定である.
     352
     353
     354○変更履歴
     3552014/8/21  ・新規作成
     3562014/9/05  ・TMIN_INTPRI が -4 の場合にも対応したため,関連箇所を追記.
     3572014/10/14 ・TMIN_INTPRI が -4 の場合の多重割込みについて注意事項を追記(4-2-2,4-2-8).
     358           ・TMIN_INTPRI を -4 にした場合にアセンブラのオプションを変更する
     359            必要がなくなったため,一部記載を削除.(4-4-1)
     360           ・システム初期化手順での処理内容について TMIN_INTPRI が -4 の場合を追加(4-6).
     3612014/10/15 ・多重割込みの注意事項について一部修正(4-2-8).
     3622015/6/2   ・SSP-1.3.0対応
     363以上
  • ssp_qb_r5f100le_cs/trunk/arch/rl78_ca78k0r/rl78g13.h

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    77 *             Nagoya Municipal Industrial Research Institute, JAPAN
    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‰ü•ÏE
    11  *  Ä”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‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[ƒX
    14  *      ƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    15  *  (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg—p
    16  *      ‚Å‚«‚éŒ`‚ōĔ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—p
    22  *      ‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±‚Ɓ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‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹ŠQ
    30  *      ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD‚Ü‚½C
    31  *      –{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝—R‚ÉŠî‚Ã
    32  *      ‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
     9 *  上記著作権者は,以下の (1)〜(4) の条件を満たす場合に限り,本ソフトウェ
     10 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改変・
     11 *  再配布(以下,利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作権
     13 *      表示,この利用条件および下記の無保証規定が,そのままの形でソース
     14 *      コード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使用
     16 *      できる形で再配布する場合には,再配布に伴うドキュメント(利用者マ
     17 *      ニュアルなど)に,上記の著作権表示,この利用条件および下記の無保
     18 *      証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使用
     20 *      できない形で再配布する場合には,次のいずれかの条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著作
     22 *        権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに報
     24 *        告すること.
     25 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損害
     26 *      からも,上記著作権者およびTOPPERSプロジェクトを免責すること.また,
     27 *      本ソフトウェアのユーザまたはエンドユーザからのいかなる理由に基づ
     28 *      く請求からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
    3329 *
    34  *  –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨‚æ
    35  *  ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I‚ɑ΂·
    36  *  ‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p
    37  *  ‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»‚̐ӔC‚ð•‰
    38  *  ‚í‚È‚¢D
     30 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者およ
     31 *  びTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的に対す
     32 *  る適合性も含めて,いかなる保証も行わない.また,本ソフトウェアの利用
     33 *  により直接的または間接的に生じたいかなる損害に関しても,その責任を負
     34 *  わない.
    3935 *
    4036 */
    4137
    4238/*
    43  *  RL78/G13‚Ɉˑ¶‚·‚é’è‹`
     39 *  RL78/G13に依存する定義
    4440 */
    4541
     
    4945
    5046/*
    51  *  CPU—áŠOƒnƒ“ƒhƒ‰”ԍ†‚Ì’è‹`
    52  */
    53 #define EXCNO_BRK       0       /* ƒ\ƒtƒgƒEƒFƒAƒxƒNƒ^Š„ž‚Ý–½—ß */
    54 
    55 /*
    56  *  Š„ž‚ݔԍ†‚Ì’è‹`(ƒfƒtƒHƒ‹ƒgƒvƒ‰ƒCƒIƒŠƒeƒB‚Ì’l‚ðŠ„ž‚ݔԍ†‚Æ‚·‚é)
    57  */
    58 #define INTNO_INTWDTI           0       /* ƒEƒHƒbƒ`ƒhƒbƒOEƒ^ƒCƒ} */
    59 #define INTNO_INTLV1            1       /* “dˆ³ŒŸo */
    60 #define INTNO_INTP0             2       /* ’[Žq“ü—̓GƒbƒWŒŸo */
    61 #define INTNO_INTP1             3       /* ’[Žq“ü—̓GƒbƒWŒŸo */
    62 #define INTNO_INTP2             4       /* ’[Žq“ü—̓GƒbƒWŒŸo */
    63 #define INTNO_INTP3             5       /* ’[Žq“ü—̓GƒbƒWŒŸo */
    64 #define INTNO_INTP4             6       /* ’[Žq“ü—̓GƒbƒWŒŸo */
    65 #define INTNO_INTP5             7       /* ’[Žq“ü—̓GƒbƒWŒŸo */
    66 
    67 #define INTNO_INTST2            8       /* UART2 ‘—M‚Ì“]‘—Š®—¹Cƒoƒbƒtƒ@‹ó‚«Š„ž‚Ý */
    68 #define INTNO_INTCSI20          8       /* CSI20 ‚Ì“]‘—Š®—¹Cƒoƒbƒtƒ@‹ó‚«Š„ž‚Ý */
    69 #define INTNO_IIC20             8       /* IIC20 ‚Ì“]‘—Š®—¹ */
    70 
    71 #define INTNO_INTSR2            9       /* UART2 ŽóM‚Ì“]‘—Š®—¹ */
    72 #define INTNO_INTSCI21          9       /* CSI21 ‚Ì“]‘—Š®—¹ */
    73 #define INTNO_INTIIC21          9       /* IIC21 ‚Ì“]‘—Š®—¹ */
    74 
    75 #define INTNO_SRE2              10      /* UART2 ŽóM‚̒ʐMƒGƒ‰[”­¶ */
    76 #define INTNO_INTTM11H          10      /* ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹11‚̃JƒEƒ“ƒgŠ®—¹‚Ü‚½‚̓Lƒƒƒvƒ`ƒƒŠ®—¹(8ƒrƒbƒgƒ^ƒCƒ}“®ìŽž) */
    77 
    78 #define INTNO_INTDMA0           11      /* DMA0 ‚Ì“]‘—Š®—¹ */
    79 #define INTNO_INTDMA1           12      /* DMA1 ‚Ì“]‘—Š®—¹ */
    80 
    81 #define INTNO_INTST0            13      /* UART0 ‘—M‚Ì“]‘—Š®—¹Cƒoƒbƒtƒ@‹ó‚«Š„ž‚Ý */
    82 #define INTNO_INTCSI00          13      /* CSI00 ‚Ì“]‘—Š®—¹, ƒoƒbƒtƒ@‹ó‚«Š„ž‚Ý */
    83 #define INTNO_INTIIC00          13      /* IIC00 ‚Ì“]‘—Š®—¹ */
    84 
    85 #define INTNO_INTSR0            14      /* UART0 ŽóM‚Ì“]‘—Š®—¹Cƒoƒbƒtƒ@‹ó‚«Š„ž‚Ý */
    86 #define INTNO_INTCSI01          14      /* CSI01 ‚Ì“]‘—Š®—¹, ƒoƒbƒtƒ@‹ó‚«Š„ž‚Ý */
    87 #define INTNO_INTIIC01          14      /* IIC01 ‚Ì“]‘—Š®—¹ */
    88 
    89 #define INTNO_SRE0              15      /* UART0 ŽóM‚̒ʐMƒGƒ‰[”­¶ */
    90 #define INTNO_INTTM01H          15      /* ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹01‚̃JƒEƒ“ƒgŠ®—¹‚Ü‚½‚̓Lƒƒƒvƒ`ƒƒŠ®—¹(8ƒrƒbƒgƒ^ƒCƒ}“®ìŽž) */
    91 
    92 #define INTNO_INTST1            16      /* UART1 ‘—M‚Ì“]‘—Š®—¹Cƒoƒbƒtƒ@‹ó‚«Š„ž‚Ý */
    93 #define INTNO_INTCSI10          16      /* CSI10 ‚Ì“]‘—Š®—¹, ƒoƒbƒtƒ@‹ó‚«Š„ž‚Ý */
    94 #define INTNO_INTIIC10          16      /* IIC10 ‚Ì“]‘—Š®—¹ */
    95 
    96 #define INTNO_INTSR1            17      /* UART1 ŽóM‚Ì“]‘—Š®—¹Cƒoƒbƒtƒ@‹ó‚«Š„ž‚Ý */
    97 #define INTNO_INTCSI11          17      /* CSI11 ‚Ì“]‘—Š®—¹, ƒoƒbƒtƒ@‹ó‚«Š„ž‚Ý */
    98 #define INTNO_INTIIC11          17      /* IIC11 ‚Ì“]‘—Š®—¹ */
    99 
    100 #define INTNO_SRE1              18      /* UART1 ŽóM‚̒ʐMƒGƒ‰[”­¶ */
    101 #define INTNO_INTTM03H          18      /* ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹03‚̃JƒEƒ“ƒgŠ®—¹‚Ü‚½‚̓Lƒƒƒvƒ`ƒƒŠ®—¹(8ƒrƒbƒgƒ^ƒCƒ}“®ìŽž) */
    102 
    103 #define INTNO_INTIICA0          19      /* IICA0 ’ʐMŠ®—¹ */
    104 #define INTNO_INTTM00           20      /* ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹00‚̃JƒEƒ“ƒgŠ®—¹‚Ü‚½‚̓Lƒƒƒvƒ`ƒƒŠ®—¹ */
    105 #define INTNO_INTTM01           21      /* ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹01‚̃JƒEƒ“ƒgŠ®—¹‚Ü‚½‚̓Lƒƒƒvƒ`ƒƒŠ®—¹(16ƒrƒbƒg/‰ºˆÊ8ƒrƒbƒgƒ^ƒCƒ}“®ìŽž) */
    106 #define INTNO_INTTM02           22      /* ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹02‚̃JƒEƒ“ƒgŠ®—¹‚Ü‚½‚̓Lƒƒƒvƒ`ƒƒŠ®—¹ */
    107 #define INTNO_INTTM03           23      /* ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹03‚̃JƒEƒ“ƒgŠ®—¹‚Ü‚½‚̓Lƒƒƒvƒ`ƒƒŠ®—¹(16ƒrƒbƒg/‰ºˆÊ8ƒrƒbƒgƒ^ƒCƒ}“®ìŽž) */
    108 #define INTNO_INTAD             24      /* A/D•ÏŠ·Š®—¹ */
    109 #define INTNO_INTRTC            25      /* ƒŠƒAƒ‹ƒ^ƒCƒ€EƒNƒƒbƒN‚Ì’èŽüŠúM†/ƒAƒ‰[ƒ€ˆê’vŒŸo */
    110 #define INTNO_INTIT             26      /* 12ƒrƒbƒgEƒCƒ“ƒ^[ƒoƒ‹Eƒ^ƒCƒ}‚̃Cƒ“ƒ^[ƒoƒ‹M†ŒŸo */
    111 #define INTNO_INTKR             27      /* ƒL[EƒŠƒ^[ƒ“EM†ŒŸo */
    112 
    113 #define INTNO_INTST3            28      /* UART3 ‘—M‚Ì“]‘—Š®—¹Cƒoƒbƒtƒ@‹ó‚«Š„ž‚Ý */
    114 #define INTNO_INTCSI30          28      /* CSI30 ‚Ì“]‘—Š®—¹, ƒoƒbƒtƒ@‹ó‚«Š„ž‚Ý */
    115 #define INTNO_INTIIC30          28      /* IIC30 ‚Ì“]‘—Š®—¹ */
    116 
    117 #define INTNO_INTSR3            29      /* UART3 ŽóM‚Ì“]‘—Š®—¹Cƒoƒbƒtƒ@‹ó‚«Š„ž‚Ý */
    118 #define INTNO_INTCSI31          29      /* CSI31 ‚Ì“]‘—Š®—¹, ƒoƒbƒtƒ@‹ó‚«Š„ž‚Ý */
    119 #define INTNO_INTIIC31          29      /* IIC31 ‚Ì“]‘—Š®—¹ */
    120 
    121 #define INTNO_INTTM13           30      /* ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹13‚̃JƒEƒ“ƒgŠ®—¹‚Ü‚½‚̓Lƒƒƒvƒ`ƒƒŠ®—¹(16ƒrƒbƒg/‰ºˆÊ8ƒrƒbƒgƒ^ƒCƒ}“®ìŽž) */
    122 #define INTNO_INTTM04           31      /* ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹04‚̃JƒEƒ“ƒgŠ®—¹‚Ü‚½‚̓Lƒƒƒvƒ`ƒƒŠ®—¹ */
    123 #define INTNO_INTTM05           32      /* ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹05‚̃JƒEƒ“ƒgŠ®—¹‚Ü‚½‚̓Lƒƒƒvƒ`ƒƒŠ®—¹ */
    124 #define INTNO_INTTM06           33      /* ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹06‚̃JƒEƒ“ƒgŠ®—¹‚Ü‚½‚̓Lƒƒƒvƒ`ƒƒŠ®—¹ */
    125 #define INTNO_INTTM07           34      /* ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹07‚̃JƒEƒ“ƒgŠ®—¹‚Ü‚½‚̓Lƒƒƒvƒ`ƒƒŠ®—¹ */
    126 
    127 #define INTNO_INTP6             35      /* ’[Žq“ü—̓GƒbƒWŒŸo */
    128 #define INTNO_INTP7             36      /* ’[Žq“ü—̓GƒbƒWŒŸo */
    129 #define INTNO_INTP8             37      /* ’[Žq“ü—̓GƒbƒWŒŸo */
    130 #define INTNO_INTP9             38      /* ’[Žq“ü—̓GƒbƒWŒŸo */
    131 #define INTNO_INTP10            39      /* ’[Žq“ü—̓GƒbƒWŒŸo */
    132 #define INTNO_INTP11            40      /* ’[Žq“ü—̓GƒbƒWŒŸo */
    133 
    134 #define INTNO_INTTM10           41      /* ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹10‚̃JƒEƒ“ƒgŠ®—¹‚Ü‚½‚̓Lƒƒƒvƒ`ƒƒŠ®—¹ */
    135 #define INTNO_INTTM11           42      /* ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹11‚̃JƒEƒ“ƒgŠ®—¹‚Ü‚½‚̓Lƒƒƒvƒ`ƒƒŠ®—¹(16ƒrƒbƒg/‰ºˆÊ8ƒrƒbƒgƒ^ƒCƒ}“®ìŽž) */
    136 #define INTNO_INTTM12           43      /* ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹12‚̃JƒEƒ“ƒgŠ®—¹‚Ü‚½‚̓Lƒƒƒvƒ`ƒƒŠ®—¹ */
    137 
    138 #define INTNO_SRE3              44      /* UART3 ŽóM‚̒ʐMƒGƒ‰[”­¶ */
    139 #define INTNO_INTTM13H          44      /* ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹13‚̃JƒEƒ“ƒgŠ®—¹‚Ü‚½‚̓Lƒƒƒvƒ`ƒƒŠ®—¹(8ƒrƒbƒgƒ^ƒCƒ}“®ìŽž) */
    140 
    141 #define INTNO_INTMD             45      /* œŽZ–½—ߏI—¹/Ï˜a‰‰ŽZŒ‹‰Ê‚̃I[ƒo[ƒtƒ[”­¶ */
    142 #define INTNO_INTIICA1          46      /* IICA1 ’ʐMŠ®—¹ */
    143 #define INTNO_INTFL             47      /* —\–ñ */
    144 #define INTNO_INTDMA2           48      /* DMA2‚Ì“]‘—Š®—¹ */
    145 #define INTNO_INTDMA3           49      /* DMA3‚Ì“]‘—Š®—¹ */
    146 #define INTNO_INTTM14           50      /* ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹14‚̃JƒEƒ“ƒgŠ®—¹‚Ü‚½‚̓Lƒƒƒvƒ`ƒƒŠ®—¹ */
    147 #define INTNO_INTTM15           51      /* ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹15‚̃JƒEƒ“ƒgŠ®—¹‚Ü‚½‚̓Lƒƒƒvƒ`ƒƒŠ®—¹ */
    148 #define INTNO_INTTM16           52      /* ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹16‚̃JƒEƒ“ƒgŠ®—¹‚Ü‚½‚̓Lƒƒƒvƒ`ƒƒŠ®—¹ */
    149 #define INTNO_INTTM17           53      /* ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹17‚̃JƒEƒ“ƒgŠ®—¹‚Ü‚½‚̓Lƒƒƒvƒ`ƒƒŠ®—¹ */
    150 
    151 
    152 /*
    153  *  Š„ž‚݃nƒ“ƒhƒ‰”ԍ†‚Ì’è‹`
    154  */
    155 #define INHNO_INTWDTI           INTNO_INTWDTI           /* ƒEƒHƒbƒ`ƒhƒbƒOEƒ^ƒCƒ} */
    156 #define INHNO_INTLV1            INTNO_INTLV1            /* “dˆ³ŒŸo */
    157 #define INHNO_INTP0             INTNO_INTP0             /* ’[Žq“ü—̓GƒbƒWŒŸo */
    158 #define INHNO_INTP1             INTNO_INTP1             /* ’[Žq“ü—̓GƒbƒWŒŸo */
    159 #define INHNO_INTP2             INTNO_INTP2             /* ’[Žq“ü—̓GƒbƒWŒŸo */
    160 #define INHNO_INTP3             INTNO_INTP3             /* ’[Žq“ü—̓GƒbƒWŒŸo */
    161 #define INHNO_INTP4             INTNO_INTP4             /* ’[Žq“ü—̓GƒbƒWŒŸo */
    162 #define INHNO_INTP5             INTNO_INTP5             /* ’[Žq“ü—̓GƒbƒWŒŸo */
    163                        
    164 #define INHNO_INTST2            INTNO_INTST2            /* UART2 ‘—M‚Ì“]‘—Š®—¹Cƒoƒbƒtƒ@‹ó‚«Š„ž‚Ý */
    165 #define INHNO_INTCSI20          INTNO_INTCSI20          /* CSI20 ‚Ì“]‘—Š®—¹Cƒoƒbƒtƒ@‹ó‚«Š„ž‚Ý */
    166 #define INHNO_IIC20             INTNO_IIC20             /* IIC20 ‚Ì“]‘—Š®—¹ */
    167                        
    168 #define INHNO_INTSR2            INTNO_INTSR2            /* UART2 ŽóM‚Ì“]‘—Š®—¹ */
    169 #define INHNO_INTSCI21          INTNO_INTSCI21          /* CSI21 ‚Ì“]‘—Š®—¹ */
    170 #define INHNO_INTIIC21          INTNO_INTIIC21          /* IIC21 ‚Ì“]‘—Š®—¹ */
    171                        
    172 #define INHNO_SRE2              INTNO_SRE2              /* UART2 ŽóM‚̒ʐMƒGƒ‰[”­¶ */
    173 #define INHNO_INTTM11H          INTNO_INTTM11H          /* ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹11‚̃JƒEƒ“ƒgŠ®—¹‚Ü‚½‚̓Lƒƒƒvƒ`ƒƒŠ®—¹(8ƒrƒbƒgƒ^ƒCƒ}“®ìŽž) */
    174                        
    175 #define INHNO_INTDMA0           INTNO_INTDMA0           /* DMA0 ‚Ì“]‘—Š®—¹ */
    176 #define INHNO_INTDMA1           INTNO_INTDMA1           /* DMA1 ‚Ì“]‘—Š®—¹ */
    177                        
    178 #define INHNO_INTST0            INTNO_INTST0            /* UART0 ‘—M‚Ì“]‘—Š®—¹Cƒoƒbƒtƒ@‹ó‚«Š„ž‚Ý */
    179 #define INHNO_INTCSI00          INTNO_INTCSI00          /* CSI00 ‚Ì“]‘—Š®—¹, ƒoƒbƒtƒ@‹ó‚«Š„ž‚Ý */
    180 #define INHNO_INTIIC00          INTNO_INTIIC00          /* IIC00 ‚Ì“]‘—Š®—¹ */
    181                        
    182 #define INHNO_INTSR0            INTNO_INTSR0            /* UART0 ŽóM‚Ì“]‘—Š®—¹Cƒoƒbƒtƒ@‹ó‚«Š„ž‚Ý */
    183 #define INHNO_INTCSI01          INTNO_INTCSI01          /* CSI01 ‚Ì“]‘—Š®—¹, ƒoƒbƒtƒ@‹ó‚«Š„ž‚Ý */
    184 #define INHNO_INTIIC01          INTNO_INTIIC01          /* IIC01 ‚Ì“]‘—Š®—¹ */
    185                        
    186 #define INHNO_SRE0              INTNO_SRE0              /* UART0 ŽóM‚̒ʐMƒGƒ‰[”­¶ */
    187 #define INHNO_INTTM01H          INTNO_INTTM01H          /* ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹01‚̃JƒEƒ“ƒgŠ®—¹‚Ü‚½‚̓Lƒƒƒvƒ`ƒƒŠ®—¹(8ƒrƒbƒgƒ^ƒCƒ}“®ìŽž) */
    188                        
    189 #define INHNO_INTST1            INTNO_INTST1            /* UART1 ‘—M‚Ì“]‘—Š®—¹Cƒoƒbƒtƒ@‹ó‚«Š„ž‚Ý */
    190 #define INHNO_INTCSI10          INTNO_INTCSI10          /* CSI10 ‚Ì“]‘—Š®—¹, ƒoƒbƒtƒ@‹ó‚«Š„ž‚Ý */
    191 #define INHNO_INTIIC10          INTNO_INTIIC10          /* IIC10 ‚Ì“]‘—Š®—¹ */
    192                        
    193 #define INHNO_INTSR1            INTNO_INTSR1            /* UART1 ŽóM‚Ì“]‘—Š®—¹Cƒoƒbƒtƒ@‹ó‚«Š„ž‚Ý */
    194 #define INHNO_INTCSI11          INTNO_INTCSI11          /* CSI11 ‚Ì“]‘—Š®—¹, ƒoƒbƒtƒ@‹ó‚«Š„ž‚Ý */
    195 #define INHNO_INTIIC11          INTNO_INTIIC11          /* IIC11 ‚Ì“]‘—Š®—¹ */
    196                        
    197 #define INHNO_SRE1              INTNO_SRE1              /* UART1 ŽóM‚̒ʐMƒGƒ‰[”­¶ */
    198 #define INHNO_INTTM03H          INTNO_INTTM03H          /* ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹03‚̃JƒEƒ“ƒgŠ®—¹‚Ü‚½‚̓Lƒƒƒvƒ`ƒƒŠ®—¹(8ƒrƒbƒgƒ^ƒCƒ}“®ìŽž) */
    199                        
    200 #define INHNO_INTIICA0          INTNO_INTIICA0          /* IICA0 ’ʐMŠ®—¹ */
    201 #define INHNO_INTTM00           INTNO_INTTM00           /* ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹00‚̃JƒEƒ“ƒgŠ®—¹‚Ü‚½‚̓Lƒƒƒvƒ`ƒƒŠ®—¹ */
    202 #define INHNO_INTTM01           INTNO_INTTM01           /* ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹01‚̃JƒEƒ“ƒgŠ®—¹‚Ü‚½‚̓Lƒƒƒvƒ`ƒƒŠ®—¹(16ƒrƒbƒg/‰ºˆÊ8ƒrƒbƒgƒ^ƒCƒ}“®ìŽž) */
    203 #define INHNO_INTTM02           INTNO_INTTM02           /* ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹02‚̃JƒEƒ“ƒgŠ®—¹‚Ü‚½‚̓Lƒƒƒvƒ`ƒƒŠ®—¹ */
    204 #define INHNO_INTTM03           INTNO_INTTM03           /* ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹03‚̃JƒEƒ“ƒgŠ®—¹‚Ü‚½‚̓Lƒƒƒvƒ`ƒƒŠ®—¹(16ƒrƒbƒg/‰ºˆÊ8ƒrƒbƒgƒ^ƒCƒ}“®ìŽž) */
    205 #define INHNO_INTAD             INTNO_INTAD             /* A/D•ÏŠ·Š®—¹ */
    206 #define INHNO_INTRTC            INTNO_INTRTC            /* ƒŠƒAƒ‹ƒ^ƒCƒ€EƒNƒƒbƒN‚Ì’èŽüŠúM†/ƒAƒ‰[ƒ€ˆê’vŒŸo */
    207 #define INHNO_INTIT             INTNO_INTIT             /* 12ƒrƒbƒgEƒCƒ“ƒ^[ƒoƒ‹Eƒ^ƒCƒ}‚̃Cƒ“ƒ^[ƒoƒ‹M†ŒŸo */
    208 #define INHNO_INTKR             INTNO_INTKR             /* ƒL[EƒŠƒ^[ƒ“EM†ŒŸo */
    209                        
    210 #define INHNO_INTST3            INTNO_INTST3            /* UART3 ‘—M‚Ì“]‘—Š®—¹Cƒoƒbƒtƒ@‹ó‚«Š„ž‚Ý */
    211 #define INHNO_INTCSI30          INTNO_INTCSI30          /* CSI30 ‚Ì“]‘—Š®—¹, ƒoƒbƒtƒ@‹ó‚«Š„ž‚Ý */
    212 #define INHNO_INTIIC30          INTNO_INTIIC30          /* IIC30 ‚Ì“]‘—Š®—¹ */
    213                        
    214 #define INHNO_INTSR3            INTNO_INTSR3            /* UART3 ŽóM‚Ì“]‘—Š®—¹Cƒoƒbƒtƒ@‹ó‚«Š„ž‚Ý */
    215 #define INHNO_INTCSI31          INTNO_INTCSI31          /* CSI31 ‚Ì“]‘—Š®—¹, ƒoƒbƒtƒ@‹ó‚«Š„ž‚Ý */
    216 #define INHNO_INTIIC31          INTNO_INTIIC31          /* IIC31 ‚Ì“]‘—Š®—¹ */
    217                        
    218 #define INHNO_INTTM13           INTNO_INTTM13           /* ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹13‚̃JƒEƒ“ƒgŠ®—¹‚Ü‚½‚̓Lƒƒƒvƒ`ƒƒŠ®—¹(16ƒrƒbƒg/‰ºˆÊ8ƒrƒbƒgƒ^ƒCƒ}“®ìŽž) */
    219 #define INHNO_INTTM04           INTNO_INTTM04           /* ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹04‚̃JƒEƒ“ƒgŠ®—¹‚Ü‚½‚̓Lƒƒƒvƒ`ƒƒŠ®—¹ */
    220 #define INHNO_INTTM05           INTNO_INTTM05           /* ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹05‚̃JƒEƒ“ƒgŠ®—¹‚Ü‚½‚̓Lƒƒƒvƒ`ƒƒŠ®—¹ */
    221 #define INHNO_INTTM06           INTNO_INTTM06           /* ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹06‚̃JƒEƒ“ƒgŠ®—¹‚Ü‚½‚̓Lƒƒƒvƒ`ƒƒŠ®—¹ */
    222 #define INHNO_INTTM07           INTNO_INTTM07           /* ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹07‚̃JƒEƒ“ƒgŠ®—¹‚Ü‚½‚̓Lƒƒƒvƒ`ƒƒŠ®—¹ */
    223                        
    224 #define INHNO_INTP6             INTNO_INTP6             /* ’[Žq“ü—̓GƒbƒWŒŸo */
    225 #define INHNO_INTP7             INTNO_INTP7             /* ’[Žq“ü—̓GƒbƒWŒŸo */
    226 #define INHNO_INTP8             INTNO_INTP8             /* ’[Žq“ü—̓GƒbƒWŒŸo */
    227 #define INHNO_INTP9             INTNO_INTP9             /* ’[Žq“ü—̓GƒbƒWŒŸo */
    228 #define INHNO_INTP10            INTNO_INTP10            /* ’[Žq“ü—̓GƒbƒWŒŸo */
    229 #define INHNO_INTP11            INTNO_INTP11            /* ’[Žq“ü—̓GƒbƒWŒŸo */
    230                        
    231 #define INHNO_INTTM10           INTNO_INTTM10           /* ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹10‚̃JƒEƒ“ƒgŠ®—¹‚Ü‚½‚̓Lƒƒƒvƒ`ƒƒŠ®—¹ */
    232 #define INHNO_INTTM11           INTNO_INTTM11           /* ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹11‚̃JƒEƒ“ƒgŠ®—¹‚Ü‚½‚̓Lƒƒƒvƒ`ƒƒŠ®—¹(16ƒrƒbƒg/‰ºˆÊ8ƒrƒbƒgƒ^ƒCƒ}“®ìŽž) */
    233 #define INHNO_INTTM12           INTNO_INTTM12           /* ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹12‚̃JƒEƒ“ƒgŠ®—¹‚Ü‚½‚̓Lƒƒƒvƒ`ƒƒŠ®—¹ */
    234                        
    235 #define INHNO_SRE3              INTNO_SRE3              /* UART3 ŽóM‚̒ʐMƒGƒ‰[”­¶ */
    236 #define INHNO_INTTM13H          INTNO_INTTM13H          /* ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹13‚̃JƒEƒ“ƒgŠ®—¹‚Ü‚½‚̓Lƒƒƒvƒ`ƒƒŠ®—¹(8ƒrƒbƒgƒ^ƒCƒ}“®ìŽž) */
    237                        
    238 #define INHNO_INTMD             INTNO_INTMD             /* œŽZ–½—ߏI—¹/Ï˜a‰‰ŽZŒ‹‰Ê‚̃I[ƒo[ƒtƒ[”­¶ */
    239 #define INHNO_INTIICA1          INTNO_INTIICA1          /* IICA1 ’ʐMŠ®—¹ */
    240 #define INHNO_INTFL             INTNO_INTFL             /* —\–ñ */
    241 #define INHNO_INTDMA2           INTNO_INTDMA2           /* DMA2‚Ì“]‘—Š®—¹ */
    242 #define INHNO_INTDMA3           INTNO_INTDMA3           /* DMA3‚Ì“]‘—Š®—¹ */
    243 #define INHNO_INTTM14           INTNO_INTTM14           /* ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹14‚̃JƒEƒ“ƒgŠ®—¹‚Ü‚½‚̓Lƒƒƒvƒ`ƒƒŠ®—¹ */
    244 #define INHNO_INTTM15           INTNO_INTTM15           /* ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹15‚̃JƒEƒ“ƒgŠ®—¹‚Ü‚½‚̓Lƒƒƒvƒ`ƒƒŠ®—¹ */
    245 #define INHNO_INTTM16           INTNO_INTTM16           /* ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹16‚̃JƒEƒ“ƒgŠ®—¹‚Ü‚½‚̓Lƒƒƒvƒ`ƒƒŠ®—¹ */
    246 #define INHNO_INTTM17           INTNO_INTTM17           /* ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹17‚̃JƒEƒ“ƒgŠ®—¹‚Ü‚½‚̓Lƒƒƒvƒ`ƒƒŠ®—¹ */
    247 
    248 
    249 /*
    250  *  Š„ž‚ݐ§ŒäƒŒƒWƒXƒ^’è‹`
    251  */
    252 #define TADR_IF0L       0xfffe0         // Š„ž‚Ý—v‹ƒtƒ‰ƒOEƒŒƒWƒXƒ^
    253 #define TADR_IF2L       0xfffd0         // Š„ž‚Ý—v‹ƒtƒ‰ƒOEƒŒƒWƒXƒ^
    254 #define TADR_MK0L       0xfffe4         // Š„ž‚݃}ƒXƒNEƒtƒ‰ƒOEƒŒƒWƒXƒ^
    255 #define TADR_MK2L       0xfffd4         // Š„ž‚݃}ƒXƒNEƒtƒ‰ƒOEƒŒƒWƒXƒ^
    256 #define TADR_PR00L      0xfffe8         // —Dæ‡ˆÊŽw’èƒtƒ‰ƒOEƒŒƒWƒXƒ^
    257 #define TADR_PR02L      0xfffd8         // —Dæ‡ˆÊŽw’èƒtƒ‰ƒOEƒŒƒWƒXƒ^
    258 #define TADR_EGP0       0xfff38         // ŠO•”Š„ž‚Ý—§‚¿ã‚ª‚èƒGƒbƒW‹–‰ÂƒŒƒWƒXƒ^
    259 #define TADR_EGP1       0xfff3a         // ŠO•”Š„ž‚Ý—§‚¿ã‚ª‚èƒGƒbƒW‹–‰ÂƒŒƒWƒXƒ^
    260 
    261 
    262 #define TADR_PER0       0xf00f0         // Žü•ÓƒCƒl[ƒuƒ‹ƒŒƒWƒXƒ^0
    263 
    264 #define TBIT_PER0_TAU0EN        UINT8_C(0x01)   // ƒ^ƒCƒ}EƒAƒŒƒCEƒ†ƒjƒbƒg0‚Ì“ü—̓NƒƒbƒN§Œä
    265 #define TBIT_PER0_SAU0EN        UINT8_C(0x04)   // ƒVƒŠƒAƒ‹EƒAƒŒƒCEƒ†ƒjƒbƒg0‚Ì“ü—̓NƒƒbƒN§Œä
    266 
    267 /*
    268  *  ƒNƒƒbƒN”­¶‰ñ˜H
    269  */
    270 #define TADR_CMC        0xfffa0         // ƒNƒƒbƒN“®ìƒ‚[ƒh§ŒäƒŒƒWƒXƒ^
    271 #define TADR_CKC        0xfffa4         // ƒNƒƒbƒN“®ìƒ‚[ƒh§ŒäƒŒƒWƒXƒ^
    272 #define TADR_CSC        0xfffa1         // ƒNƒƒbƒN“®ìƒXƒe[ƒ^ƒX§ŒäƒŒƒWƒXƒ^
    273 #define TADR_OSTC       0xfffa2         // ”­UˆÀ’莞ŠÔƒJƒEƒ“ƒ^ó‘ÔƒŒƒWƒXƒ^
    274 
    275 /*
    276  *  ƒ^ƒCƒ}EƒAƒŒƒCŠÖ˜AƒŒƒWƒXƒ^(ƒVƒXƒeƒ€ƒeƒBƒbƒN—p)
    277  */
    278 #define TADR_TPS0       0xf01b6         // ƒ^ƒCƒ}EƒNƒƒbƒN‘I‘ðƒŒƒWƒXƒ^0
    279 #define TADR_TMR00      0xf0190         // ƒ^ƒCƒ}Eƒ‚[ƒhEƒŒƒWƒXƒ^00
    280 #define TADR_TDR00      0xfff18         // ƒ^ƒCƒ}Eƒf[ƒ^EƒŒƒWƒXƒ^00
    281 #define TADR_TS0        0xf01b2         // ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹’âŽ~ƒŒƒWƒXƒ^0
    282 #define TADR_TT0        0xf01b4         // ƒ^ƒCƒ}Eƒ`ƒƒƒlƒ‹’âŽ~ƒŒƒWƒXƒ^0
     47 *  CPU例外ハンドラ番号の定義
     48 */
     49#define EXCNO_BRK       0       /* ソフトウェアベクタ割込み命令 */
     50
     51/*
     52 *  割込み番号の定義(デフォルトプライオリティの値を割込み番号とする)
     53 */
     54#define INTNO_INTWDTI           0       /* ウォッチドッグ・タイマ */
     55#define INTNO_INTLV1            1       /* 電圧検出 */
     56#define INTNO_INTP0             2       /* 端子入力エッジ検出 */
     57#define INTNO_INTP1             3       /* 端子入力エッジ検出 */
     58#define INTNO_INTP2             4       /* 端子入力エッジ検出 */
     59#define INTNO_INTP3             5       /* 端子入力エッジ検出 */
     60#define INTNO_INTP4             6       /* 端子入力エッジ検出 */
     61#define INTNO_INTP5             7       /* 端子入力エッジ検出 */
     62
     63#define INTNO_INTST2            8       /* UART2 送信の転送完了,バッファ空き割込み */
     64#define INTNO_INTCSI20          8       /* CSI20 の転送完了,バッファ空き割込み */
     65#define INTNO_IIC20             8       /* IIC20 の転送完了 */
     66
     67#define INTNO_INTSR2            9       /* UART2 受信の転送完了 */
     68#define INTNO_INTSCI21          9       /* CSI21 の転送完了 */
     69#define INTNO_INTIIC21          9       /* IIC21 の転送完了 */
     70
     71#define INTNO_SRE2              10      /* UART2 受信の通信エラー発生 */
     72#define INTNO_INTTM11H          10      /* タイマ・チャネル11のカウント完了またはキャプチャ完了(8ビットタイマ動作時) */
     73
     74#define INTNO_INTDMA0           11      /* DMA0 の転送完了 */
     75#define INTNO_INTDMA1           12      /* DMA1 の転送完了 */
     76
     77#define INTNO_INTST0            13      /* UART0 送信の転送完了,バッファ空き割込み */
     78#define INTNO_INTCSI00          13      /* CSI00 の転送完了, バッファ空き割込み */
     79#define INTNO_INTIIC00          13      /* IIC00 の転送完了 */
     80
     81#define INTNO_INTSR0            14      /* UART0 受信の転送完了,バッファ空き割込み */
     82#define INTNO_INTCSI01          14      /* CSI01 の転送完了, バッファ空き割込み */
     83#define INTNO_INTIIC01          14      /* IIC01 の転送完了 */
     84
     85#define INTNO_SRE0              15      /* UART0 受信の通信エラー発生 */
     86#define INTNO_INTTM01H          15      /* タイマ・チャネル01のカウント完了またはキャプチャ完了(8ビットタイマ動作時) */
     87
     88#define INTNO_INTST1            16      /* UART1 送信の転送完了,バッファ空き割込み */
     89#define INTNO_INTCSI10          16      /* CSI10 の転送完了, バッファ空き割込み */
     90#define INTNO_INTIIC10          16      /* IIC10 の転送完了 */
     91
     92#define INTNO_INTSR1            17      /* UART1 受信の転送完了,バッファ空き割込み */
     93#define INTNO_INTCSI11          17      /* CSI11 の転送完了, バッファ空き割込み */
     94#define INTNO_INTIIC11          17      /* IIC11 の転送完了 */
     95
     96#define INTNO_SRE1              18      /* UART1 受信の通信エラー発生 */
     97#define INTNO_INTTM03H          18      /* タイマ・チャネル03のカウント完了またはキャプチャ完了(8ビットタイマ動作時) */
     98
     99#define INTNO_INTIICA0          19      /* IICA0 通信完了 */
     100#define INTNO_INTTM00           20      /* タイマ・チャネル00のカウント完了またはキャプチャ完了 */
     101#define INTNO_INTTM01           21      /* タイマ・チャネル01のカウント完了またはキャプチャ完了(16ビット/下位8ビットタイマ動作時) */
     102#define INTNO_INTTM02           22      /* タイマ・チャネル02のカウント完了またはキャプチャ完了 */
     103#define INTNO_INTTM03           23      /* タイマ・チャネル03のカウント完了またはキャプチャ完了(16ビット/下位8ビットタイマ動作時) */
     104#define INTNO_INTAD             24      /* A/D変換完了 */
     105#define INTNO_INTRTC            25      /* リアルタイム・クロックの定周期信号/アラーム一致検出 */
     106#define INTNO_INTIT             26      /* 12ビット・インターバル・タイマのインターバル信号検出 */
     107#define INTNO_INTKR             27      /* キー・リターン・信号検出 */
     108
     109#define INTNO_INTST3            28      /* UART3 送信の転送完了,バッファ空き割込み */
     110#define INTNO_INTCSI30          28      /* CSI30 の転送完了, バッファ空き割込み */
     111#define INTNO_INTIIC30          28      /* IIC30 の転送完了 */
     112
     113#define INTNO_INTSR3            29      /* UART3 受信の転送完了,バッファ空き割込み */
     114#define INTNO_INTCSI31          29      /* CSI31 の転送完了, バッファ空き割込み */
     115#define INTNO_INTIIC31          29      /* IIC31 の転送完了 */
     116
     117#define INTNO_INTTM13           30      /* タイマ・チャネル13のカウント完了またはキャプチャ完了(16ビット/下位8ビットタイマ動作時) */
     118#define INTNO_INTTM04           31      /* タイマ・チャネル04のカウント完了またはキャプチャ完了 */
     119#define INTNO_INTTM05           32      /* タイマ・チャネル05のカウント完了またはキャプチャ完了 */
     120#define INTNO_INTTM06           33      /* タイマ・チャネル06のカウント完了またはキャプチャ完了 */
     121#define INTNO_INTTM07           34      /* タイマ・チャネル07のカウント完了またはキャプチャ完了 */
     122
     123#define INTNO_INTP6             35      /* 端子入力エッジ検出 */
     124#define INTNO_INTP7             36      /* 端子入力エッジ検出 */
     125#define INTNO_INTP8             37      /* 端子入力エッジ検出 */
     126#define INTNO_INTP9             38      /* 端子入力エッジ検出 */
     127#define INTNO_INTP10            39      /* 端子入力エッジ検出 */
     128#define INTNO_INTP11            40      /* 端子入力エッジ検出 */
     129
     130#define INTNO_INTTM10           41      /* タイマ・チャネル10のカウント完了またはキャプチャ完了 */
     131#define INTNO_INTTM11           42      /* タイマ・チャネル11のカウント完了またはキャプチャ完了(16ビット/下位8ビットタイマ動作時) */
     132#define INTNO_INTTM12           43      /* タイマ・チャネル12のカウント完了またはキャプチャ完了 */
     133
     134#define INTNO_SRE3              44      /* UART3 受信の通信エラー発生 */
     135#define INTNO_INTTM13H          44      /* タイマ・チャネル13のカウント完了またはキャプチャ完了(8ビットタイマ動作時) */
     136
     137#define INTNO_INTMD             45      /* 除算命令終了/積和演算結果のオーバーフロー発生 */
     138#define INTNO_INTIICA1          46      /* IICA1 通信完了 */
     139#define INTNO_INTFL             47      /* 予約 */
     140#define INTNO_INTDMA2           48      /* DMA2の転送完了 */
     141#define INTNO_INTDMA3           49      /* DMA3の転送完了 */
     142#define INTNO_INTTM14           50      /* タイマ・チャネル14のカウント完了またはキャプチャ完了 */
     143#define INTNO_INTTM15           51      /* タイマ・チャネル15のカウント完了またはキャプチャ完了 */
     144#define INTNO_INTTM16           52      /* タイマ・チャネル16のカウント完了またはキャプチャ完了 */
     145#define INTNO_INTTM17           53      /* タイマ・チャネル17のカウント完了またはキャプチャ完了 */
     146
     147
     148/*
     149 *  割込みハンドラ番号の定義
     150 */
     151#define INHNO_INTWDTI           INTNO_INTWDTI           /* ウォッチドッグ・タイマ */
     152#define INHNO_INTLV1            INTNO_INTLV1            /* 電圧検出 */
     153#define INHNO_INTP0             INTNO_INTP0             /* 端子入力エッジ検出 */
     154#define INHNO_INTP1             INTNO_INTP1             /* 端子入力エッジ検出 */
     155#define INHNO_INTP2             INTNO_INTP2             /* 端子入力エッジ検出 */
     156#define INHNO_INTP3             INTNO_INTP3             /* 端子入力エッジ検出 */
     157#define INHNO_INTP4             INTNO_INTP4             /* 端子入力エッジ検出 */
     158#define INHNO_INTP5             INTNO_INTP5             /* 端子入力エッジ検出 */
     159                       
     160#define INHNO_INTST2            INTNO_INTST2            /* UART2 送信の転送完了,バッファ空き割込み */
     161#define INHNO_INTCSI20          INTNO_INTCSI20          /* CSI20 の転送完了,バッファ空き割込み */
     162#define INHNO_IIC20             INTNO_IIC20             /* IIC20 の転送完了 */
     163                       
     164#define INHNO_INTSR2            INTNO_INTSR2            /* UART2 受信の転送完了 */
     165#define INHNO_INTSCI21          INTNO_INTSCI21          /* CSI21 の転送完了 */
     166#define INHNO_INTIIC21          INTNO_INTIIC21          /* IIC21 の転送完了 */
     167                       
     168#define INHNO_SRE2              INTNO_SRE2              /* UART2 受信の通信エラー発生 */
     169#define INHNO_INTTM11H          INTNO_INTTM11H          /* タイマ・チャネル11のカウント完了またはキャプチャ完了(8ビットタイマ動作時) */
     170                       
     171#define INHNO_INTDMA0           INTNO_INTDMA0           /* DMA0 の転送完了 */
     172#define INHNO_INTDMA1           INTNO_INTDMA1           /* DMA1 の転送完了 */
     173                       
     174#define INHNO_INTST0            INTNO_INTST0            /* UART0 送信の転送完了,バッファ空き割込み */
     175#define INHNO_INTCSI00          INTNO_INTCSI00          /* CSI00 の転送完了, バッファ空き割込み */
     176#define INHNO_INTIIC00          INTNO_INTIIC00          /* IIC00 の転送完了 */
     177                       
     178#define INHNO_INTSR0            INTNO_INTSR0            /* UART0 受信の転送完了,バッファ空き割込み */
     179#define INHNO_INTCSI01          INTNO_INTCSI01          /* CSI01 の転送完了, バッファ空き割込み */
     180#define INHNO_INTIIC01          INTNO_INTIIC01          /* IIC01 の転送完了 */
     181                       
     182#define INHNO_SRE0              INTNO_SRE0              /* UART0 受信の通信エラー発生 */
     183#define INHNO_INTTM01H          INTNO_INTTM01H          /* タイマ・チャネル01のカウント完了またはキャプチャ完了(8ビットタイマ動作時) */
     184                       
     185#define INHNO_INTST1            INTNO_INTST1            /* UART1 送信の転送完了,バッファ空き割込み */
     186#define INHNO_INTCSI10          INTNO_INTCSI10          /* CSI10 の転送完了, バッファ空き割込み */
     187#define INHNO_INTIIC10          INTNO_INTIIC10          /* IIC10 の転送完了 */
     188                       
     189#define INHNO_INTSR1            INTNO_INTSR1            /* UART1 受信の転送完了,バッファ空き割込み */
     190#define INHNO_INTCSI11          INTNO_INTCSI11          /* CSI11 の転送完了, バッファ空き割込み */
     191#define INHNO_INTIIC11          INTNO_INTIIC11          /* IIC11 の転送完了 */
     192                       
     193#define INHNO_SRE1              INTNO_SRE1              /* UART1 受信の通信エラー発生 */
     194#define INHNO_INTTM03H          INTNO_INTTM03H          /* タイマ・チャネル03のカウント完了またはキャプチャ完了(8ビットタイマ動作時) */
     195                       
     196#define INHNO_INTIICA0          INTNO_INTIICA0          /* IICA0 通信完了 */
     197#define INHNO_INTTM00           INTNO_INTTM00           /* タイマ・チャネル00のカウント完了またはキャプチャ完了 */
     198#define INHNO_INTTM01           INTNO_INTTM01           /* タイマ・チャネル01のカウント完了またはキャプチャ完了(16ビット/下位8ビットタイマ動作時) */
     199#define INHNO_INTTM02           INTNO_INTTM02           /* タイマ・チャネル02のカウント完了またはキャプチャ完了 */
     200#define INHNO_INTTM03           INTNO_INTTM03           /* タイマ・チャネル03のカウント完了またはキャプチャ完了(16ビット/下位8ビットタイマ動作時) */
     201#define INHNO_INTAD             INTNO_INTAD             /* A/D変換完了 */
     202#define INHNO_INTRTC            INTNO_INTRTC            /* リアルタイム・クロックの定周期信号/アラーム一致検出 */
     203#define INHNO_INTIT             INTNO_INTIT             /* 12ビット・インターバル・タイマのインターバル信号検出 */
     204#define INHNO_INTKR             INTNO_INTKR             /* キー・リターン・信号検出 */
     205                       
     206#define INHNO_INTST3            INTNO_INTST3            /* UART3 送信の転送完了,バッファ空き割込み */
     207#define INHNO_INTCSI30          INTNO_INTCSI30          /* CSI30 の転送完了, バッファ空き割込み */
     208#define INHNO_INTIIC30          INTNO_INTIIC30          /* IIC30 の転送完了 */
     209                       
     210#define INHNO_INTSR3            INTNO_INTSR3            /* UART3 受信の転送完了,バッファ空き割込み */
     211#define INHNO_INTCSI31          INTNO_INTCSI31          /* CSI31 の転送完了, バッファ空き割込み */
     212#define INHNO_INTIIC31          INTNO_INTIIC31          /* IIC31 の転送完了 */
     213                       
     214#define INHNO_INTTM13           INTNO_INTTM13           /* タイマ・チャネル13のカウント完了またはキャプチャ完了(16ビット/下位8ビットタイマ動作時) */
     215#define INHNO_INTTM04           INTNO_INTTM04           /* タイマ・チャネル04のカウント完了またはキャプチャ完了 */
     216#define INHNO_INTTM05           INTNO_INTTM05           /* タイマ・チャネル05のカウント完了またはキャプチャ完了 */
     217#define INHNO_INTTM06           INTNO_INTTM06           /* タイマ・チャネル06のカウント完了またはキャプチャ完了 */
     218#define INHNO_INTTM07           INTNO_INTTM07           /* タイマ・チャネル07のカウント完了またはキャプチャ完了 */
     219                       
     220#define INHNO_INTP6             INTNO_INTP6             /* 端子入力エッジ検出 */
     221#define INHNO_INTP7             INTNO_INTP7             /* 端子入力エッジ検出 */
     222#define INHNO_INTP8             INTNO_INTP8             /* 端子入力エッジ検出 */
     223#define INHNO_INTP9             INTNO_INTP9             /* 端子入力エッジ検出 */
     224#define INHNO_INTP10            INTNO_INTP10            /* 端子入力エッジ検出 */
     225#define INHNO_INTP11            INTNO_INTP11            /* 端子入力エッジ検出 */
     226                       
     227#define INHNO_INTTM10           INTNO_INTTM10           /* タイマ・チャネル10のカウント完了またはキャプチャ完了 */
     228#define INHNO_INTTM11           INTNO_INTTM11           /* タイマ・チャネル11のカウント完了またはキャプチャ完了(16ビット/下位8ビットタイマ動作時) */
     229#define INHNO_INTTM12           INTNO_INTTM12           /* タイマ・チャネル12のカウント完了またはキャプチャ完了 */
     230                       
     231#define INHNO_SRE3              INTNO_SRE3              /* UART3 受信の通信エラー発生 */
     232#define INHNO_INTTM13H          INTNO_INTTM13H          /* タイマ・チャネル13のカウント完了またはキャプチャ完了(8ビットタイマ動作時) */
     233                       
     234#define INHNO_INTMD             INTNO_INTMD             /* 除算命令終了/積和演算結果のオーバーフロー発生 */
     235#define INHNO_INTIICA1          INTNO_INTIICA1          /* IICA1 通信完了 */
     236#define INHNO_INTFL             INTNO_INTFL             /* 予約 */
     237#define INHNO_INTDMA2           INTNO_INTDMA2           /* DMA2の転送完了 */
     238#define INHNO_INTDMA3           INTNO_INTDMA3           /* DMA3の転送完了 */
     239#define INHNO_INTTM14           INTNO_INTTM14           /* タイマ・チャネル14のカウント完了またはキャプチャ完了 */
     240#define INHNO_INTTM15           INTNO_INTTM15           /* タイマ・チャネル15のカウント完了またはキャプチャ完了 */
     241#define INHNO_INTTM16           INTNO_INTTM16           /* タイマ・チャネル16のカウント完了またはキャプチャ完了 */
     242#define INHNO_INTTM17           INTNO_INTTM17           /* タイマ・チャネル17のカウント完了またはキャプチャ完了 */
     243
     244
     245/*
     246 *  割込み制御レジスタ定義
     247 */
     248#define TADR_IF0L       0xfffe0         // 割込み要求フラグ・レジスタ
     249#define TADR_IF2L       0xfffd0         // 割込み要求フラグ・レジスタ
     250#define TADR_MK0L       0xfffe4         // 割込みマスク・フラグ・レジスタ
     251#define TADR_MK2L       0xfffd4         // 割込みマスク・フラグ・レジスタ
     252#define TADR_PR00L      0xfffe8         // 優先順位指定フラグ・レジスタ
     253#define TADR_PR02L      0xfffd8         // 優先順位指定フラグ・レジスタ
     254#define TADR_EGP0       0xfff38         // 外部割込み立ち上がりエッジ許可レジスタ
     255#define TADR_EGP1       0xfff3a         // 外部割込み立ち上がりエッジ許可レジスタ
     256
     257
     258#define TADR_PER0       0xf00f0         // 周辺イネーブルレジスタ0
     259
     260#define TBIT_PER0_TAU0EN        UINT8_C(0x01)   // タイマ・アレイ・ユニット0の入力クロック制御
     261#define TBIT_PER0_SAU0EN        UINT8_C(0x04)   // シリアル・アレイ・ユニット0の入力クロック制御
     262
     263/*
     264 *  クロック発生回路
     265 */
     266#define TADR_CMC        0xfffa0         // クロック動作モード制御レジスタ
     267#define TADR_CKC        0xfffa4         // クロック動作モード制御レジスタ
     268#define TADR_CSC        0xfffa1         // クロック動作ステータス制御レジスタ
     269#define TADR_OSTC       0xfffa2         // 発振安定時間カウンタ状態レジスタ
     270
     271/*
     272 *  タイマ・アレイ関連レジスタ(システムティック用)
     273 */
     274#define TADR_TPS0       0xf01b6         // タイマ・クロック選択レジスタ0
     275#define TADR_TMR00      0xf0190         // タイマ・モード・レジスタ00
     276#define TADR_TDR00      0xfff18         // タイマ・データ・レジスタ00
     277#define TADR_TS0        0xf01b2         // タイマ・チャネル停止レジスタ0
     278#define TADR_TT0        0xf01b4         // タイマ・チャネル停止レジスタ0
    283279
    284280#define TBIT_TTm_TTm0   UINT16_C(0x0001)
     
    288284
    289285/*
    290  *  ƒVƒŠƒAƒ‹EƒAƒŒƒCŠÖ˜AƒŒƒWƒXƒ^
    291  */
    292 #define TADR_SPS0       0xf0126         // ƒVƒŠƒAƒ‹ƒNƒƒbƒN‘I‘ðƒŒƒWƒXƒ^
    293 #define TADR_SMR00      0xf0110         // ƒVƒŠƒAƒ‹ƒ‚[ƒhƒŒƒWƒXƒ^
    294 #define TADR_SMR01      0xf0112         // ƒVƒŠƒAƒ‹ƒ‚[ƒhƒŒƒWƒXƒ^
    295 
    296 #define TADR_SCR00      0xf0118         // ƒVƒŠƒAƒ‹’ʐM“®ìÝ’背ƒWƒXƒ^
    297 #define TADR_SCR01      0xf011a         // ƒVƒŠƒAƒ‹’ʐM“®ìÝ’背ƒWƒXƒ^
    298 
    299 #define TADR_SDR00      0xfff10         // ƒVƒŠƒAƒ‹ƒf[ƒ^ƒŒƒWƒXƒ^0
    300 #define TADR_SDR01      0xfff12         // ƒVƒŠƒAƒ‹ƒf[ƒ^ƒŒƒWƒXƒ^0
    301 
    302 #define TADR_SOL0       0xf0134         // ƒVƒŠƒAƒ‹o—̓Œƒxƒ‹ƒŒƒWƒXƒ^0
    303 #define TADR_SO0        0xf0128         // ƒVƒŠƒAƒ‹o—̓ŒƒWƒXƒ^0
    304 #define TADR_SOE0       0xf012a         // ƒVƒŠƒAƒ‹o—Í‹–‰ÂƒŒƒWƒXƒ^0
    305 #define TADR_SSR00      0xf0100         // ƒVƒŠƒAƒ‹ƒXƒe[ƒ^ƒXƒŒƒWƒXƒ^00
    306 #define TADR_SSR01      0xf0102         // ƒVƒŠƒAƒ‹ƒXƒe[ƒ^ƒXƒŒƒWƒXƒ^01
    307 
    308 #define TADR_SS0        0xf0122         // ƒVƒŠƒAƒ‹ƒ`ƒƒƒlƒ‹ŠJŽnƒŒƒWƒXƒ^0
    309 #define TADR_ST0        0xf0124         // ƒVƒŠƒAƒ‹ƒ`ƒƒƒlƒ‹’âŽ~ƒŒƒWƒXƒ^0
    310 
    311 #define TADR_SIR01      0xf010a         // ƒVƒŠƒAƒ‹Eƒtƒ‰ƒOEƒNƒŠƒAEƒgƒŠƒKEƒŒƒWƒXƒ^01
    312 
    313 #define TADR_NFEN0      0xf0070         // ƒmƒCƒYEƒtƒBƒ‹ƒ^‹–‰ÂƒŒƒWƒXƒ^0
    314 
    315 #define TBIT_SSRmn_BFF  UINT16_C(0x0020)        // ƒ`ƒƒƒlƒ‹n‚̃oƒbƒtƒ@ƒŒƒWƒXƒ^ó‘Ô•\Ž¦ƒtƒ‰ƒO
    316 #define TBIT_SSRmn_TSF  UINT16_C(0x0040)        // ƒ`ƒƒƒlƒ‹n‚̒ʐMó‘Ô•\Ž¦ƒtƒ‰ƒO
    317 #define TBIT_SSRmnL_BFF UINT8_C(0x20)   // ƒ`ƒƒƒlƒ‹n‚̃oƒbƒtƒ@ƒŒƒWƒXƒ^ó‘Ô•\Ž¦ƒtƒ‰ƒO
    318 #define TBIT_SSRmnL_TSF UINT8_C(0x40)   // ƒ`ƒƒƒlƒ‹n‚̒ʐMó‘Ô•\Ž¦ƒtƒ‰ƒO
    319 
    320 #define TBIT_SCRmn_TXEmn        UINT16_C(0x8000)        // ƒ`ƒƒƒlƒ‹n‚Ì“®ìƒ‚[ƒh(‘—M)
    321 #define TBIT_SCRmn_RXEmn        UINT16_C(0x4000)        // ƒ`ƒƒƒlƒ‹n‚Ì“®ìƒ‚[ƒh(ŽóM)
    322 
    323 /*
    324  * I/Oƒ|[ƒg
     286 *  シリアル・アレイ関連レジスタ
     287 */
     288#define TADR_SPS0       0xf0126         // シリアルクロック選択レジスタ
     289#define TADR_SMR00      0xf0110         // シリアルモードレジスタ
     290#define TADR_SMR01      0xf0112         // シリアルモードレジスタ
     291
     292#define TADR_SCR00      0xf0118         // シリアル通信動作設定レジスタ
     293#define TADR_SCR01      0xf011a         // シリアル通信動作設定レジスタ
     294
     295#define TADR_SDR00      0xfff10         // シリアルデータレジスタ0
     296#define TADR_SDR01      0xfff12         // シリアルデータレジスタ0
     297
     298#define TADR_SOL0       0xf0134         // シリアル出力レベルレジスタ0
     299#define TADR_SO0        0xf0128         // シリアル出力レジスタ0
     300#define TADR_SOE0       0xf012a         // シリアル出力許可レジスタ0
     301#define TADR_SSR00      0xf0100         // シリアルステータスレジスタ00
     302#define TADR_SSR01      0xf0102         // シリアルステータスレジスタ01
     303
     304#define TADR_SS0        0xf0122         // シリアルチャネル開始レジスタ0
     305#define TADR_ST0        0xf0124         // シリアルチャネル停止レジスタ0
     306
     307#define TADR_SIR01      0xf010a         // シリアル・フラグ・クリア・トリガ・レジスタ01
     308
     309#define TADR_NFEN0      0xf0070         // ノイズ・フィルタ許可レジスタ0
     310
     311#define TBIT_SSRmn_BFF  UINT16_C(0x0020)        // チャネルnのバッファレジスタ状態表示フラグ
     312#define TBIT_SSRmn_TSF  UINT16_C(0x0040)        // チャネルnの通信状態表示フラグ
     313#define TBIT_SSRmnL_BFF UINT8_C(0x20)   // チャネルnのバッファレジスタ状態表示フラグ
     314#define TBIT_SSRmnL_TSF UINT8_C(0x40)   // チャネルnの通信状態表示フラグ
     315
     316#define TBIT_SCRmn_TXEmn        UINT16_C(0x8000)        // チャネルnの動作モード(送信)
     317#define TBIT_SCRmn_RXEmn        UINT16_C(0x4000)        // チャネルnの動作モード(受信)
     318
     319/*
     320 * I/Oポート
    325321 */
    326322#define TADR_PU0        0xf0030
     
    338334
    339335/*
    340  *  ”Ä—pƒ|[ƒgƒŒƒWƒXƒ^
     336 *  汎用ポートレジスタ
    341337 */
    342338#define TBIT_BIT0       0x01
  • ssp_qb_r5f100le_cs/trunk/arch/rl78_ca78k0r/rl78g13.tf

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    11$
    2 $               ƒ`ƒbƒvˆË‘¶ƒeƒ“ƒvƒŒ[ƒgiRL78/G13—pj
     2$               チップ依存テンプレート(RL78/G13用)
    33$
    44
    55$
    6 Š„ž‚ݔԍ†‚ÆŠ„ž‚݃nƒ“ƒhƒ‰”ԍ†‚Ì’è‹`
     6割込み番号と割込みハンドラ番号の定義
    77$
    8 $  RL78‚Å‚ÍŠ„ž‚ݔԍ†‚ÆŠ„ž‚݃nƒ“ƒhƒ‰”ԍ†‚ª1‘Î1‚őΉž‚·‚éD
    9 ƒfƒtƒHƒ‹ƒgƒvƒ‰ƒCƒIƒŠƒeƒB‚ðŽ‚Âƒ}ƒXƒJƒuƒ‹Š„ž‚Ý‚ª‘ΏۂƂȂéD
    10 ƒfƒtƒHƒ‹ƒgƒvƒ‰ƒCƒIƒŠƒeƒB‚̔ԍ†‚ðŠ„ž‚ݔԍ†‚Æ‚·‚éD
     8$  RL78では割込み番号と割込みハンドラ番号が1対1で対応する.
     9デフォルトプライオリティを持つマスカブル割込みが対象となる.
     10デフォルトプライオリティの番号を割込み番号とする.
    1111$
    1212
     
    1616
    1717$
    18 —áŠO”ԍ†‚Ì’è‹`
     18例外番号の定義
    1919$
    20 —áŠO‚Æ‚µ‚Ä BRK Š„ž‚Ý‚Ì‚Ý‚Æ‚·‚éD
     20例外として BRK 割込みのみとする.
    2121$
    2222
     
    2424
    2525$
    26 $  INTŠ„ž‚݂̔ԍ†
    27 $    INTP0--INTP11 (’[Žq“ü—̓GƒbƒWŒŸoŠ„ž‚Ý)‚ªŠY“–
     26$  INT割込みの番号
     27$    INTP0--INTP11 (端子入力エッジ検出割込み)が該当
    2828$
    2929
     
    3131
    3232$
    33 Š„ž‚ݔԍ†CŠ„ž‚݃nƒ“ƒhƒ‰”ԍ†C—áŠO”ԍ†‚͈̔Í
     33割込み番号,割込みハンドラ番号,例外番号の範囲
    3434$
    3535
     
    3939
    4040$
    41 ƒvƒƒZƒbƒTˆË‘¶‚̃eƒ“ƒvƒŒ[ƒgƒtƒ@ƒCƒ‹
     41プロセッサ依存のテンプレートファイル
    4242$
    4343$INCLUDE"rl78_ca78k0r/prc.tf"$
  • ssp_qb_r5f100le_cs/trunk/arch/rl78_ca78k0r/rl78g13_config.h

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    77 *             Nagoya Municipal Industrial Research Institute, JAPAN
    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‰ü•ÏE
    11  *  Ä”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‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[ƒX
    14  *      ƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    15  *  (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg—p
    16  *      ‚Å‚«‚éŒ`‚ōĔ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—p
    22  *      ‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±‚Ɓ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‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹ŠQ
    30  *      ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD‚Ü‚½C
    31  *      –{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝—R‚ÉŠî‚Ã
    32  *      ‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
     9 *  上記著作権者は,以下の (1)〜(4) の条件を満たす場合に限り,本ソフトウェ
     10 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改変・
     11 *  再配布(以下,利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作権
     13 *      表示,この利用条件および下記の無保証規定が,そのままの形でソース
     14 *      コード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使用
     16 *      できる形で再配布する場合には,再配布に伴うドキュメント(利用者マ
     17 *      ニュアルなど)に,上記の著作権表示,この利用条件および下記の無保
     18 *      証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使用
     20 *      できない形で再配布する場合には,次のいずれかの条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著作
     22 *        権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに報
     24 *        告すること.
     25 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損害
     26 *      からも,上記著作権者およびTOPPERSプロジェクトを免責すること.また,
     27 *      本ソフトウェアのユーザまたはエンドユーザからのいかなる理由に基づ
     28 *      く請求からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
    3329 *
    34  *  –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨‚æ
    35  *  ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I‚ɑ΂·
    36  *  ‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p
    37  *  ‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»‚̐ӔC‚ð•‰
    38  *  ‚í‚È‚¢D
     30 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者およ
     31 *  びTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的に対す
     32 *  る適合性も含めて,いかなる保証も行わない.また,本ソフトウェアの利用
     33 *  により直接的または間接的に生じたいかなる損害に関しても,その責任を負
     34 *  わない.
    3935 *
    4036 */
    4137
    4238/*
    43  *              ƒvƒƒZƒbƒTˆË‘¶ƒ‚ƒWƒ
    44 [ƒ‹iRL78/G13—pj
     39 *              プロセッサ依存モジュール(RL78/G13用)
    4540 *
    46  *  ‚±‚̃Cƒ“ƒNƒ‹[ƒhƒtƒ@ƒCƒ‹‚́Ctarget_config.h ‚Ì‚Ý‚©‚çƒCƒ“ƒNƒ‹[ƒh‚³‚ê‚éD
    47  *  ‘¼‚̃tƒ@ƒCƒ‹‚©‚ç’¼ÚƒCƒ“ƒNƒ‹[ƒh‚µ‚Ä‚Í‚È‚ç‚È‚¢D
     41 *  このインクルードファイルは,target_config.h のみからインクルードされる.
     42 *  他のファイルから直接インクルードしてはならない.
    4843 */
    4944
     
    5348
    5449/*
    55  *  Š„ž‚ݔԍ†‚̍őå’l
     50 *  割込み番号の最大値
    5651 */
    5752#define INTNO_MAX       UINT_C(53)
    5853
    5954/*
    60  *  Žw’芄ž‚ݔԍ†‚ª—LŒø‚ÈŠ„ž‚ݔԍ†‚͈̔͂ɂ ‚é‚©‚Ç‚¤‚©‚Ì”»’è
     55 *  指定割込み番号が有効な割込み番号の範囲にあるかどうかの判定
    6156 */
    6257#define VALID_INTNO(intno) \
  • ssp_qb_r5f100le_cs/trunk/arch/rl78_ca78k0r/segment_e.asm

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    11;
    2 ; ƒZƒOƒƒ“ƒg’è‹`
    3 ;   ƒZƒOƒƒ“ƒg––”öƒAƒhƒŒƒX‚ð’è‹`‚·‚邽‚߁CƒŠƒ“ƒN‡˜‚ðˆê”ԍŌã‚É‚·‚é
     2; セグメント定義
     3;   セグメント末尾アドレスを定義するため,リンク順序を一番最後にする
    44;
    55
  • ssp_qb_r5f100le_cs/trunk/arch/rl78_ca78k0r/segment_s.asm

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    11;
    2 ; ƒZƒOƒƒ“ƒg’è‹`
    3 ;   ƒZƒOƒƒ“ƒgæ“ªƒAƒhƒŒƒX‚ð’è‹`‚·‚邽‚߁CƒŠƒ“ƒN‡˜‚ðˆê”ԍŏ‰‚É‚·‚é
     2; セグメント定義
     3;   セグメント先頭アドレスを定義するため,リンク順序を一番最初にする
    44;
    55
    66;
    7 ; ƒOƒ[ƒoƒ‹ƒVƒ“ƒ{ƒ‹
     7; グローバルシンボル
    88;
    99        extrn   _start
     
    1414
    1515;
    16 ; ƒZƒOƒƒ“ƒg’è‹`
     16; セグメント定義
    1717;
    1818VECTOR  CSEG
     
    2323;OCDWORK        CSEG
    2424
    25 ; ƒIƒvƒVƒ‡ƒ“ƒoƒCƒgÝ’è
     25; オプションバイト設定
    2626OPT     CSEG    OPT_BYTE
    27         db      06eh    ; WDT: ƒCƒ“ƒ^[ƒoƒ‹Š„ž‚Ý‚ðŽg—p‚µ‚È‚¢CƒJƒEƒ“ƒ^“®ì‹ÖŽ~
    28         db      0ffh    ; LVD: ƒIƒt
    29         db      0efh    ; HSƒ‚[ƒhCƒIƒ“ƒ`ƒbƒvƒIƒVƒŒ[ƒ^ 1MHz
    30         db      085h    ; ƒIƒ“ƒ`ƒbƒvƒfƒoƒbƒO‹–‰Â, ”FØŽ¸”sŽž‚Ƀtƒ‰ƒbƒVƒ
    31 Á‹Ž‚µ‚È‚¢
     27        db      06eh    ; WDT: インターバル割込みを使用しない,カウンタ動作禁止
     28        db      0ffh    ; LVD: オフ
     29        db      0efh    ; HSモード,オンチップオシレータ 1MHz
     30        db      085h    ; オンチップデバッグ許可, 認証失敗時にフラッシュ消去しない
    3231
    3332; ROM
  • ssp_qb_r5f100le_cs/trunk/arch/rl78_ca78k0r/start.asm

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    66;             Nagoya Municipal Industrial Research Institute, 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‰ü•ÏE
    10 ;  Ä”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‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[ƒX
    13 ;      ƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    14 ;  (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg—p
    15 ;      ‚Å‚«‚éŒ`‚ōĔ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—p
    21 ;      ‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±‚ƁD
    22 ;    (a) Ä”z•z‚É”º‚¤ƒhƒLƒ
    23 ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ
    24 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ì
    25 ;        Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    26 ;    (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É•ñ
    27 ;        ‚·‚邱‚ƁD
    28 ;  (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹ŠQ
    29 ;      ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD‚Ü‚½C
    30 ;      –{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝—R‚ÉŠî‚Ã
    31 ;      ‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
    32 ;
    33 ;  –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨‚æ
    34 ;  ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I‚ɑ΂·
    35 ;  ‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p
    36 ;  ‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»‚̐ӔC‚ð•‰
    37 ;  ‚í‚È‚¢D
    38 ;
    39 ;
    40 
    41 ;
    42 ; ƒXƒ^[ƒgƒAƒbƒvƒ‹[ƒ`ƒ“
    43 ;    ƒvƒƒZƒbƒT‚ÍS2ƒRƒACƒ~ƒfƒBƒAƒ€ƒ‚ƒfƒ‹‚ð‘ΏۂƂ·‚é
    44 ;
    45 
    46 ;
    47 ; ƒOƒ[ƒoƒ‹ƒVƒ“ƒ{ƒ‹
    48 ;
    49         ; ƒZƒOƒƒ“ƒgæ“ªƒAƒhƒŒƒX(segment_s.asm)
     8;  上記著作権者は,以下の (1)〜(4) の条件を満たす場合に限り,本ソフトウェ
     9;  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改変・
     10;  再配布(以下,利用と呼ぶ)することを無償で許諾する.
     11;  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作権
     12;      表示,この利用条件および下記の無保証規定が,そのままの形でソース
     13;      コード中に含まれていること.
     14;  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使用
     15;      できる形で再配布する場合には,再配布に伴うドキュメント(利用者マ
     16;      ニュアルなど)に,上記の著作権表示,この利用条件および下記の無保
     17;      証規定を掲載すること.
     18;  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使用
     19;      できない形で再配布する場合には,次のいずれかの条件を満たすこと.
     20;    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著作
     21;        権表示,この利用条件および下記の無保証規定を掲載すること.
     22;    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに報
     23;        告すること.
     24;  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損害
     25;      からも,上記著作権者およびTOPPERSプロジェクトを免責すること.また,
     26;      本ソフトウェアのユーザまたはエンドユーザからのいかなる理由に基づ
     27;      く請求からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     28;
     29;  本ソフトウェアは,無保証で提供されているものである.上記著作権者およ
     30;  びTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的に対す
     31;  る適合性も含めて,いかなる保証も行わない.また,本ソフトウェアの利用
     32;  により直接的または間接的に生じたいかなる損害に関しても,その責任を負
     33;  わない.
     34;
     35;
     36
     37;
     38; スタートアップルーチン
     39;    プロセッサはS2コア,ミディアムモデルを対象とする
     40;
     41
     42;
     43; グローバルシンボル
     44;
     45        ; セグメント先頭アドレス(segment_s.asm)
    5046        extrn   _@R_INIT, _@R_INIS, _@RLINIT
    5147        extrn   _@INIT, _@DATA, _@INIS, _@DATS, _@INITL, _@DATAL
    5248
    53         ; ƒZƒOƒƒ“ƒg––”öƒAƒhƒŒƒX(segment_e.asm)
     49        ; セグメント末尾アドレス(segment_e.asm)
    5450        extrn   _?R_INIT, _?R_INIS, _?RLINIT
    5551        extrn   _?INIT, _?DATA, _?INIS, _?DATS, _?INITL, _?DATAL
    5652
    57         ; ƒXƒ^ƒbƒNƒ|ƒCƒ“ƒ^‚̏‰Šú’l(kernel_cfg.c)
     53        ; スタックポインタの初期値(kernel_cfg.c)
    5854        extrn   __kernel_istkpt
    5955       
    60         ; ƒJ[ƒlƒ‹ŠJŽnˆ—(kernel/startup.c)
     56        ; カーネル開始処理(kernel/startup.c)
    6157        extrn   _sta_ker
    6258       
    63         ; saddr—̈æ‚̐擪ƒAƒhƒŒƒXCƒTƒCƒYiƒŠƒ“ƒJ‚Å’è‹`j
     59        ; saddr領域の先頭アドレス,サイズ(リンカで定義)
    6460        extrn   _@SADBEG, _@SADSIZ
    6561       
    66         ; ƒGƒ“ƒgƒŠƒ|ƒCƒ“ƒg
     62        ; エントリポイント
    6763        public  _start
    6864
    6965
    7066;
    71 ; ’萔’è‹`
    72 ;
    73         ; MAA(PMC‚̃rƒbƒg0): 0 ‚Ü‚½‚Í 1
    74         ;   0‚̏ꍇC00000H--0FFFFH ‚ð F0000H--FFFFFH‚Öƒ~ƒ‰[
    75         ;   1‚̏ꍇC10000H--1FFFFH ‚ð F0000H--FFFFFH‚Öƒ~ƒ‰[
     67; 定数定義
     68;
     69        ; MAA(PMCのビット0): 0 または 1
     70        ;   0の場合,00000H--0FFFFH を F0000H--FFFFFHへミラー
     71        ;   1の場合,10000H--1FFFFH を F0000H--FFFFFHへミラー
    7672INIT_MAA        EQU     0
    7773
    7874;
    79 ; ƒ}ƒNƒ’è‹`
    80 ;
    81         ; ƒZƒOƒƒ“ƒgŠÔ‚̃f[ƒ^ƒRƒs[(far‚ÌROM‚©‚çnear‚ÌRAM‚ցCsrc‚̃TƒCƒY•ª)
     75; マクロ定義
     76;
     77        ; セグメント間のデータコピー(farのROMからnearのRAMへ,srcのサイズ分)
    8278copy_seg        macro src, dst
    8379        local   _1, _2
     
    9793        endm
    9894
    99         ; ƒZƒOƒƒ“ƒgŠÔ‚̃f[ƒ^ƒRƒs[(far‚ÌROM‚©‚çfar‚ÌRAM‚ցCsrc‚̃TƒCƒY•ª)
     95        ; セグメント間のデータコピー(farのROMからfarのRAMへ,srcのサイズ分)
    10096copy_fseg       MACRO   src, dst
    10197        local   _1, _2
     
    116112        endm
    117113
    118         ; ƒZƒOƒƒ“ƒg‚̃f[ƒ^ƒNƒŠƒA(near RAM)
     114        ; セグメントのデータクリア(near RAM)
    119115clear_seg       MACRO   dst
    120116        local   _1, _2
     
    131127        endm
    132128
    133         ; ƒZƒOƒƒ“ƒg‚̃f[ƒ^ƒNƒŠƒA(far RAM)
     129        ; セグメントのデータクリア(far RAM)
    134130clear_fseg      MACRO   dst
    135131        local _1, _2
     
    147143
    148144;
    149 ; ƒVƒXƒeƒ€ŠJŽn
     145; システム開始
    150146;
    151147@@CODE  CSEG    BASE
     
    153149
    154150        ;
    155         ; PSW‚̐ݒè
    156         ;
    157     di                  ; Š„ž‚Ý‹ÖŽ~(Š„ž‚݃ƒbƒN‘Š“–‚ÌŠ„ž‚Ý‹ÖŽ~)
    158         sel     rb0     ; ƒŒƒWƒXƒ^ƒoƒ“ƒN(RB0)
    159        
    160         ;
    161         ; ƒ~ƒ‰[—̈æ‚̐ݒè
     151        ; PSWの設定
     152        ;
     153    di                  ; 割込み禁止(割込みロック相当の割込み禁止)
     154        sel     rb0     ; レジスタバンク(RB0)
     155       
     156        ;
     157        ; ミラー領域の設定
    162158        ;
    163159        mov     a, #INIT_MAA
     
    166162
    167163        ;
    168         ; ƒXƒ^ƒbƒNƒ|ƒCƒ“ƒ^‚̐ݒè
     164        ; スタックポインタの設定
    169165        ;
    170166        movw    de, #__kernel_istkpt
     
    174170
    175171        ;
    176         ; _hardware_init_hook ‚̌Ăяo‚µ(‚à‚µ‚ ‚ê‚Î)
     172        ; _hardware_init_hook の呼び出し(もしあれば)
    177173        ;
    178174        ;call   !!_hardware_init_hook
    179175
    180176        ;
    181         ; ƒƒ‚ƒŠ‰Šú‰»
     177        ; メモリ初期化
    182178        ;
    183179        copy_seg        R_INIS, INIS
     
    189185        clear_fseg      DATAL
    190186
    191         ;  saddr—̈æ‚̏‰Šú‰»
     187        ;  saddr領域の初期化
    192188        mov     b,#_@SADSIZ
    193189        clrw    ax
     
    199195
    200196        ;
    201         ; _sofrware_init_hook ‚̌Ăяo‚µ(‚à‚µ‚ ‚ê‚Î)
     197        ; _sofrware_init_hook の呼び出し(もしあれば)
    202198        ;
    203199        ;call   !!_software_init_hook
    204200       
    205201        ;
    206         ; sta_ker (kernel/startup.c) ‚̌Ăяo‚µ
     202        ; sta_ker (kernel/startup.c) の呼び出し
    207203        ;
    208204        br      !!_sta_ker
Note: See TracChangeset for help on using the changeset viewer.