Changeset 95 for ssp_qb_r5f100le_cs/trunk/arch/rl78_ca78k0r/prc_user.txt
- Timestamp:
- Jun 2, 2015, 3:39:53 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
ssp_qb_r5f100le_cs/trunk/arch/rl78_ca78k0r/prc_user.txt
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
r93 r95 1 1 ===================================================================== 2 RL78 vZbT˶2 RL78プロセッサ依存部 3 3 Last Modified: '15/6/2 4 4 ===================================================================== 5 5 6 6 7 (1) εĢé^[QbgVXeÌíÞE\¬ 8 9 RL78vZbT˶(ȺCRL78˶)ÍClTXGNgjNX» RL78t@~ 10 ÌvZbTðåÈ^[QbgÆ·éDRL78t@~ÍC¢Â©ÌO[vC 11 »µÄܽ»ÌO[vÌÉClXÈ^ÔÅ\»³êévZbTÌoG[Vª 12 ¶ÝµÄ¢éD 13 14 ½¾µC{vZbT˶ɨ¢ÄC»óÅÍCT|[g·é^[Qbg{[hÆÌÖW©çC 15 RL78/G13 ÉÖ·éè`ÌÝðpӵĢéD 16 17 18 (2) vZbT˶Ìt@C\¬ 19 20 A^COSJ[lÌvZbT˶ƵÄÀ·éªÌÝðl¦½êC 21 RL78˶Ìè`ÍCåïÌêCSÄÌvZbTɤʷéªÆC 22 vZbTÌ^ÔÅÙÈéª(¦1)ÆÉR[hð®·é±ÆªÂ\Å éD 23 ÙÈéªÉ¢ÄÍvZbT^ÔÉîÃt@CðpӵĢéD 24 25 ¦1 ÝÔCÝnhÔCyÑCݧäWX^ÌzuÈÇ 26 27 ÈãæèCvZbT˶ÌR[hÍCȺ̽¼K¥É]ÁÄpÓ³ê½ 28 t@CÖC¤ÊªÆÂϪÆɪ޵Äzu³êÄ¢éD 29 30 prc_* F SÄÌvZbTɤʷéè` 31 rl78g13_* ÈÇFvZbT^ÔÉÙÈéè` 32 33 è`ÌzuÍT|[g·évZbTðâ·É©¼µªKvÆÈé©àµêÈ¢D 34 ൻóÌR[hzuÅssª¶¶éêÉÍT|[g[OXgÜÅ 35 ²A¸¯éÆK¢Å éD 36 37 38 (3) gp·éJ«Ʈìص½ð 39 40 RpCCyÑrhÇÉÍlTXGNgjNX»c[ðp¢éD 41 ®ìmFµ½o[WÍ^[Qbg˶ÌhL 42 gÉLÚ·éD 43 44 45 (4) ^[Qbgè`ÌKè 46 47 (4-1) f[^^ÉÖ·éKè 48 49 TOPPERS¤Êf[^^̤¿CTOPPERSV¢ãJ[ldl(ȺCdl)Å 50 IvVµ¢Æ³êÄ¢éf[^^ðÎÛÉC^[Qbg˶ÅÌT|[góµÉ墀 51 Lq·éD±êçÌè`Í arch/ca78k0r/tool_stddef.h Åè`³êÄ¢é 52 53 y®^z 54 55 ET|[g 56 int8_t t«8rbg®iIvVCC99j 57 uint8_t ³µ8rbg®iIvVCC99j 58 float32_t IEEE754Ì32rbgP¸x®¬_iIvVj 59 60 ±Ì¤¿Cfloat32_t ÍCIEEE754ÌP¸x®¬_Å éD 61 62 E¢T|[g 63 int64_t t«64rbg®iIvVCC99j 64 uint64_t ³µ64rbg®iIvVCC99j 65 double64_t IEEE754Ì64rbg{¸x®¬_iIvVj 66 int128_t t«128rbg®iIvVCC99j 67 uint128_t ³µ128rbg®iIvVCC99j 68 69 yÅålCŬlÌèz 70 71 ET|[g 72 INT8_MAX int8_tÉi[Å«éÅåliIvVCC99j 73 INT8_MIN int8_tÉi[Å«éŬliIvVCC99j 74 UINT8_MAX uint8_tÉi[Å«éÅåliIvVCC99j 75 FLOAT32_MIN float32_tÉi[Å«éŬ̳K»³ê½³Ì®¬_iIvVj 76 FLOAT32_MAX float32_tÉi[Å«é\»Â\ÈÅåÌLÀ®¬_iIvVj 77 78 E¢T|[g 79 INT64_MAX int64_tÉi[Å«éÅåliIvVCC99j 80 INT64_MIN int64_tÉi[Å«éŬliIvVCC99j 81 UINT64_MAX uint64_tÉi[Å«éÅåliIvVCC99j 82 DOUBLE64_MIN double64_tÉi[Å«éŬ̳K»³ê½³Ì®¬_iIvVj 83 DOUBLE64_MAX double64_tÉi[Å«é\»Â\ÈÅåÌLÀ®¬_iIvVj 84 INT128_MAX int128_tÉi[Å«éÅåliIvVCC99j 85 INT128_MIN int128_tÉi[Å«éŬliIvVCC99j 86 UINT128_MAX uint128_tÉi[Å«éÅåliIvVCC99j 87 88 (4-2) ÝÉÖ·éKè 89 90 (4-2-1) ÝnhÔÆÝÔÌÄC¼ÒÌÎ 91 92 ÝnhÔ(inhno)ÆÝÔ(intno)ÍC¤ÉftHgvCIeBÌlðp¢éD 93 ¼ÒÍî{Iɯ¶Ôª1Î1ÉηéD]ÁÄgpÂ\ÈSÄÌÝÔÉ뵀 94 ÝT[rX[`(ISR)ðo^Â\Å éD 95 ÝÔCÝnhÔÍ <vZbT¼>.h t@CÅè`µÄ¢éD 96 (á¦Î rl78g13.h ÈÇ) 97 98 (4-2-2) ÝDæxÌiKiTMIN_INTPRIÌljC»ÌÝèû@ 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æxxÌlÌÍÍÉ뵀 -1(=TMAX_INTPRI) ©ç -4 ÜÅÌ 103 lðÝèÂ\Å é(¦2)(¦3)D½¾µCãq·éæ¤ÉCTMIN_INTPRI Åè`³êélɶÄC 104 J[lÇyÑJ[lÇOÌÝnhÉwèÂ\ÈlÌÍͪϻ·éD 105 106 CFG_INT ÅÝè³ê½ÝvCÉJ[lÇÌÝnhð 107 o^·éêÍCTMAX_INTPRI ȺCTMIN_INTPRI ÈãÌlðwèµÈ¯êÎÈçÈ¢D 108 ¼ûCJ[lÇOÌÝnhðo^·éÝvCðÝè·éêÍ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 CPUbNóÔɵȢÀè½dÉà½dݪÂ\ÆÈé½ßCÓªKvÅ éD 116 117 (4-2-3) J[lÇOÌÝ 118 119 RL78˶ÅÍCJ[lÇOÌÝðT|[gµÄ¢éD 120 121 TMIN_INTPRI æè¢(lƵÄÍæ謳¢)ÝDæxÉÝè³ê½ 122 ÝvCÌÝÍCJ[lÇOÌÝƵÄp¢é±Æª 123 Â\Å éDJ[lÇOÌÝÍOSÀsàÖ~ÉÈé±ÆÍÈ 124 iµ§ÉÍÝÌoûŲZ¢æÔÖ~³êéjCݶÍC 125 J[lÌR[hðoR¹¸ÉÄÑ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Í^[Qbg˶Å㫪Â\Å éD 130 131 (4-2-4) J[lÇOÌÝÌÝèû@ 132 133 CFG_INT, DEF_INH ðp¢ÄJ[lÇOÌÝnhðo^·éȩ̂ñÍC 134 (1) DEF_INH Åo^·éÝnhÌ®«ÆµÄ TA_NONKERNEL ðwè·é±ÆC 135 yÑC(2) nho^æÌÝvCªàÂÝDæxÍC 136 CFG_INT Éæè TMIN_INTPRI æè (lƵÄͬ³¢l)ÉÝè·é±ÆC 137 Å éD 138 139 (4-2-5) J[lÇOÌÝnhÌLqû@ 140 141 J[lÇOÌÝnhÍCȺÌæ¤ÉøCßèlª¤É void ÌÖ 142 ƵÄÀ·é±ÆD 7 (1) 対応しているターゲットシステムの種類・構成 8 9 RL78プロセッサ依存部(以下,RL78依存部)は,ルネサスエレクトロニクス製 RL78ファミリ 10 のプロセッサを主なターゲットとする.RL78ファミリは,いくつかのグループ, 11 そしてまたそのグループの中に,様々な型番で表現されるプロセッサのバリエーションが 12 存在している. 13 14 ただし,本プロセッサ依存部において,現状では,サポートするターゲットボードとの関係から, 15 RL78/G13 に関する定義のみを用意している. 16 17 18 (2) プロセッサ依存部のファイル構成 19 20 リアルタイムOSカーネルのプロセッサ依存部として実装する部分のみを考えた場合, 21 RL78依存部の定義は,大抵の場合,全てのプロセッサに共通する部分と, 22 プロセッサの型番で異なる部分(※1)とにコードを整理することが可能である. 23 異なる部分についてはプロセッサ型番に基づくファイルを用意している. 24 25 ※1 割込み番号,割込みハンドラ番号,及び,割込み制御レジスタの配置など 26 27 以上より,プロセッサ依存部のコードは,以下の命名規則に従って用意された 28 ファイルへ,共通部分と可変部分とに分類して配置されている. 29 30 prc_* : 全てのプロセッサに共通する定義 31 rl78g13_* など:プロセッサ型番毎に異なる定義 32 33 定義の配置はサポートするプロセッサを増やす毎に見直しが必要となるかもしれない. 34 もし現状のコード配置で不都合が生じる場合にはサポートメーリングリストまで 35 ご連絡頂けると幸いである. 36 37 38 (3) 使用する開発環境と動作検証した条件 39 40 コンパイル,及びビルド管理にはルネサスエレクトロニクス製ツールを用いる. 41 動作確認したバージョンはターゲット依存部のドキュメントに記載する. 42 43 44 (4) ターゲット定義事項の規定 45 46 (4-1) データ型に関する規定 47 48 TOPPERS共通データ型のうち,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 のパラメータとして指定可能な割込み優先度の値は, 101 RL78 が持つ割込み優先度レベルの値の範囲に対応して -1(=TMAX_INTPRI) から -4 までの 102 値を設定可能である(※2)(※3).ただし,後述するように,TMIN_INTPRI で定義される値に応じて, 103 カーネル管理及びカーネル管理外の割込みハンドラに指定可能な値の範囲が変化する. 104 105 CFG_INT で設定された割込み要求ラインにカーネル管理の割込みハンドラを 106 登録する場合は,TMAX_INTPRI 以下,TMIN_INTPRI 以上の値を指定しなければならない. 107 他方,カーネル管理外の割込みハンドラを登録する割込み要求ラインを設定する場合は, 108 TMIN_INTPRI より小さく,-4 以上の値を指定しなければならない. 109 110 (※2) カーネルの割込み処理モデルの上では割込み優先度を -1 から始まる負数で 111 表現することになっているため,負号がついている. 112 113 (※3) TMIN_INTPRI を -4 にした場合,CFG_INT で優先度 -4 に設定した割込み要因は, 114 CPUロック状態にしない限り何重にも多重割込みが可能となるため,注意が必要である. 115 116 (4-2-3) カーネル管理外の割込み 117 118 RL78依存部では,カーネル管理外の割込みをサポートしている. 119 120 TMIN_INTPRI より高い(数値としてはより小さい)割込み優先度に設定された 121 割込み要求ラインの割込みは,カーネル管理外の割込みとして用いることが 122 可能である.カーネル管理外の割込みはOS実行中も禁止になることはなく 123 (厳密には割込みの出口でごく短い区間禁止される),割込み発生時は, 124 カーネルのコードを経由せずに呼び出される. 125 126 TMIN_INTPRI はカーネル管理の割込みに設定することのできる割込み優先度の最高値 127 (値としては最小値)を定義したマクロで,arch/m16c_ncxx/prc_kernel.h で 128 定義されている.既定では,-3となっている.この値はターゲット依存部で上書きが可能である. 129 130 (4-2-4) カーネル管理外の割込みの設定方法 131 132 CFG_INT, DEF_INH を用いてカーネル管理外の割込みハンドラを登録する場合の制約は, 133 (1) DEF_INH で登録する割込みハンドラの属性として TA_NONKERNEL を指定すること, 134 及び,(2) ハンドラ登録先の割込み要求ラインがもつ割込み優先度は, 135 CFG_INT により TMIN_INTPRI より高く (値としては小さい値)に設定すること, 136 である. 137 138 (4-2-5) カーネル管理外の割込みハンドラの記述方法 139 140 カーネル管理外の割込みハンドラは,以下のように引数,戻り値が共に void の関数 141 として実装すること. 143 142 144 143 void 145 144 interrupt_handler (void) 146 145 { 147 /* nhÌàe*/146 /* ハンドラの内容 */ 148 147 } 149 148 150 (4-2-6) CFG_INT Å^[QbgÆ©ÉgpÅ«éÝ®« 151 152 INTÝÉÖµÄÌÝCÝvCÌgK[hÌÝèðT|[g·éD 153 ÝèÅ«éÌÍCȺ̢¸ê©Å éD 154 E|WeBuGbW(gKÝ)FTA_POSEDGE 155 ElKeBuGbW(gKÝ)FTA_NEGEDGE 156 E¼GbW(gKÝ)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Ö~tOÍ 163 RL78vZbTÌÝ}XNEtOEWX^ªÎ·éD 164 165 (4-2-8) ½dÝÌT|[g 166 167 ½dÝð·éD½¾µCJ[lÇOÌÝÌêCÝnhÌÅ 168 PSWWX^ÌIErbgð¾¦IÉZbgµCÝÂɵȯêνdݪ 169 LøÆÈçÈ¢½ßCÓªKvÅ éD 170 171 ܽ TMIN_INTPRI==-4 ÌêCCFG_INT Å -4 ÉÝèµ½ÝÍC 172 CPUbNðóÔɨ¢Ä¯¶Dæx -4 ÌݪÀsÅà 173 ½dÉݪó¯t¯çêéD±êÍRL78ÌvZbTÌdlÉæéàÌÅC 174 PSWÌIErbgª1Å éÀèC(vZbTà\»É¨¯é)x0ÌÝ 175 (ÝfÅÍDæx-4ÌÝ)ÍCPSWÌISPðgpµ½ 176 xÉæéÝÌ}XNðs¤±ÆªÅ«È¢D 177 178 ÝDæx-4 ÌJ[lÇÌÝnhÍCPUbNðóÔÅ 179 N®³êé½ßCÓªKvÅ éD 180 181 (4-2-9) ÝT[rX[`àÝnhào^µÄ¢È¢Ýv 182 183 éÝvCÅÝvðó¯t¯½ªC»ÌCÉÝT[rX[`yÑ 184 ÝnhÌÇ¿çào^µÄ¢È¢êC_unused_interrupt (prc_support.asm) Ö 185 Wv·éæ¤ÉRtBM 186 [^ªÝxN^𶬷éD»µÄC 187 »±©ç¦ÀÉ^[·éæ¤ÉÈÁÄ¢éD 188 189 190 (4-3) CPUáOÉÖ·éKè 191 192 (4-3-1) CPUáOnhÔ 193 194 RL78 ˶ÅÍBRK½ßÉæé\tgEFAÝðCPUáOƵĵ¤D 195 CPUáOnhÔƵÄ0 ðèUé±ÆÉ·éD 196 197 eCPUáOÉηé CPUáOnhÔÍȺÌÊèD 198 ±êçÍ <vZbT¼>.h Åè`³êÄ¢éD 199 200 áO áOÔ 201 #define EXCNO_BRK 0 /* \tgEFAxN^Ý½ß */ 202 203 204 (4-3-2) nhðo^µÄ¢È¢CPUáOª¶µ½Æ« 205 206 ¶µ½CPUáOÉεÄCCPUáOnhªo^³êĢȢêC 207 _unused_interrupt (prc_support.asm) ÖWv·éæ¤ÉRtBM 208 [^ª 209 ÝxN^𶬷éD»µÄC»±©ç¦ÀÉ^[·éD 210 211 (4-3-3) \tgEFAÝ̵¢ 212 213 \tgEFAÝÉηénhÍ DEF_EXC ÅÄÑo·±ÆÍÅ«È¢D 214 êûCDEF_INH ðp¢ÄÄoµÂ\Å éªC\tgEFAÝ͵§ÉÍ 215 CPUáOÉ®·éàÌÅ èCµ©àm}XJuÅ é½ßC 216 VXeR[ðÄÑo·ÈÇÌÊíÌÝnhƯlÌgpÍ𯽠217 ûª³ïÅ éD 218 219 220 (4-4) CPUbNEÝbN 221 222 ÝbNóÔÍCPSWWX^ÌIErbgÉæèÀ»µÄ¢éD 223 IErbgª0ÌÆ«ÝbNóÔC1ÌÆ«ÝbNðóÔÆ·éD 224 225 J[lÌCPUbNóÔÍCTMIN_INTPRI Åè`·élÉæèÙÈéD 226 227 (4-4-1) TMIN_INTPRI ª -4 Ìê 228 229 CPUbNóÔÍCPSWWX^ÌIErbgÉæèÀ»·éD 230 IErbgª0ÌÆ«CPUbNóÔC1ÌÆ«CPUbNðóÔÆ·éD 231 ±ÌêCCPUbNÆÝbNͯ¶Å éD 232 233 (4-4-2) TMIN_INTPRI ª -1 Èã -3 ȺÌê 234 235 PSWÌCT[rXEvCIeBtO(ISP{1,0})Ìlð 236 (-TMIN_INTPRI+3) ÉÝè·é±ÆÅÀ»·éD 237 á¦Î -3 ÌêCPSW WX^Ì ISP{1,0} ª (0,0) ÉÝè³êéD 238 239 RL78 ÅÍCISP{1,0} ÉÝèµ½luÈã(lƵÄͬ)vÌDæÊðÂݪ 240 uÂv³êéCÆ¢¤dlÉÈÁÄ¢éDµ½ªÁÄC}XNµ½¢xæè 241 êi¢lðZbg·éKvª éD 242 243 244 (4-5) «\]¿pVXeÌQÆÉÖ·éKè 245 246 get_utmðT|[g·é\èÅ éªÜ¾ÀµÄ¢È¢D 247 248 249 (4-6) VXeú»èÌàe 250 251 X^[gAbv[`ÍCVXeZbg¼ãÉÄÑo³êCÀsðJn·éD 252 »ÌÛÌvZbTóÔÍȺðOñƵĢéD 253 ESP, MAA Í¢ú» 254 EWX^oNÍ RB0 255 EPSWWX^ÌIEtOª0 (ÝbNóÔƯÌóÔ) 256 EPSWWX^ÌISP=(1,1) 257 EVXeNbNÍ¢ú»(àIV[^®ì 1MHz) 258 E¢ú»(àµ\tgEFAZbgðÆ©ÉÀµÄ¢êÎÛ³êÄ¢é) 259 260 ܸCX^[gAbv[`Ì start (start.asm) ªÈºÌðs¤D 261 ISP, MAA Ìú» 262 ú» 263 sta_ker (startup.c) R[ 264 »µÄCtarget_initialize (target_config.c) ÉÄNbNÝèªsíêéD 265 266 »ÌãCdispatcher (task.c) ðÀs·éOÉ CPUbNóÔ©ÂÝbNðóÔÉ 267 µÄ¨Kvª é½ßCstart_dispatch (prc_support.asm)ɨ¢Ä 268 PSW WX^Ì ISP yÑ IErbgðCȺÌlÉZbg·éD 269 270 (a) TMIN_INTPRI ª -1 Ⱥ©Â -3 ÈãÌê 271 IPL=-(TMIN_INTPRI)+3 ©ÂCIErbg=1 272 273 (b) TMIN_INTPRI==-4Ìê 274 IPL=3 ©ÂCIErbg=0 275 276 ³çÉCdispatcher ͳÀ[vÅ^[µÈ¢½ßCWvOÉ 277 start_dispatch ÅX^bNÌú»ðsÁÄ¢éD 278 279 280 (4-7) VXeI¹è 281 282 VXeI¹Í call_exit_kernel (prc_support.asm) ÅX^bNðú»µC 283 exit_kernel (startup.c) ðÄÑo·D 284 285 »ÌãCtarget_exit (target_config.c) Å^[Qbg˶ÌI¹ðs¤D 286 KèÅͳÀ[v³¹éÌÝÅÁɽàµÄ¢È¢D 287 àµC^[QbgÅLÌI¹ðs¤Kvª éêCtarget_exit àµÍ 288 »±©çÄÑo³êéÖÅðÀ{·éD 289 290 291 (5) ^C}hCoÖAÌîñ 292 293 ŬZbgJ[lÌg£@\ƵÄüúnhyÑA[nhª 294 pÓ³êÄ¢éD±êçðgp·é½ßÉÍ^CeBbNð·é 295 ^C}hCoð^[QbgÅpÓ·éKvª éD 296 297 298 (6) §À 299 300 EJ[lÌRtBM 301 [V 302 RtBM 303 [VÌpX3irhãÌ\¬`FbNjÍsÁĢȢB 304 »Ì½ßC^XNCÝnhCÝT[rX[`CCPUáOnhC 305 ú»[`CI¹[`CüúnhCA[nhª 306 s³Å éêð E_PAR G[ƵÄo·é±ÆªÅ«È¢D 307 ]ÁÄAvP[VJÉeXg·é±ÆűêçÌÙíðo·éKvª éD 308 309 E¶R[hCüsR[hÉ墀 310 RL78vZbTË¶Í WindowsãÅ®ì·éJ« CubeSuite+ ðp¢Ä 311 J·é±ÆðOñƵĢéDTOPPERSvWFNg©çöJ³êé\[XpbP[WÍ 312 ¶R[hÍSJIS, üsR[hÍ CR+LF ƵÄöJµÄ¢éD 313 314 315 (7) T|[gvZbTÌÇÁ 316 317 (7-1) vZbTÌè` 318 319 vZbTÉÙÈéƵÄÍȺ̪ éD 320 ELøÈÝÔCÝnhÔCCPUáOnhÔÌÍÍ 321 EÝÔCÝnhÔCCPUáOnhÔÌèÄ 322 323 ]ÁÄCT|[g·évZbTðÇÁ·éêÉÍCܸvZbT¼Éîà 324 Ìt@CðpÓ·éDá¦Î RL78/G13 ÌêC 149 (4-2-6) CFG_INT でターゲット独自に使用できる割込み属性 150 151 INT割込みに関してのみ,割込み要求ラインのトリガモードの設定をサポートする. 152 設定できるのは,以下のいずれかである. 153 ・ポジティブエッジ(トリガ割込み):TA_POSEDGE 154 ・ネガティブエッジ(トリガ割込み):TA_NEGEDGE 155 ・両エッジ(トリガ割込み):TA_BOTHEDGE 156 157 (4-2-7) dis_intとena_intのサポートの有無,その制限事項 158 159 RL78依存部では dis_int 及び ena_int をサポートする.制限事項は特にない. 160 161 TOPPERS割込み処理モデルにおける割込み要求禁止フラグは 162 RL78プロセッサの割込みマスク・フラグ・レジスタが対応する. 163 164 (4-2-8) 多重割込みのサポート 165 166 多重割込みを許可する.ただし,カーネル管理外の割込みの場合,割込みハンドラの中で 167 PSWレジスタのIEビットを明示的にセットし,割込み許可にしなければ多重割込みが 168 有効とならないため,注意が必要である. 169 170 また TMIN_INTPRI==-4 の場合,CFG_INT で -4 に設定した割込みは, 171 CPUロック解除状態において同じ優先度 -4 の割込み処理が実行中でも 172 多重に割込みが受け付けられる.これはRL78のプロセッサの仕様によるもので, 173 PSWの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 192 RL78 依存部ではBRK命令によるソフトウェア割込みをCPU例外として扱う. 193 CPU例外ハンドラ番号として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 を用いて呼出し可能であるが,ソフトウェア割込みは厳密には 212 CPU例外に属するものであり,しかもノンマスカブルであるため, 213 システムコールを呼び出すなどの通常の割込みハンドラと同様の使用は避けた 214 方が無難である. 215 216 217 (4-4) CPUロック・割込みロック 218 219 割込みロック状態は,PSWレジスタのIEビットにより実現している. 220 IEビットが0のとき割込みロック状態,1のとき割込みロック解除状態とする. 221 222 カーネルのCPUロック状態は,TMIN_INTPRI で定義する値により異なる. 223 224 (4-4-1) TMIN_INTPRI が -4 の場合 225 226 CPUロック状態は,PSWレジスタのIEビットにより実現する. 227 IEビットが0のときCPUロック状態,1のときCPUロック解除状態とする. 228 この場合,CPUロックと割込みロックは同じである. 229 230 (4-4-2) TMIN_INTPRI が -1 以上 -3 以下の場合 231 232 PSWのインサービス・プライオリティフラグ(ISP{1,0})の値を 233 (-TMIN_INTPRI+3) に設定することで実現する. 234 例えば -3 の場合,PSW レジスタの ISP{1,0} が (0,0) に設定される. 235 236 RL78 では,ISP{1,0} に設定した値「以上(値としては小)」の優先順位を持つ割込みが 237 「許可」される,という仕様になっている.したがって,マスクしたいレベルより 238 一段高い値をセットする必要がある. 239 240 241 (4-5) 性能評価用システム時刻の参照に関する規定 242 243 get_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)において 265 PSW レジスタの 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 は無限ループでリターンしないため,ジャンプ前に 274 start_dispatch でスタックの初期化を行っている. 275 276 277 (4-7) システム終了手順 278 279 システム終了時は call_exit_kernel (prc_support.asm) でスタックを初期化し, 280 exit_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 の場合, 325 320 rl78g13.h 326 ÝÔCÝnhÔCCPUáOnhÔÌè`321 割込み番号,割込みハンドラ番号,CPU例外ハンドラ番号の定義 327 322 rl78g13_config.h 328 ÝÔÌÅål(INTNO_MAX), LøÈÝÔ323 割込み番号の最大値(INTNO_MAX), 有効な割込み番号 329 324 rl78g13.tf 330 ECFG_INT, DEF_INH, ATT_ISR, DEF_EXC ÈÇÅwèÂ\Èp[^lÌè`331 ELøÈÝÔCÝnhÔCCPUáOnhÔÌÍÍÌè`325 ・CFG_INT, DEF_INH, ATT_ISR, DEF_EXC などで指定可能なパラメータ値の定義 326 ・有効な割込み番号,割込みハンドラ番号,CPU例外ハンドラ番号の範囲の定義 332 327 $INTNO_VALID 333 328 $INHNO_VALID 334 329 $EXCNO_VALID 335 EÝÔCÝnhÔCCPUáOnhÔÌÍÍ(³ølàÜÞ)330 ・割込み番号,割込みハンドラ番号,CPU例外ハンドラ番号の範囲(無効値も含む) 336 331 $INTNO_RANGE 337 332 $INHNO_RANGE 338 333 $EXCNO_RANGE 339 334 340 »µÄ±êçªCrhßöÅgp³êéæ¤ÉC^[Qbg˶Ìt@C©ç 341 ±êçðCN[h·éD 342 rl78g13_config.h ÌêCtarget_config.h ©ç343 rl78g13.h ÌêC<^[Qbg¼Ì>.h ©ç344 rl78g13.tf ÌêC^[Qbg˶ÌCFGpev[gt@C(target.tf) ©ç345 Etarget.tf ÅÍCprc.tf ðCN[h·éOÉCgp·é^[QbgvZbTÌ346 @CFGpev[gt@C(±ÌêCrl78g13.tf)ðCN[h·é±ÆD347 348 ܽC±êçÌt@C©çC»ê¼êÌt@CÉηé¤ÊªÌ 349 t@CðCN[h·é 350 rl78g13_config.h ÌêCprc_config.h ð351 rl78g13.tf ÌêCprc.tf (M16Ct@~ÌSvZbTɤÊÌtf)ð352 353 ãLÈOÉCprc_ Åè`³êÄ¢éÌÉC±êÜÅÆÍÙÈéè`Ìdûð 354 µÈ¯êÎÈçÈ¢à̪oÄé©àµêÈ¢D»ÌêÍCè`Ìzuð 355 ÏX·éKvª é½ßCT|[g[OXgÖñ¸¯êÎK¢Å éD 356 ñ¸¢½êCÈ~Ìo[WAbvÉÄηé\èÅ éD 357 358 359 ÏXð 360 2014/8/21 EVKì¬361 2014/9/05 ETMIN_INTPRI ª -4 ÌêÉàε½½ßCÖAÓðÇLD362 2014/10/14 ETMIN_INTPRI ª -4 Ìê̽dÝÉ¢ÄÓðÇL(4-2-2,4-2-8)D363 ETMIN_INTPRI ð -4 ɵ½êÉAZuÌIvVðÏX·é364 @KvªÈÈÁ½½ßCêLÚðíD(4-4-1)365 EVXeú»èÅÌàeÉ墀 TMIN_INTPRI ª -4 ÌêðÇÁ(4-6)D366 2014/10/15 E½dÝÌÓÉ¢ÄêC³(4-2-8)D367 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 ○変更履歴 355 2014/8/21 ・新規作成 356 2014/9/05 ・TMIN_INTPRI が -4 の場合にも対応したため,関連箇所を追記. 357 2014/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). 361 2014/10/15 ・多重割込みの注意事項について一部修正(4-2-8). 362 2015/6/2 ・SSP-1.3.0対応 363 以上 -
Property svn:mime-type
set to
Note:
See TracChangeset
for help on using the changeset viewer.