Changeset 95 for ssp_qb_r5f100le_cs/trunk/arch/rl78_ca78k0r/prc_config.c
- 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_config.c
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
r93 r95 11 11 * Nagoya Municipal Industrial Research Institute, JAPAN 12 12 * 13 * ãLì ÒÍCÈºÌ (1)`(4) Ìðð½·êÉÀèC{\tgEF 14 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»EüÏE 15 * ÄzziȺCpÆÄÔj·é±Æð³Åø·éD 16 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 17 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[X 18 * R[hÉÜÜêÄ¢é±ÆD 19 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉgp 20 * Å«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 21 gipÒ} 22 * j 23 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺLÌ³Û 24 * ØKèðfÚ·é±ÆD 25 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉgp 26 * Å«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·±ÆD 27 * (a) Äzzɺ¤hL 28 gipÒ}j 29 AÈÇjÉCãLÌì 30 * \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 31 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉñ 32 * ·é±ÆD 33 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹Q 34 * ©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆDܽC 35 * {\tgEFAÌ[UܽÍGh[U©çÌ¢©ÈéRÉîà 36 * ¿©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±Æ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プロジェクトを免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨æ39 * ÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚIÉη40 * éK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEFAÌp41 * Éæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»ÌÓCð42 * íÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者およ 35 * びTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的に対す 36 * る適合性も含めて,いかなる保証も行わない.また,本ソフトウェアの利用 37 * により直接的または間接的に生じたいかなる損害に関しても,その責任を負 38 * わない. 43 39 * 44 40 */ 45 41 46 42 /* 47 * vZbT˶W 48 [iRL78j 43 * プロセッサ依存モジュール(RL78) 49 44 */ 50 45 #pragma EI … … 53 48 54 49 /* 55 * ݶñðÛ¶·éÏ50 * 割込み発生回数を保存する変数 56 51 */ 57 52 uint8_t intnest; … … 59 54 60 55 /* 61 * (1) ReLXgÉÖ·éè`62 */ 63 64 65 /* 66 * ReLXgÌQÆ56 * (1) コンテキストに関する定義 57 */ 58 59 60 /* 61 * コンテキストの参照 67 62 */ 68 63 bool_t 69 64 sense_context(void) 70 65 { 71 /* lXgJE^0æèåÈçñ^XNReLXg*/66 /* ネストカウンタ0より大なら非タスクコンテキスト */ 72 67 return (intnest > 0); 73 68 } … … 75 70 76 71 /* 77 * (2) VXeóÔÉÖ·éè`78 */ 79 80 /* 81 * CPU bNtOÀ»Ì½ßÌÏ82 */ 83 bool_t lock_flag; /* CPU bNtOÌlðÛ·éÏ*/72 * (2) システム状態に関する定義 73 */ 74 75 /* 76 * CPUロックフラグ実現のための変数 77 */ 78 bool_t lock_flag; /* CPUロックフラグの値を保持する変数 */ 84 79 #if TMIN_INTPRI != -4 85 uint8_t saved_psw; /* ÝDæxxðÛ¶·éÏ*/80 uint8_t saved_psw; /* 割込み優先度レベルを保存する変数 */ 86 81 #endif 87 82 88 83 /* 89 * CPU bNóÔÖÌÚs90 * ±ÌÖÍCCPU bNóÔÌÆ«ÉÄѾ³êÈ¢±ÆðOñÆ·éD84 * CPU ロック状態への移行 85 * この関数は,CPU ロック状態のときに呼びだされないことを前提とする. 91 86 */ 92 87 void … … 96 91 DI(); 97 92 #else 98 /* ^XNÅÍÝDæx}XNÌlÍ 0 Ì͸ÈÌÅÛ¶·éKvªÈ¢*/93 /* タスクでは割込み優先度マスクの値は 0 のはずなので保存する必要がない */ 99 94 set_psw(PSW_SET_ISP(get_psw(), ISP_LOCK)); 100 95 #endif … … 111 106 112 107 /* 113 * get_psw() ÌÔèlð¼Ú saved_isp ÉÛ¶¹¸CêÏ114 * psw ÖÛ¶·éÌÍCget_psw() ÌÄѾµ¼ãÉݪ¶µC115 * N®³ê½ÝÅ saved_isp ªÏX³êéÂ\«ª é½ßD108 * get_psw() の返り値を直接 saved_isp に保存せず,一時変数 109 * psw へ保存するのは,get_psw() の呼びだし直後に割込みが発生し, 110 * 起動された割込み処理で saved_isp が変更される可能性があるため. 116 111 */ 117 112 psw = get_psw(); … … 125 120 126 121 /* 127 * CPU bNóÔÌð128 * ±ÌÖÍCCPU bNóÔÌÆ«ÉÌÝÄѾ³êé±ÆðOñÆ·éD122 * CPUロック状態の解除 123 * この関数は,CPU ロック状態のときにのみ呼びだされることを前提とする. 129 124 */ 130 125 void … … 135 130 EI(); 136 131 #else 137 /* ^XNÀsÍÝ}XNSðóÔÌ͸ÈÌÅCSðɵĨ*/132 /* タスク実行時は割込みマスク全解除状態のはずなので,全解除にしておく */ 138 133 set_psw(PSW_SET_ISP(get_psw(), ISP_ENAALL)); 139 134 #endif … … 152 147 153 148 /* 154 * CPU bNóÔÌQÆ149 * CPUロック状態の参照 155 150 */ 156 151 bool_t … … 161 156 162 157 /* 163 * ÝDæx}XN(IPM) ÌÝè164 * wèµ½ÝDæx(-1, -2, ..., TMIN_INTPRI) ð³É165 * vZbTÌÝDæxx (IPL) ðÝè·éD158 * 割込み優先度マスク(IPM) の設定 159 * 指定した割込み優先度(-1, -2, ..., TMIN_INTPRI) を元に 160 * プロセッサの割込み優先度レベル (IPL) を設定する. 166 161 */ 167 162 void … … 180 175 181 176 /* 182 * (7) dispacher ÅÌÝÒ¿177 * (7) dispacher での割込み待ち 183 178 */ 184 179 void … … 191 186 192 187 /* 193 * vZbT˶Ìú»188 * プロセッサ依存の初期化 194 189 */ 195 190 void … … 199 194 200 195 /* 201 * vZbT˶ÌI¹196 * プロセッサ依存の終了処理 202 197 */ 203 198 void 204 199 prc_terminate(void) 205 200 { 206 /* ÁÉKvÈÍÈ¢*/207 } 208 209 /* 210 * ÝvÖ~tOÌZbg201 /* 特に必要な処理はない */ 202 } 203 204 /* 205 * 割込み要求禁止フラグのセット 211 206 */ 212 207 bool_t … … 215 210 volatile uint8_t *reg_addr; 216 211 217 /* xè`ª0Å éêÍCFG_INT³êĢȢ*/212 /* レベル定義が0である場合はCFG_INTされていない */ 218 213 if(intpri_table[intno] == 0U) 219 214 { 220 215 return (false); 221 216 } 222 // Ý}XNEtOEWX^ÌYrbgð1ÉZbg217 // 割込みマスク・フラグ・レジスタの該当ビットを1にセット 223 218 if(intno < 32) { 224 219 reg_addr = (volatile uint8_t *)TADR_MK0L; … … 235 230 236 231 /* 237 * ÝvÖ~tOÌNA232 * 割込み要求禁止フラグのクリア 238 233 */ 239 234 bool_t … … 242 237 volatile uint8_t *reg_addr; 243 238 244 /* xè`ª0Å éêÍCFG_INT³êĢȢ*/239 /* レベル定義が0である場合はCFG_INTされていない */ 245 240 if(intpri_table[intno] == 0u) 246 241 { 247 242 return (false); 248 243 } 249 // Ý}XNEtOEWX^ÌYrbgð0ÉZbg244 // 割込みマスク・フラグ・レジスタの該当ビットを0にセット 250 245 if(intno < 32) { 251 246 reg_addr = (volatile uint8_t *)TADR_MK0L; … … 262 257 263 258 /* 264 * ÝvÌNA259 * 割込み要求のクリア 265 260 */ 266 261 void … … 269 264 volatile uint8_t *reg_addr; 270 265 271 // ÝvtOEWX^ÌYrbgð0ÉZbg266 // 割込み要求フラグ・レジスタの該当ビットを0にセット 272 267 if(intno < 32) { 273 268 reg_addr = (volatile uint8_t *)TADR_IF0L; … … 282 277 283 278 /* 284 * ÝvÌ`FbN279 * 割込み要求のチェック 285 280 */ 286 281 bool_t … … 289 284 volatile uint8_t *reg_addr; 290 285 291 // ÝvtOEWX^ÌYrbgª 1 Èçtrue286 // 割込み要求フラグ・レジスタの該当ビットが 1 なら true 292 287 if(intno < 32) { 293 288 reg_addr = (volatile uint8_t *)TADR_IF0L; … … 303 298 304 299 /* 305 * ÝvCÌ®«ÌÝè300 * 割込み要求ラインの属性の設定 306 301 */ 307 302 void … … 315 310 316 311 /* 317 * ÝÌ}XN312 * 割込みのマスク 318 313 * 319 * Ýðó¯t¯½ÜÜCxgK^GbWgKÌÝèâC320 * ÝDæxÌÝèðs¤ÌÍë¯È½ßCÝ®«É©©íç¸C321 * êU}XN·éD314 * 割込みを受け付けたまま,レベルトリガ/エッジトリガの設定や,割 315 * 込み優先度の設定を行うのは危険なため,割込み属性にかかわらず, 316 * 一旦マスクする. 322 317 */ 323 318 (void) x_disable_int(intno); 324 319 325 320 /* 326 * DæxÌÝè321 * 優先度の設定 327 322 */ 328 // DæÊwètOEWX^ÌYrbgÉlðZbg323 // 優先順位指定フラグ・レジスタの該当ビットに値をセット 329 324 if(intno < 32) { 330 325 reg_addr = (volatile uint8_t *)TADR_PR00L; … … 335 330 reg_addr += ((intno-32) / 8); 336 331 } 337 // DæÊxÌÝè(áÊrbg)332 // 優先順位レベルの設定(低位ビット) 338 333 if((IPM2ILVL(intpri) & 0x01) != 0) { 339 334 *reg_addr |= (uint8_t)(1 << (intno % 8)); … … 342 337 *reg_addr &= (uint8_t)~(1 << (intno % 8)); 343 338 } 344 // DæÊxÌÝè(Êrbg)339 // 優先順位レベルの設定(高位ビット) 345 340 if((IPM2ILVL(intpri) & 0x02) != 0) { 346 341 *(reg_addr+4) |= (uint8_t)(1 << (intno % 8)); … … 351 346 352 347 /* 353 * gKÌÝè348 * トリガの設定 354 349 */ 355 350 if(intno <= 7) { … … 362 357 } 363 358 364 /* INT [qÌêÍÝmû@ðÝè·é*/359 /* INT端子の場合は割込み検知方法を設定する */ 365 360 if((intatr & TA_POSEDGE) != 0U) 366 361 { 367 // Oݧ¿ãªèGbWÂWX^ÌYrbgð1ÉZbg362 // 外部割込み立ち上がりエッジ許可レジスタの該当ビットを1にセット 368 363 *reg_addr |= (uint8_t)(1 << (portno % 8)); 369 // Oݧ¿ºªèGbWÂWX^ÌYrbgð0ÉZbg364 // 外部割込み立ち下がりエッジ許可レジスタの該当ビットを0にセット 370 365 *(reg_addr+1) &= (uint8_t)~(1 << (portno % 8)); 371 366 } 372 367 else if((intatr & TA_NEGEDGE) != 0U) 373 368 { 374 // Oݧ¿ãªèGbWÂWX^ÌYrbgð0ÉZbg369 // 外部割込み立ち上がりエッジ許可レジスタの該当ビットを0にセット 375 370 *reg_addr &= (uint8_t)~(1 << (portno % 8)); 376 // Oݧ¿ºªèGbWÂWX^ÌYrbgð1ÉZbg371 // 外部割込み立ち下がりエッジ許可レジスタの該当ビットを1にセット 377 372 *(reg_addr+1) |= (uint8_t)(1 << (portno % 8)); 378 373 } 379 374 else if((intatr & TA_BOTHEDGE) != 0U) 380 375 { 381 // Oݧ¿ãªèGbWÂWX^ÌYrbgð1ÉZbg376 // 外部割込み立ち上がりエッジ許可レジスタの該当ビットを1にセット 382 377 *reg_addr |= (uint8_t)(1 << (portno % 8)); 383 // Oݧ¿ºªèGbWÂWX^ÌYrbgð1ÉZbg378 // 外部割込み立ち下がりエッジ許可レジスタの該当ビットを1にセット 384 379 *(reg_addr+1) |= (uint8_t)(1 << (portno % 8)); 385 380 } 386 else { // Ç¿çÅàÈ¢êÍGbWoðÖ~387 // Oݧ¿ãªèGbWÂWX^ÌYrbgð0ÉZbg381 else { // どちらでもない場合はエッジ検出を禁止 382 // 外部割込み立ち上がりエッジ許可レジスタの該当ビットを0にセット 388 383 *reg_addr &= (uint8_t)~(1 << (portno % 8)); 389 // Oݧ¿ºªèGbWÂWX^ÌYrbgð0ÉZbg384 // 外部割込み立ち下がりエッジ許可レジスタの該当ビットを0にセット 390 385 *(reg_addr+1) &= (uint8_t)~(1 << (portno % 8)); 391 386 } 392 387 393 388 /* 394 * ÝÌ}XNð(DæxÝè)389 * 割込みのマスク解除(優先度設定) 395 390 */ 396 391 if ((intatr & TA_ENAINT) != 0U) { … … 400 395 401 396 /* 402 * NMI ð·×ÄÌÝÌÖ~397 * NMIを除くすべての割込みの禁止 403 398 */ 404 399 uint8_t … … 413 408 414 409 /* 415 * ÝDæx}XNià\»jÌ»ÝlÌÝè410 * 割込み優先度マスク(内部表現)の現在値の設定 416 411 */ 417 412 void -
Property svn:mime-type
set to
Note:
See TracChangeset
for help on using the changeset viewer.