Changeset 95 for ssp_qb_r5f100le_cs/trunk/arch
- Timestamp:
- Jun 2, 2015, 3:39:53 PM (9 years ago)
- 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
-
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/arch/arm_m_gcc/Makefile.prc
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
r93 r95 4 4 5 5 # 6 # Makefile ÌvZbT˶iARM-Mpj6 # Makefile のプロセッサ依存部(ARM-M用) 7 7 # 8 8 9 9 # 10 # RpCIvV10 # コンパイルオプション 11 11 # 12 12 COPTS := $(COPTS) -mthumb … … 17 17 18 18 # 19 # J[lÉÖ·éè`19 # カーネルに関する定義 20 20 # 21 21 KERNEL_DIR := $(KERNEL_DIR) $(SRCDIR)/arch/$(PRC)_$(TOOL) … … 24 24 25 25 # 26 # RtBM 27 [^ÖWÌÏÌè` 26 # コンフィギュレータ関係の変数の定義 28 27 # 29 28 CFG_TABS := $(CFG_TABS) --cfg1-def-table $(SRCDIR)/arch/$(PRC)_$(TOOL)/prc_def.csv 30 29 31 30 # 32 # ˶ÖWÌè`31 # 依存関係の定義 33 32 # 34 33 cfg1_out.c: $(SRCDIR)/arch/$(PRC)_$(TOOL)/prc_def.csv -
Property svn:mime-type
set to
-
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 6 6 * Graduate School of Information Science, Nagoya Univ., JAPAN 7 7 * 8 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 9 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 10 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 11 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 12 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 13 * XR[hÉÜÜêÄ¢é±ÆD 14 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 15 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 16 gip 17 * Ò}j 18 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 19 * ̳ÛØKèðfÚ·é±ÆD 20 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 21 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 22 * ÆD 23 * (a) Äzzɺ¤hL 24 gipÒ}j 25 AÈÇjÉCãLÌ 26 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 27 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 28 * ñ·é±ÆD 29 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 30 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 31 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 32 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 34 30 * 35 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨36 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI37 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF38 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»39 * ÌÓCðíÈ¢D31 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 32 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 33 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 34 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 35 * の責任を負わない. 40 36 * 41 37 * @(#) $Id: arm_m.h 1304 2008-08-27 07:28:36Z ertl-honda $ … … 43 39 44 40 /* 45 * ARMVx-M Ìn[hEFA¹Ìè`41 * ARMVx-Mのハードウェア資源の定義 46 42 */ 47 43 … … 51 47 52 48 /* 53 * EPSR ÌTrbg49 * EPSRのTビット 54 50 */ 55 51 #define EPSR_T 0x01000000 56 52 57 53 /* 58 * IPSR ÌISR NUMBER54 * IPSRの ISR NUMBER 59 55 */ 60 56 #define IPSR_ISR_NUMBER 0x1ff 61 57 62 58 /* 63 * áOEݶÉX^bNãÉÏÜêéÛ¶ÌæÌTCY64 * {J[lÅÍáOt[ÆÄÔ59 * 例外・割込み発生時にスタック上に積まれる保存領域のサイズ 60 * 本カーネルでは例外フレームと呼ぶ 65 61 */ 66 62 #define EXC_FRAME_SIZE (8*4) 67 63 68 64 /* 69 * áOEݶÉLRÉÝè³êéEXC_RETURNÌl65 * 例外・割込み発生時にLRに設定されるEXC_RETURNの値 70 66 */ 71 67 #define EXC_RETURN_HANDLER 0x0 … … 75 71 76 72 /* 77 * CONTROL WX^73 * CONTROLレジスタ 78 74 */ 79 75 #define CONTROL_PSP 0x02 … … 81 77 82 78 /* 83 * áOÔ79 * 例外番号 84 80 */ 85 81 #define EXCNO_NMI 2 … … 93 89 94 90 /* 95 * áOÔÌŬlÆÅål91 * 例外番号の最小値と最大値 96 92 */ 97 93 #define TMIN_EXCNO 2 … … 99 95 100 96 /* 101 * ÝÔ97 * 割込み番号 102 98 */ 103 99 #define IRQNO_SYSTICK 15 104 100 105 101 /* 106 * ÝÔÌŬl102 * 割込み番号の最小値 107 103 */ 108 104 #define TMIN_INTNO 15 109 105 110 106 /* 111 * áOt[ÌItZbg107 * 例外フレームのオフセット 112 108 */ 113 109 #define P_EXCINF_OFFSET_EXC_RETURN 0x00 … … 117 113 118 114 /* 119 * NVIC ÖA115 * NVIC関連 120 116 */ 121 117 122 118 /* 123 * Rg[WX^119 * コントロールレジスタ 124 120 */ 125 121 #define NVIC_INT_CTRL 0xe000ed04 … … 128 124 129 125 /* 130 * VXenh[Rg[WX^126 * システムハンドラーコントロールレジスタ 131 127 */ 132 128 #define NVIC_SYS_HND_CTRL 0xE000ED24 133 129 134 130 /* 135 * eáOÌÂrbg131 * 各例外の許可ビット 136 132 */ 137 133 #define NVIC_SYS_HND_CTRL_USAGE 0x00040000 … … 140 136 141 137 /* 142 * DæxÝèWX^138 * 優先度設定レジスタ 143 139 */ 144 140 #define NVIC_SYS_PRI1 0xE000ED18 // Sys. Handlers 4 to 7 Priority … … 148 144 149 145 /* 150 * ÝÂWX^146 * 割込み許可レジスタ 151 147 */ 152 148 #define NVIC_SETENA0 0xE000E100 // IRQ 0 to 31 Set Enable Register 153 149 154 150 /* 155 * ÝÖ~WX^151 * 割込み禁止レジスタ 156 152 */ 157 153 #define NVIC_CLRENA0 0xE000E180 // IRQ 0 to 31 Set Disable Register 158 154 159 155 /* 160 * xN^e[uItZbgWX^156 * ベクタテーブルオフセットレジスタ 161 157 */ 162 158 #define NVIC_VECTTBL 0xE000ED08 … … 164 160 165 161 /* 166 * SYSTIC ÖAWX^162 * SYSTIC関連レジスタ 167 163 */ 168 164 #define SYSTIC_CONTROL_STATUS 0xE000E010 -
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/arch/arm_m_gcc/prc.tf
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
r93 r95 1 1 $ 2 $ pX2ÌA[LeN`˶ev[giARM-Mpj2 $ パス2のアーキテクチャ依存テンプレート(ARM-M用) 3 3 $ 4 4 5 5 $ 6 $ LøÈÝÔCÝnhÔ6 $ 有効な割込み番号,割込みハンドラ番号 7 7 $ 8 8 $INTNO_VALID = RANGE(15, TMAX_INTNO)$ … … 10 10 11 11 $ 12 $ LøÈCPUáOÔ12 $ 有効なCPU例外番号 13 13 $ 14 14 $EXCNO_VALID = { 2,3,4,5,6,11,12,14 }$ 15 15 16 16 $ 17 $ ATT_ISR ÅgpÅ«éÝÔÆ»êÉηéÝnhÔ17 $ ATT_ISRで使用できる割込み番号とそれに対応する割込みハンドラ番号 18 18 $ 19 19 $INTNO_ATTISR_VALID = INTNO_VALID$ … … 21 21 22 22 $ 23 $ DEF_INT ^DEF_EXCÅgpÅ«éÝnhÔ^CPUáOnhÔ23 $ DEF_INT/DEF_EXCで使用できる割込みハンドラ番号/CPU例外ハンドラ番号 24 24 $ 25 25 $INHNO_DEFINH_VALID = INHNO_VALID$ … … 27 27 28 28 $ 29 $ `FbNû@Ìwè29 $ チェック方法の指定 30 30 $ 31 31 $CHECK_STKSZ_ALIGN = 8$ 32 32 33 33 $ 34 $ CFG_INT ÅgpÅ«éÝÔÆÝDæx34 $ CFG_INTで使用できる割込み番号と割込み優先度 35 35 $ 36 36 $INTNO_CFGINT_VALID = INTNO_VALID$ … … 38 38 39 39 $ 40 $ Ý®«Ì^[Qbg˶Ép¢érbg40 $ 割込み属性中のターゲット依存に用いるビット 41 41 $ 42 42 $ TARGET_INTATR = $ 43 43 44 44 $ 45 $ Wev[gt@CÌCN[h45 $ 標準テンプレートファイルのインクルード 46 46 $ 47 47 $INCLUDE "kernel/kernel.tf"$ … … 53 53 54 54 $ 55 $ xN^[e[u55 $ ベクターテーブル 56 56 $ 57 57 … … 118 118 119 119 $ 120 $ _kernel_bitpat_cfgint ̶¬120 $ _kernel_bitpat_cfgintの生成 121 121 $ 122 122 -
Property svn:mime-type
set to
-
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 4 4 5 5 /* 6 * cfg1_out.c ðN·é½ßÉKvÈX^uÌè`6 * cfg1_out.cをリンクするために必要なスタブの定義 7 7 */ 8 8 -
Property svn:mime-type
set to
-
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 1 1 $ 2 $ pX3ÌvZbT˶ev[giARM-Mpj2 $ パス3のプロセッサ依存テンプレート(ARM-M用) 3 3 $ 4 4 5 5 $ 6 $ `FbNû@Ìwè6 $ チェック方法の指定 7 7 $ 8 8 $CHECK_FUNC_ALIGN = 1$ … … 14 14 15 15 $ 16 $ Wev[gt@CÌCN[h16 $ 標準テンプレートファイルのインクルード 17 17 $ 18 18 $ $INCLUDE "kernel/kernel_check.tf"$ -
Property svn:mime-type
set to
-
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 7 7 * Copyright (C) 2010 by Meika Sugimoto 8 8 * 9 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 10 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 11 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 12 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 13 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 14 * XR[hÉÜÜêÄ¢é±ÆD 15 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 16 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 17 gip 18 * Ò}j 19 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 20 * ̳ÛØKèðfÚ·é±ÆD 21 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 22 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 23 * ÆD 24 * (a) Äzzɺ¤hL 25 gipÒ}j 26 AÈÇjÉCãLÌ 27 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 28 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 29 * ñ·é±ÆD 30 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 31 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 32 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 33 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 34 * ÆÓ·é±ÆD 35 * 36 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨ 37 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI 38 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF 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 * の責任を負わない. 41 37 * 42 38 * @(#) $Id: prc_config.c 1304 2008-08-27 07:28:36Z ertl-honda $ … … 44 40 45 41 /* 46 * vZbT˶W 47 [iARM-Mpj 42 * プロセッサ依存モジュール(ARM-M用) 48 43 */ 49 44 … … 55 50 56 51 /* 57 * CPU bNtOÀ»Ì½ßÌÏ58 */ 59 volatile bool_t lock_flag; /* CPU bNtOÌlðÛ·éÏ*/60 volatile uint32_t saved_iipm; /* ÝDæx}XNðÛ¶·éÏ*/61 62 /* ÝlXgÌÇ*/52 * CPUロックフラグ実現のための変数 53 */ 54 volatile bool_t lock_flag; /* CPUロックフラグの値を保持する変数 */ 55 volatile uint32_t saved_iipm; /* 割込み優先度マスクを保存する変数 */ 56 57 /* 割込みネスト数の管理 */ 63 58 uint8_t intnest; 64 59 65 60 /* 66 * xN^e[u(kernel_cfg.c)61 * ベクタテーブル(kernel_cfg.c) 67 62 */ 68 63 extern const FP vector_table[]; 69 64 70 65 /* 71 * VXeáOEÝÌiáOÔ 4`15j72 * ÝDæxÝèWX^ÖÌANZX̽ßÌzñ66 * システム例外・割込みの(例外番号 4〜15) 67 * 割込み優先度設定レジスタへのアクセスのための配列 73 68 */ 74 69 static const unsigned int nvic_sys_pri_reg[] = { … … 80 75 81 76 /* 82 * áOÆÝÌÝDæxðZbg77 * 例外と割込みの割込み優先度をセット 83 78 * 84 * excno ÍARM-MÅèßçêÄ¢é Exception Number ðwèD79 * excnoはARM-Mで定められている Exception Number を指定. 85 80 */ 86 81 void … … 89 84 90 85 /* 91 * ÝDæxÝèWX^Ìè86 * 割込み優先度設定レジスタの決定 92 87 */ 93 88 if ((EXCNO_MPU <= excno) && (excno <= IRQNO_SYSTICK)) { 94 89 /* 95 * Exception Number 4(Memory Management) ©ç96 * Exception Number 15(SysTick) ÜÅÌÝDæxÍVXeDæx97 * WX^ÉæèÝèD90 * Exception Number 4(Memory Management)から 91 * Exception Number 15(SysTick)までの割込み優先度はシステム優先度 92 * レジスタにより設定. 98 93 */ 99 94 reg = nvic_sys_pri_reg[excno >> 2]; … … 101 96 else if ((TMIN_INTNO < excno) && (excno <= TMAX_INTNO)){ 102 97 /* 103 * IRQ ÝÈç98 * IRQ割込みなら 104 99 */ 105 100 reg = NVIC_PRI0 + (((excno - (TMIN_INTNO + 1)) >> 2) * 4); … … 116 111 117 112 /* 118 * áOÌÂ113 * 例外の許可 119 114 * 120 * Memory Management, Bus Fault, Usage Fault ÍÖ~Eª¨¤115 * Memory Management, Bus Fault, Usage Fault は禁止・許可が買おう 121 116 */ 122 117 void … … 145 140 146 141 /* 147 * áOÌÖ~142 * 例外の禁止 148 143 */ 149 144 void … … 173 168 174 169 /* 175 * vZbT˶Ìú»170 * プロセッサ依存の初期化 176 171 */ 177 172 void … … 179 174 { 180 175 /* 181 * CPU bNtOÀ»Ì½ßÌÏÌú»176 * CPUロックフラグ実現のための変数の初期化 182 177 */ 183 178 lock_flag = true; 184 179 saved_iipm = IIPM_ENAALL; 185 180 186 /* ÝlXgÌú»*/181 /* 割込みネスト数の初期化 */ 187 182 intnest = 0u; 188 183 189 184 /* 190 * xN^e[uðÝè185 * ベクタテーブルを設定 191 186 */ 192 187 sil_wrw_mem((void*)NVIC_VECTTBL, (uint32_t)vector_table); 193 188 194 189 /* 195 * SVC nhÌDæxðÝè190 * SVCハンドラの優先度を設定 196 191 */ 197 192 set_exc_int_priority(EXCNO_SVCALL, 0); 198 193 199 194 /* 200 * SVC nhðLøÉ195 * SVCハンドラを有効に 201 196 */ 202 197 x_enable_int(EXCNO_SVCALL); … … 204 199 205 200 /* 206 * vZbT˶ÌI¹201 * プロセッサ依存の終了処理 207 202 */ 208 203 void … … 214 209 215 210 /* 216 * ÝvC®«ÌÝè211 * 割込み要求ライン属性の設定 217 212 */ 218 213 void … … 223 218 224 219 /* 225 * êUÝðÖ~·é220 * 一旦割込みを禁止する 226 221 */ 227 222 (void)x_disable_int(intno); … … 229 224 230 225 /* 231 * ÝDæxðZbg226 * 割込み優先度をセット 232 227 */ 233 228 set_exc_int_priority(intno, intpri); 234 229 235 230 /* 236 * Ýv}XNð(KvÈê)237 * ¯ÉÝDæxàZbg³êé231 * 割込み要求マスク解除(必要な場合) 232 * 同時に割込み優先度もセットされる 238 233 */ 239 234 if ((intatr & TA_ENAINT) != 0U) { … … 245 240 #ifndef OMIT_DEFAULT_EXC_HANDLER 246 241 /* 247 * Trapa ÈOÌáOÅo^³êĢȢáOª¶·éÆÄÑo³êé242 * Trapa以外の例外で登録されていない例外が発生すると呼び出される 248 243 */ 249 244 void … … 265 260 #ifndef OMIT_DEFAULT_INT_HANDLER 266 261 /* 267 * ¢o^Ìݪ¶µ½êÉÄÑo³êé262 * 未登録の割込みが発生した場合に呼び出される 268 263 */ 269 264 void -
Property svn:mime-type
set to
-
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 8 8 * Nagoya Municipal Industrial Research Institute, JAPAN 9 9 * 10 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 11 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 12 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 13 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 14 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 15 * XR[hÉÜÜêÄ¢é±ÆD 16 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 17 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 18 gip 19 * Ò}j 20 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 21 * ̳ÛØKèðfÚ·é±ÆD 22 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 23 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 24 * ÆD 25 * (a) Äzzɺ¤hL 26 gipÒ}j 27 AÈÇjÉCãLÌ 28 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 29 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 30 * ñ·é±ÆD 31 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 32 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 33 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 34 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 36 32 * 37 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨38 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI39 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF40 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»41 * ÌÓCðíÈ¢D33 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 34 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 35 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 36 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 37 * の責任を負わない. 42 38 * 43 39 * @(#) $Id: prc_config.h 1304 2008-08-27 07:28:36Z ertl-honda $ … … 45 41 46 42 /* 47 * vZbT˶W 48 [iARM-Mpj 49 * 50 * ±ÌCN[ht@CÍCtarget_config.hiܽÍC»±©çCN 51 * [h³êét@CjÌÝ©çCN[h³êéD¼Ìt@C©ç 52 * ¼ÚCN[hµÄÍÈçÈ¢D 43 * プロセッサ依存モジュール(ARM-M用) 44 * 45 * このインクルードファイルは,target_config.h(または,そこからインク 46 * ルードされるファイル)のみからインクルードされる.他のファイルから 47 * 直接インクルードしてはならない. 53 48 */ 54 49 … … 59 54 60 55 /* 61 * vZbTÌÁê½ßÌCCÖè`56 * プロセッサの特殊命令のインライン関数定義 62 57 */ 63 58 #include "prc_insn.h" 64 59 65 60 /* 66 * ñ^XNReLXgpÌX^bNúl61 * 非タスクコンテキスト用のスタック初期値 67 62 */ 68 63 #define TOPPERS_ISTKPT(istk, istksz) ((STK_T *)((char *)(istk) + (istksz))) … … 73 68 74 69 /* 75 * ÝlXg70 * 割込みネスト数 76 71 */ 77 72 extern uint8_t intnest; 78 73 79 74 /* 80 * ReLXgÌQÆ75 * コンテキストの参照 81 76 * 82 77 */ … … 99 94 100 95 /* 101 * TOPPERS WÝfÌÀ»102 * 103 * ÝDæx}XNƵÄÍCBASEPRIðp¢éDSÝðÖ~·é104 * @\ƵÄCFAULTMASKâPRIMASKª éªCJ[lÇOÌÝð105 * T|[g·é½ßC±êçÍCPUbN̽ßÉp¢È¢D106 * »Ì½ßCBASEPRIðp¢Ä[IÉCPUbNtOðÀ»·éD107 * 108 * ܸCCPUbNóÔðÇ·½ßÌÏ(lock_flag)ðpÓ·éD109 * 110 * CPU bNtOªNA³êÄ¢éÔÍCBASEPRIðfãÌÝ111 * Dæx}XNÌlÉÝè·éD±ÌÔÍCfãÌÝDæx}X112 * NÍCBASEPRIðp¢éD96 * TOPPERS標準割込み処理モデルの実現 97 * 98 * 割込み優先度マスクとしては,BASEPRIを用いる.全割込みを禁止する 99 * 機能として,FAULTMASKやPRIMASKがあるが,カーネル管理外の割込みを 100 * サポートするため,これらはCPUロックのために用いない. 101 * そのため,BASEPRIを用いて擬似的にCPUロックフラグを実現する. 102 * 103 * まず,CPUロック状態を管理すための変数(lock_flag)を用意する. 104 * 105 * CPUロックフラグがクリアされている間は,BASEPRIをモデル上の割込み 106 * 優先度マスクの値に設定する.この間は,モデル上の割込み優先度マス 107 * クは,BASEPRIを用いる. 113 108 * 114 * »êÉεÄCPUbNtOªZbg³ê¢éÔÍCBASEPRIðCJ[l115 * ÇOÌàÌð·×ÄÌÝvð}XN·él(TIPM_LOCK)ÆC116 * fãÌÝDæx}XNÆÌ¢ûÉÝè·éD±ÌÔÌfã117 * ÌÝDæx}XNÍC»Ì½ßÌÏ(saved_iipm, à\»ÅÛ)118 * ðpÓµÄÛ·éD119 */ 120 121 /* 122 * ÝDæx}XNÌO\»Æà\»ÌÏ·123 * 124 * AZu¾êÌ\[Xt@C©çCN[h·éê̽ßÉC125 * CAST ðgp126 * ÝDæxÌrbg(TBITW_IPRI)ª 8 ÌêÍCàDæx255127 * ÍCODæx -1 ÉηéD128 */ 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 bNóÔÅÌÝDæx}XN109 * それに対して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ロック状態での割込み優先度マスク 134 129 */ 135 130 #define TIPM_LOCK TMIN_INTPRI 136 131 137 132 /* 138 * CPU bNóÔÅÌÝDæx}XNÌà\»139 * 140 * TIPM_LOCK ÍCCPUbNóÔÅÌBASEPRIÌlDJ[lÇOÌàÌð141 * ·×ÄÌÝð}XN·élÉè`·éD133 * CPUロック状態での割込み優先度マスクの内部表現 134 * 135 * TIPM_LOCKは,CPUロック状態でのBASEPRIの値.カーネル管理外のものを 136 * 除くすべての割込みをマスクする値に定義する. 142 137 */ 143 138 #define IIPM_LOCK INT_IPM(TIPM_LOCK) 144 139 145 140 /* 146 * TIPM_ENAALL iÝDæx}XNSðjÌà\»147 * 148 * BASEPRI É '0' ðÝè·é±ÆÅCSÝð·éD141 * TIPM_ENAALL(割込み優先度マスク全解除)の内部表現 142 * 143 * BASEPRIに '0' を設定することで,全割込みを許可する. 149 144 */ 150 145 #define IIPM_ENAALL (0) … … 154 149 155 150 /* 156 * CPU bNtOÀ»Ì½ßÌÏ151 * CPUロックフラグ実現のための変数 157 152 * 158 * ±êçÌÏÍCCPUbNóÔÌÌÝ«·¦Äàæ¢Æ·éD159 * CCÖÅCANZX̪ϻµÈ¢æ¤Cvolatile ðwèD160 */ 161 extern volatile bool_t lock_flag; /* CPU bNtOÌlðÛ·éÏ*/162 extern volatile uint32_t saved_iipm; /* ÝDæxð}XN·éÏ*/163 164 /* 165 * CPU bNóÔÖÌÚs166 * 167 * BASEPRI in[hEFAÌÝDæx}XNjðCsaved_iipmÉÛ¶µC168 * J[lÇOÌàÌð·×ÄÌÝð}XN·éliTIPM_LOCKj169 * ÉÝè·éDܽClock_flagðtrueÉ·éD170 * 171 * BASEPRI ªCÅ©çTIPM_LOCKƯ¶©»êæè¢êÉÍC»êð172 * saved_iipm ÉÛ¶·éÌÝÅCTIPM_LOCKÉÍÝèµÈ¢D±êÍCf173 * ãÌÝDæx}XNªCTIPM_LOCKƯ¶©»êæè¢xÉÝè174 * ³êÄ¢éóÔÉ ½éD175 * 176 * ±ÌÖÍCCPUbNóÔilock_flagªtrueÌóÔjÅÄÎêé±ÆÍ177 * È¢àÌÆzèµÄ¢éD153 * これらの変数は,CPUロック状態の時のみ書き換えてもよいとする. 154 * インライン関数中で,アクセスの順序が変化しないよう,volatile を指定. 155 */ 156 extern volatile bool_t lock_flag; /* CPUロックフラグの値を保持する変数 */ 157 extern 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 * ないものと想定している. 178 173 */ 179 174 Inline void … … 183 178 184 179 /* 185 * current_iipm() ÌÔèlð¼Úsaved_iipmÉÛ¶¹¸CêÏiipm186 * ðp¢Ä¢éÌÍCcurrent_iipm()ðÄñ¾¼ãÉݪ¶µC187 * N®³ê½ÝÅsaved_iipmªÏX³êéÂ\«ª é½ßÅ188 * éD180 * current_iipm()の返り値を直接saved_iipmに保存せず,一時変数iipm 181 * を用いているのは,current_iipm()を呼んだ直後に割込みが発生し, 182 * 起動された割込み処理でsaved_iipmが変更される可能性があるためで 183 * ある. 189 184 */ 190 185 iipm = get_basepri(); … … 192 187 saved_iipm = iipm; 193 188 lock_flag = true; 194 /* NeBJZNVÌOãŪ«·íéÂ\«ª é*/189 /* クリティカルセクションの前後でメモリが書き換わる可能性がある */ 195 190 Asm("":::"memory"); 196 191 } … … 200 195 201 196 /* 202 * CPU bNóÔÌð203 * 204 * lock_flag ðfalseɵCIPMin[hEFAÌÝDæx}XNjðC205 * saved_iipm ÉÛ¶µ½lÉß·D206 * 207 * ±ÌÖÍCCPUbNóÔilock_flagªtrueÌóÔjÅÌÝÄÎêéà208 * ÌÆzèµÄ¢éD197 * CPUロック状態の解除 198 * 199 * lock_flagをfalseにし,IPM(ハードウェアの割込み優先度マスク)を, 200 * saved_iipmに保存した値に戻す. 201 * 202 * この関数は,CPUロック状態(lock_flagがtrueの状態)でのみ呼ばれるも 203 * のと想定している. 209 204 */ 210 205 Inline void 211 206 x_unlock_cpu(void) 212 207 { 213 /* NeBJZNVÌOãŪ«·íéÂ\«ª é*/208 /* クリティカルセクションの前後でメモリが書き換わる可能性がある */ 214 209 Asm("":::"memory"); 215 210 lock_flag = false; … … 221 216 222 217 /* 223 * CPU bNóÔÌQÆ218 * CPUロック状態の参照 224 219 */ 225 220 Inline bool_t … … 234 229 235 230 /* 236 * ifãÌjÝDæx}XNÌÝè237 * 238 * CPU bNtOªNA³êÄ¢éÍCn[hEFAÌÝDæx}239 * XNðÝè·éDCPUbNtOªZbg³êÄ¢éÍCsaved_iipm240 * ðÝèµC³çÉCn[hEFAÌÝDæx}XNðCÝèµæ¤Æ241 * µ½ifãÌjÝDæx}XNÆTIPM_LOCKÌ¢ûÉÝè·éD231 * (モデル上の)割込み優先度マスクの設定 232 * 233 * CPUロックフラグがクリアされている時は,ハードウェアの割込み優先度マ 234 * スクを設定する.CPUロックフラグがセットされている時は,saved_iipm 235 * を設定し,さらに,ハードウェアの割込み優先度マスクを,設定しようと 236 * した(モデル上の)割込み優先度マスクとTIPM_LOCKの高い方に設定する. 242 237 */ 243 238 Inline void … … 263 258 264 259 /* 265 * ifãÌjÝDæx}XNÌQÆ266 * 267 * CPU bNtOªNA³êÄ¢éÍn[hEFAÌÝDæx}268 * XNðCZbg³êÄ¢éÍsaved_iipmðQÆ·éD260 * (モデル上の)割込み優先度マスクの参照 261 * 262 * CPUロックフラグがクリアされている時はハードウェアの割込み優先度マ 263 * スクを,セットされている時はsaved_iipmを参照する. 269 264 */ 270 265 Inline PRI … … 292 287 293 288 /* 294 * SVC nhiprc_support.Sj289 * SVCハンドラ(prc_support.S) 295 290 */ 296 291 extern void svc_handler(void); 297 292 298 293 /* 299 * X^[gAbv[`istart.Sj294 * スタートアップルーチン(start.S) 300 295 */ 301 296 extern void _start(void); 302 297 303 298 /* 304 * fBXpb`Ì®ìJniprc_support.Sj305 * 306 * start_dispatch ÍCJ[lN®ÉÄÑo·×«àÌÅC·×ÄÌ307 * ÝðÖ~µ½óÔiÝbNóÔƯÌóÔjÅÄÑo³È¯êÎ308 * ÈçÈ¢D299 * ディスパッチャの動作開始(prc_support.S) 300 * 301 * start_dispatchは,カーネル起動時に呼び出すべきもので,すべての割込 302 * みを禁止した状態(割込みロック状態と同等の状態)で呼び出さなければ 303 * ならない. 309 304 */ 310 305 extern void start_dispatch(void) NoReturn; … … 312 307 313 308 /* 314 * J[lÌI¹ÌÄoµiprc_support.Sj315 * 316 * call_exit_kernel ÍCJ[lÌI¹ÉÄÑo·×«àÌÅCñ^XN317 * ReLXgÉØè·¦ÄCJ[lÌI¹iexit_kerneljðÄÑo318 * ·D309 * カーネルの終了処理の呼出し(prc_support.S) 310 * 311 * call_exit_kernelは,カーネルの終了時に呼び出すべきもので,非タスク 312 * コンテキストに切り換えて,カーネルの終了処理(exit_kernel)を呼び出 313 * す. 319 314 */ 320 315 extern void call_exit_kernel(void) NoReturn; 321 316 322 317 /* 323 * ACh[vÌÀ324 * 325 * PÉCPUbNóÔÆCPUbNðóÔðÄÑo·ÀÆ·éD326 * X[v[hÉüêéêÍ{ðwfi½ßðp¢Ä«·¦êÎÇ¢D318 * アイドルループの実装 319 * 320 * 単にCPUロック状態とCPUロック解除状態を呼び出す実装とする. 321 * スリープモードに入れる場合は本処理をwfi命令を用いて書き換えれば良い. 327 322 */ 328 323 Inline void … … 330 325 { 331 326 lock_flag = false; 332 /* CPU AbN => CPUbN*/327 /* CPUアンロック => CPUロック */ 333 328 Asm("\tmsr BASEPRI , %0" : : "r"(0) : "memory"); 334 329 Asm("\tmsr BASEPRI , %0" : : "r"(IIPM_LOCK) : "memory"); … … 337 332 338 333 /* 339 * ÝÔEÝnhÔ340 * 341 * ÝnhÔ(inhno)ÆÝÔ(intno)ÍCèݶÉ342 * EPSR ÉÝè³êéáOÔÆ·éD343 */ 344 345 /* 346 * ÝÔÌÍÍÌ»è334 * 割込み番号・割込みハンドラ番号 335 * 336 * 割込みハンドラ番号(inhno)と割込み番号(intno)は,割り込み発生時に 337 * EPSRに設定される例外番号とする. 338 */ 339 340 /* 341 * 割込み番号の範囲の判定 347 342 */ 348 343 #define VALID_INTNO(intno) ((TMIN_INTNO <= (intno)) && ((intno) <= TMAX_INTNO)) … … 351 346 352 347 /* 353 * ÝnhÌÝè354 * 355 * xNgÔinhnoÌÝnhÌN®Ônint_entryÉÝè·éDÝ356 * nhe[u348 * 割込みハンドラの設定 349 * 350 * ベクトル番号inhnoの割込みハンドラの起動番地int_entryに設定する.割込み 351 * ハンドラテーブル 357 352 */ 358 353 Inline void 359 354 x_define_inh(INHNO inhno, FP int_entry) 360 355 { 361 /* ÁÉs¤ÍÈ¢*/362 } 363 364 /* 365 * ÝnhÌoüû̶¬}N356 /* 特に行う処理はない */ 357 } 358 359 /* 360 * 割込みハンドラの出入口処理の生成マクロ 366 361 * 367 362 */ … … 370 365 371 366 /* 372 * ÝvÖ~tO373 */ 374 375 /* 376 * Ý®«ªÝè³êÄ¢é©ð»Ê·é½ßÌÏikernel_cfg.cj367 * 割込み要求禁止フラグ 368 */ 369 370 /* 371 * 割込み属性が設定されているかを判別するための変数(kernel_cfg.c) 377 372 */ 378 373 extern const uint32_t bitpat_cfgint[]; 379 374 380 375 /* 381 * ÝvÖ~tOÌZbg382 * 383 * Ý®«ªÝè³êĢȢÝvCÉεÄÝvÖ~384 * tOðNAµæ¤Æµ½êÉÍCfalseðÔ·D376 * 割込み要求禁止フラグのセット 377 * 378 * 割込み属性が設定されていない割込み要求ラインに対して割込み要求禁止 379 * フラグをクリアしようとした場合には,falseを返す. 385 380 */ 386 381 Inline bool_t … … 390 385 391 386 /* 392 * Ý®«ªÝè³êĢȢê387 * 割込み属性が設定されていない場合 393 388 */ 394 389 if ((bitpat_cfgint[intno >> 5] & (1 << (intno & 0x1f))) == 0x00) { … … 412 407 413 408 /* 414 * ÝvÖ~tOÌð415 * 416 * Ý®«ªÝè³êĢȢÝvCÉεÄÝvÖ~417 * tOðNAµæ¤Æµ½êÉÍCfalseðÔ·D409 * 割込み要求禁止フラグの解除 410 * 411 * 割込み属性が設定されていない割込み要求ラインに対して割込み要求禁止 412 * フラグをクリアしようとした場合には,falseを返す. 418 413 */ 419 414 Inline bool_t … … 423 418 424 419 /* 425 * Ý®«ªÝè³êĢȢê420 * 割込み属性が設定されていない場合 426 421 */ 427 422 if ((bitpat_cfgint[intno >> 5] & (1 << (intno & 0x1f))) == 0x00) { … … 458 453 459 454 /* 460 * ÝvCÌ®«ÌÝè455 * 割込み要求ラインの属性の設定 461 456 */ 462 457 extern void x_config_int(INTNO intno, ATR intatr, PRI intpri); 463 458 464 459 /* 465 * ÝnhüûÅKvÈIRCì460 * 割込みハンドラ入口で必要なIRC操作 466 461 */ 467 462 Inline void 468 463 i_begin_int(INTNO intno) 469 464 { 470 /* ÁÉs¤ÍÈ¢*/471 } 472 473 /* 474 * ÝnhÌoûÅKvÈIRCì465 /* 特に行う処理はない */ 466 } 467 468 /* 469 * 割込みハンドラの出口で必要なIRC操作 475 470 */ 476 471 Inline void 477 472 i_end_int(INTNO intno) 478 473 { 479 /* ÁÉs¤ÍÈ¢*/480 } 481 482 /* 483 * CPU áOnhÖW474 /* 特に行う処理はない */ 475 } 476 477 /* 478 * CPU例外ハンドラ関係 484 479 */ 485 480 486 481 /* 487 * CPU áOnhÔ482 * CPU例外ハンドラ番号 488 483 */ 489 484 #define VALID_EXCNO_DEFEXC(excno) (TMIN_EXCNO <= (excno) && (excno) <= TMAX_EXCNO) 490 485 491 486 /* 492 * CPU áOnhÌÂ487 * CPU例外ハンドラの許可 493 488 */ 494 489 extern void enable_exc(EXCNO excno); 495 490 496 491 /* 497 * CPU áOnhÌÖ~492 * CPU例外ハンドラの禁止 498 493 */ 499 494 extern void disable_exc(EXCNO excno); 500 495 501 496 /* 502 * CPU áOnhÌÝè497 * CPU例外ハンドラの設定 503 498 */ 504 499 Inline void … … 506 501 { 507 502 /* 508 * êÌáOÍÂðs¤Kvª é503 * 一部の例外は許可を行う必要がある 509 504 */ 510 505 enable_exc(excno); … … 512 507 513 508 /* 514 * CPU áOnhÌüû̶¬}N509 * CPU例外ハンドラの入口処理の生成マクロ 515 510 */ 516 511 #define EXC_ENTRY(excno, exchdr) exchdr … … 519 514 520 515 /* 521 * CPU áOGgiprc_support.Sj516 * CPU例外エントリ(prc_support.S) 522 517 */ 523 518 extern void exc_entry(void); 524 519 525 520 /* 526 * ÝGgiprc_support.Sj521 * 割込みエントリ(prc_support.S) 527 522 */ 528 523 extern void int_entry(void); 529 524 530 525 /* 531 * vZbT˶Ìú»526 * プロセッサ依存の初期化 532 527 */ 533 528 extern void prc_initialize(void); 534 529 535 530 /* 536 * vZbT˶ÌI¹531 * プロセッサ依存の終了時処理 537 532 */ 538 533 extern void prc_terminate(void) NoReturn; 539 534 540 535 /* 541 * atexit ÌÆfXgN^ÌÀs536 * atexitの処理とデストラクタの実行 542 537 */ 543 538 Inline void … … 548 543 549 544 /* 550 * software_term_hook ÖÌ|C^ðCêUvolatilewèÌ éfpÉã551 * üµÄ©çg¤ÌÍC0ÆÌärªÅK»Åí³êÈ¢æ¤É·é½552 * ßÅ éD545 * software_term_hookへのポインタを,一旦volatile指定のあるfpに代 546 * 入してから使うのは,0との比較が最適化で削除されないようにするた 547 * めである. 553 548 */ 554 549 if (fp != 0) { … … 558 553 559 554 /* 560 * o^³êĢȢáOª¶·éÆÄÑo³êé555 * 登録されていない例外が発生すると呼び出される 561 556 */ 562 557 extern void default_exc_handler(void *p_excinf); 563 558 564 559 /* 565 * ¢o^Ìݪ¶µ½êÉÄÑo³êé560 * 未登録の割込みが発生した場合に呼び出される 566 561 */ 567 562 extern void default_int_handler(void *p_excinf); -
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/arch/arm_m_gcc/prc_def.csv
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
-
Property svn:mime-type
set to
-
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 1 1 ===================================================================== 2 ARM-M vZbT˶Ýv2 ARM-Mプロセッサ依存部設計メモ 3 3 Last Modified: 23 Aug 2008 21:54:54 4 4 ===================================================================== 5 5 6 ±ÌhL 7 gÌÊuï 8 9 ±ÌhL 10 gÍCTOPPERS/ASPJ[lðARMvX-MvZbTÉÚA·é½ß 11 ÌÝvÅ éD 12 13 14 ARMVx-MÌdlÜÆß 15 16 ARMvX-MÌdl̤¿CJ[lÌÝvÉÖW·éÉ¢ÄÜÆßéD 17 18 WX^ 19 20 ÄpWX^ÍR0`R15Ì16íÞ èCR13Ìݪ2oN\¬iPSP,MSPjÆÈ 21 ÁÄ¢éDR15ÍPC, R14ÍNWX^iLRjÆÈÁÄ¢éDR0`R3,R12Í 22 XNb`WX^Å éD 23 24 R[ORxV 25 26 R0`R4ªøC»êÈãÍX^bNDßèlÍCR0`R1Éi[³êéD(ARMÉ 27 æèKè³êÄ¢é½ßCRpCÉ˶¹¸±Ì[ÆÈéD) 28 29 CONTROLWX^ 30 31 PSP,MSPÌØèÖ¦CPrivilageÆUser[hÌWX^DÏXãÍCCXg 32 NVobt@tbV 33 ½ßðÀs·éKvª éiisbjDCONTROL 34 WX^ÌÚ×ÍCARMv7-M Architecture Application Level Reference 35 Manual Ì B1-9 ðQÆ̱ÆD 36 37 ÝxN^ 38 39 xN^e[u^ÅCxN^e[uÌAhXÍCZbgÍ0x00ÅC 40 Vector Table Offset Registeri}bvhWX^j ðì·é±Æ 41 ÅCCÓÌAhXÉzuÂ\Å éD 42 43 Dæx 44 45 lª¬³¢ûªDæxÆÈéD 46 47 DæxÍÅå8bitÅ èCSoCÉÀ³êÄ¢érbgªÙÈéDÀ³ 48 êérbgª8bitȺÌêÍCLSB©ç³øÉÈéDá¦ÎCÀ³êÄ¢ 49 érbgª7bitÌêÍCrbg0ª³øÆÈéD 50 51 DæxÌrbgtB[hÌLSB©çrbgðTuDæxÆÄÔtB[h 52 ÉÝè·é±ÆªÂ\Å éDcèÌãÊrbgðvGvVDæxÆ 53 ÄÔDvGvVDæxª¯¶ÅCTuDæxªÙÈéDæxÌO[ 54 vÍC¨Ý¢ðvGvg·é±ÆªÅ«È¢D 55 56 Reset,NMI,Hard Fault ÈOÌáOÍÝƯlÉDæxªÝèÂ\Å èC 57 Ý}XN@\ÉæèC¶ðÖ~·é±ÆªÂ\Å éD 58 59 CPU[h 60 61 vZbTÍCThread[hàµÍHandler[hÌ¢¸ê©Ì[hÆÈ 62 éD 63 64 ZbgÌóÔ 65 66 ZbgÍThread[hCMSPªLøÆÈÁÄ¢éD 67 68 Handler[h 69 70 áO/Ýðó¯t¯éÆJÚ·é[hDó¯t¯½áO/ÝÌáOÔ 71 ªCIPSRÉZbg³êéDáOÔÍCTRMÅèßçêÄ¢éÔÅ éD 72 73 áO áOÔ 6 ○このドキュメントの位置づけ 7 8 このドキュメントは,TOPPERS/ASPカーネルをARMvX-Mプロセッサに移植するため 9 の設計メモである. 10 11 12 ○ARMVx-Mの仕様まとめ 13 14 ARMvX-Mの仕様のうち,カーネルの設計に関係する事項についてまとめる. 15 16 ●レジスタ 17 18 汎用レジスタはR0〜R15の16種類あり,R13のみが2バンク構成(PSP,MSP)とな 19 っている.R15はPC, R14はリンクレジスタ(LR)となっている.R0〜R3,R12は 20 スクラッチレジスタである. 21 22 ●コーリングコンベンション 23 24 R0〜R4が引数,それ以上はスタック.戻り値は,R0〜R1に格納される.(ARMに 25 より規定されているため,コンパイラに依存せずこのルールとなる.) 26 27 ●CONTROLレジスタ 28 29 PSP,MSPの切り替え,PrivilageとUserモードのレジスタ.変更後は,インスト 30 ラクションバッファフラッシュ命令を実行する必要がある(isb).CONTROLレ 31 ジスタの詳細は,ARMv7-M Architecture Application Level Reference 32 Manual の B1-9 を参照のこと. 33 34 ●割込みベクタ 35 36 ベクタテーブル型で,ベクタテーブルのアドレスは,リセット時は0x00で, 37 Vector 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 53 Reset,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 例外 例外番号 74 71 Reset 1 75 72 Non-makable Interrupt 2 … … 86 83 .. 87 84 88 áO/Ýðó¯t¯éÆCó¯t¯½áO/ÝÌDæxȺÌáO/ 89 ÝðÖ~·éD±ÌDæx}XNð"NVICDæx}XN"ÆÄÔD±ÌDæx 90 ÍC\tgEFA©çÏX·é±ÆªÅ«¸CáO/ÝÌ^[Éæè 91 ÝOÌlÉ©®IÉßéD 92 93 X^bN|C^iPSPÆMSPj 94 95 X^bN|C^ÍCPSPÆMSPª èCr¼IÉgpÂ\Å éDHandler 96 [hÅÍMSPÌÝgpÂ\Å èCThread[hÅÍCONTROLWX^ÅIð 97 \Å éDCONTROLWX^Ì1rbgÚðZbg·éÆPSPªLøÉCNA 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 ÄÔjDEXC_RETURN̺Ê4bitÉæèCJÚæÌ[hâgp·éX^bN| 106 C^ðÏXÂ\Å éDáO^[ÉæèCPRIMASKâBASEPRIÌlÍÏ» 107 µÈ¢DêûCFAULTMASKÌlÍ'0'ÉNA³¹éD 108 109 EXC_RETURN110 111 áO/Ýót¯ÉlrÉÝè³êélDrbg31`4rbgÍSÄ'1'ÅC 112 ºÊ4bitÍCót¯ÌCPU[hâX^bNð½fµ½lÆÈÁÄ¢éD 113 114 0b0001 : Handler [h115 0b1001 : Thread [hwith MSP116 0b1101 : Thread [hwith PSP117 118 Thread[hÆHandler[hÌ»è 119 120 »óÌ[hð»è·éÉÍCIPSRð©ÄC'0'ÈçThread[hC»êÈO 121 ÈçCHandler[hÆÈéD 122 123 BASEPRIWX^ 124 125 Ýèµ½DæxȺÌDæxÌÝÌótðÖ~·éD±ÌDæx}XNð 126 "BASEPRI Dæx}XN"ÆÄÔD'0'ðÝè·éÆCSÄÌÝð·éD127 áO/ÝÌótÆ^[ÉæèÏ»µÈ¢DáO/ÝÉηéÝ 128 Dæx}XNÍCNVICDæx}XNÆBASEPRIÌÝèlÌ¢ûilª¬³¢ 129 ûjÆÈéD 130 131 FAULTMASK132 133 FAULTMASK Í'1'ðZbg·é±ÆÉæèCNMIÈOÌSÄÌÝðÖ~·éD134 FAULTMASK ÍCáOÌ^[Éæè'0'ÉNA³¹éD135 136 PRIMASKÆWFI137 138 PRIMASK ð'1'ÉÝè·éÆCNMI Æ Hardware Fault ÈOÌáO/ÝðÖ139 ~·éDPRIMASKÍÝÌÂÆÝÒ¿ðAg~bNÉs¤½ßÉp¢ 140 éDïÌIÉÍCPRIMASKªZbg³êÄ¢éóÔÅwfiðÀs·éÆCè 141 ÝÒ¿ÆÈèCÝót¯éÆnhðÀs¹¸ÉCwfi©ç^[µ 142 ÄéD 143 144 áO/ÝÌót 145 146 EáO/Ýðót¯éÆCót¯ÉANeBuÈX^bNãÉȺÌR 147 eLXgðÛ¶·é(áOt[ÆÄÔ)D85 例外/割込みを受け付けると,受け付けた例外/割込みの優先度以下の例外/割 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 99 ThreadモードからHandlerモードへの遷移は,例外/割込みを受け付けることで 100 発生する.一方,HandlerモードからThreadモードへの遷移は,PCに 101 EXC_RETURN(0xfffffffx)の値を設定することにより行う(例外リターン処理と 102 呼ぶ).EXC_RETURNの下位4bitにより,遷移先のモードや使用するスタックポ 103 インタを変更可能である.例外リターンにより,PRIMASKやBASEPRIの値は変化 104 しない.一方,FAULTMASKの値は'0'にクリアさせる. 105 106 ●EXC_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 128 ●FAULTMASK 129 130 FAULTMASKは'1'をセットすることにより,NMI以外の全ての割込みを禁止する. 131 FAULTMASKは,例外のリターン処理により'0'にクリアさせる. 132 133 ●PRIMASKとWFI 134 135 PRIMASKを'1'に設定すると,NMI と Hardware Fault 以外の例外/割込みを禁 136 止する.PRIMASKは割込みの許可と割込み待ちをアトミックに行うために用い 137 る.具体的には,PRIMASKがセットされている状態でwfiを実行すると,割り込 138 み待ちとなり,割込み受付けるとハンドラを実行せずに,wfiからリターンし 139 てくる. 140 141 ●例外/割込みの受付 142 143 ・例外/割込みを受付けると,受付け時にアクティブなスタック上に以下のコ 144 ンテキストを保存する(例外フレームと呼ぶ). 148 145 149 146 ----------- … … 166 163 | | <- old SP 167 164 168 EvZbTðHandler[hÆ·éDMSPªLøÆÈéD 169 Eót¯½áO/ÝÌáOÔðIPSRÉÝè·éD 170 ENVICÝDæx}XNðót¯½áO/ÝÌDæxÉÝè·éD 171 ElrÉEXC_RETURNÌlªÝè³êéD 172 ExN^e[uðÇÝÝnhðÀs·éD 173 174 áO/Ý©çÌ^[ 175 176 pc ÉEXC_RETURNÌlðÝè·é±ÆÉæèCáO/Ý©ç^[·éD177 pc ÖÌÝèÉgpÂ\ȽßÉͧÀª èCȺ½ßªgpÂ\Å éD178 179 EPOP/LDM, LDR, BX180 181 ¢ðÛè 182 183 ExN^[e[uÉo^·éÖÌAhXÌLSBÍ'1'É·é׫©?184 ENVICÍáOEÝÌlXgñðàIÉǵĢéçµ¢D 185 (! t@Xð¾ç©É)D186 \tgEFAÅÍClXgÌ Kðí¹êÎC^[X^bNðU¢µ187 ÄàâèÈ¢©D188 189 190 OSÌÀ 191 192 1. ^[Qbg¼165 ・プロセッサをHandlerモードとする.MSPが有効となる. 166 ・受付けた例外/割込みの例外番号をIPSRに設定する. 167 ・NVIC割込み優先度マスクを受付けた例外/割込みの優先度に設定する. 168 ・lrにEXC_RETURNの値が設定される. 169 ・ベクタテーブルを読み込みハンドラを実行する. 170 171 ●例外/割込みからのリターン 172 173 pcにEXC_RETURNの値を設定することにより,例外/割込みからリターンする. 174 pcへの設定に使用可能な命令には制限があり,以下命令が使用可能である. 175 176 ・POP/LDM, LDR, BX 177 178 ●未解決課題 179 180 ・ベクターテーブルに登録する関数のアドレスのLSBは'1'にするべきか? 181 ・NVICは例外・割込みのネスト回数を内部的に管理しているらしい. 182 (!リファレンスを明らかに). 183 ソフトウェアでは,ネストの帳尻を合わせれば,リターンスタックを偽造し 184 ても問題ないか. 185 186 187 ○OSの実装 188 189 1.ターゲット名 193 190 194 191 1-1 cm3(Cortex-M3) … … 196 193 1-3 arm_m 197 194 198 cm3 ÅÍCCoretex-M1(armv6-m)ðT|[g·éêÉâèÆÈéDarmv7mÅÍC199 armv8m ª[X³ê½êÉâèÆÈéDARM˶ÍJSPÅÍCarmv4ÆÈ200 ÁÄ¢½ªCarmv5âarmv7à®ì·é½ßASPÅÍPÉarmƵ½D»Ì½ßC 201 arm_m ª³ïÆl¦çêéD202 203 204 2.Thread [hÆHandler[hÌg¢ª¯195 cm3では,Coretex-M1(armv6-m)をサポートする場合に問題となる.armv7mでは, 196 armv8mがリリースされた場合に問題となる.ARM依存部はJSPでは,armv4とな 197 っていたが,armv5やarmv7も動作するためASPでは単にarmとした.そのため, 198 arm_mが無難と考えられる. 199 200 201 2.ThreadモードとHandlerモードの使い分け 205 202 206 203 2-1 207 ^XNReLXgÍThread[hCñ^XNReLXgÍHandler[208 hŮ쳹éD204 タスクコンテキストはThreadモード,非タスクコンテキストはHandlerモー 205 ドで動作させる. 209 206 210 207 2-2 211 ^XNReLXgÆñ^XNReLXg¤ÉHandler[hŮ쳹212 éD213 214 vZbTÌÝvûjðl¶·éÆ2-1ªLÍD2-1ÅÌâè_ƵÄÍC 215 Ýnh©ç^XNÖÌ^[É[hÌÏXªÈºÌlɽ·é± 216 ƪ°çêéD 217 218 1. Ýnh : Handler[h219 2. ^XNáOnhÌÄÑoµ : Thread[h220 3. ^XNÖÌ^[ : Handler[h221 4. ^XNÌÄJ : Thread[h222 223 3 ÅHandler[hÉÚs·éKvª éÌÍCáOt[ðp¢ÄA·é224 ÉÍCHandler[hÅáO^[ðs¤Kvª é½ßÅ éDARMÅ 225 ÍC¡WX^Ì[hÆCPSRÌAð¯És¦éªCM3Ís¦È¢½ßC 226 ±Ìû@ÅÝæÌ^XNÉ^[·éKvª éD 227 228 2-2 ÌêÌÝnh©ç^XNÖÌ^[É[hÌÏXðȺ229 ɦ·DܽC2-2ÅÍÝDæxÌÅálð^XNÌÀsÌDæxƵ 230 ÄU[u·éKvª éD 231 232 1. Ýnh : Handler[h233 2.NVIC Dæx}XN'0'ð0Ö : Thread[h234 3. ÅáDæxÌHandler[hÖ : Handler[h235 4. ^XNáOnhÌÄÑoµ : Handler[h236 5. ^XNÖÌ^[ÌO : Thread[h237 3. ^XNÖÌ^[ : Handler[h238 4. ^XNÌÄJ : Handler[h239 240 Ýnh©ç^XNÌ^[ÉÖµÄÍC2-2Å ÁÄàC2ðÀs· 241 éêÉCNVICDæx}XNð'0'É·é½ßCáO^[ðs¤Kv 242 ª éDܽCNVIC©ÌªCÝÌlXgñðǵĢé½ßC3©ç4243 ÖÌJÚ̽ßÉC¢Á½ñáO/Ýðót¯½óÔÉ·éKvª é½ 244 ßCÊIÉ2-1ÈãÌJÚªKvÆÈéD 245 246 2-2 ÌêÍCMSPµ©g¦È¢½ßCÝÌüèûÅlXgñð»fµÄC247 X^bNðüêÖ¦éKvª éD 248 249 HRP ÅÛìðp¢éêÍ2-1ÆÈéD250 251 ÈãÌRÉæèC2-1ðÌp·éD½¾µ2-1ÍCJ[lN®ÆIDLE[ 252 v̵¢ð¢·éKvª éD±êçÉ¢ÄÍÊrc_·éD 253 254 255 3. fBXpb`ÌÀs[h208 タスクコンテキストと非タスクコンテキスト共にHandlerモードで動作させ 209 る. 210 211 プロセッサの設計方針を考慮すると2-1が有力.2-1での問題点としては,割込 212 みハンドラからタスクへのリターン時にモードの変更が以下の様に多発するこ 213 とが挙げられる. 214 215 1.割込みハンドラ : Handlerモード 216 2.タスク例外ハンドラの呼び出し : Threadモード 217 3.タスクへのリターン処理 : Handlerモード 218 4.タスクの再開 : Threadモード 219 220 3でHandlerモードに移行する必要があるのは,例外フレームを用いて復帰する 221 には,Handlerモードで例外リターン処理を行う必要があるためである.ARMで 222 は,複数レジスタのロードとCPSRの復帰を同時に行えるが,M3は行えないため, 223 この方法で割込み先のタスクにリターンする必要がある. 224 225 2-2の場合の割込みハンドラからタスクへのリターン時にモードの変更を以下 226 に示す.また,2-2では割込み優先度の最低値をタスクの実行時の優先度とし 227 てリザーブする必要がある. 228 229 1.割込みハンドラ : Handlerモード 230 2.NVIC優先度マスク'0'を0へ : Threadモード 231 3.最低優先度のHandlerモードへ : Handlerモード 232 4.タスク例外ハンドラの呼び出し : Handlerモード 233 5.タスクへのリターンの前処理 : Threadモード 234 3.タスクへのリターン : Handlerモード 235 4.タスクの再開 : Handlerモード 236 237 割込みハンドラからタスクのリターンに関しては,2-2であっても,2を実行す 238 る場合に,NVIC優先度マスクを'0'にするため,例外リターン処理を行う必要 239 がある.また,NVIC自体が,割込みのネスト回数を管理しているため,3から4 240 への遷移のために,いったん例外/割込みを受付けた状態にする必要があるた 241 め,結果的に2-1以上の遷移が必要となる. 242 243 2-2の場合は,MSPしか使えないため,割込みの入り口でネスト回数を判断して, 244 スタックを入れ替える必要がある. 245 246 HRP等でメモリ保護を用いる場合は2-1となる. 247 248 以上の理由により,2-1を採用する.ただし2-1は,カーネル起動時とIDLEルー 249 プの扱いを検討する必要がある.これらについては別途議論する. 250 251 252 3.ディスパッチャの実行モード 256 253 257 254 3-1 258 Thread [hÅÀs·é255 Threadモードで実行する 259 256 260 257 3-2 261 Handler [hÅÀs·é262 263 fBXpb`ðThread[hÅÀs·éÆCÝÉæèvGvg³ê 264 ½^XNÉßéêÍÌæ¤ÈpXÉÈéD 265 266 1. fBXpb`ÄÑoµ : Thread[h267 2. fBXpb`Às : Thread[h268 3. ^XNáOÀs : Thread[h269 4 D^XNÖÌ^[ : Handler[h270 5. ^XNÌÄJ : Thread[h271 272 Ýnh©ç©çfBXpb`µ½^XNÖ^[·éêÍÌp 273 XÉÈéD 274 275 1. Ýnh : Handler[h276 2. fBXpb`Às : Thread[h277 3. ^XNáOnhÌÄÑoµ : Thread[h278 4. ^XNÖÌ^[ : Handler[h279 5. ^XNÌÄJ : Thread[h280 281 êûCfBXpb`ðHandler[hÅÀs·éÆCÝÉæèvG 282 vg³ê½^XNÉßéêÍÌæ¤ÈpXÉÈéD 283 284 1. fBXpb`ÄÑoµ : Thread[h285 2. fBXpb`Às : Handler[h286 3. ^XNáOÀs : Thread[h287 4 D^XNÖÌ^[ : Handler[h288 5. ^XNÌÄJ : Thread[h289 290 ÝnhÌoû©ç©çfBXpb`µ½^XNÖ^[·éêÍ 291 ÌpXÉÈéD 292 293 1. Ýnh : Handler[h294 2. fBXpb`Às : Handler[h295 3. ^XNáOnhÌÄÑoµ : Thread[h296 4. ^XNÖÌ^[ : Handler[h297 5. ^XNÌÄJ : Thread[h298 299 ^XNáOnhªÈ¢OSÌêÍCHandler[hÅÀsµ½ûª[h 300 ÌJÚÌñª¸éªC^XNáOnhª éÆCThread[hÌûªJ 301 Úñª¸é½ßCThread[hÆ·éD 302 303 Ûìðl¶·éÆCfBXpb`ÍHandler[hŮ쳹½ûª 304 ø¦ªæ¢Æl¦çêéiSVCÅnhðÄÑo·ÆHandler[hÆÈé½ 305 ßjD 306 307 308 4. X^bNÌ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 305 4.スタックの使い分け 309 306 310 307 4-1 311 ^XNReLXgðPSP, ñ^XNReLXgðMSP308 タスクコンテキストをPSP, 非タスクコンテキストをMSP 312 309 4-2 313 ^XNReLXgCñ^XNReLXg¤ÉMSP314 315 4-2 ÌêCÝÌüèûÅlXgñð»fµÄCX^bNðüêÖ¦é316 Kvª éD2Å^XNReLXgÍThread[hCñ^XNReLXg 317 ÍHandler[hŮ쳹éƵ½½ßC4-1ðÌp·éÆCÝÌüèû 318 Å©®IÉX^bNªØèÖíéDThread[hÅÌPSPÌANZXàC 319 mrs/msr ½ßÅs¦é½ßC4-1ðÌp·éD320 321 322 5. ReLXgÌ»è310 タスクコンテキスト,非タスクコンテキスト共にMSP 311 312 4-2の場合,割込みの入り口でネスト回数を判断して,スタックを入れ替える 313 必要がある.2でタスクコンテキストはThreadモード,非タスクコンテキスト 314 はHandlerモードで動作させるとしたため,4-1を採用すると,割込みの入り口 315 で自動的にスタックが切り替わる.ThreadモードでのPSPのアクセスも, 316 mrs/msr命令で行えるため,4-1を採用する. 317 318 319 5.コンテキストの判定 323 320 324 321 5-1 325 IPSR ª'0'(Thread[h)Èç^XN^XNReLXgC'1'(Handler[326 h)Èçñ^XNReLXgÆ·éD322 IPSRが'0'(Threadモード)ならタスクタスクコンテキスト,'1'(Handlerモー 323 ド)なら非タスクコンテキストとする. 327 324 328 325 5-2 329 ÝÌlXgñðÛ·éÏðpÓD1ÈãÅñ^XNReLXgD326 割込みのネスト回数を保持する変数を用意.1以上で非タスクコンテキスト. 330 327 331 328 5-3 332 ANeBuÈX^bNÉæè»fiMSPÈçñ^XNReLXgCPSPÈç333 ^XNReLXgÆ·éj334 335 5-1 ÍC\tgEFA¤ÅReLXgÇ̽ßÌðs¤KvªÈ¢Æ336 ¢¤bgª éDµ©µÈªçCJ[lÌN®Thread[hÅ é½ 337 ßCHandler[hÖÚs·éKvª éDASPJ[lÅÍCIDLE[vÀs 338 Íñ^XNReLXgƵĮ쳹éKvª é½ßCIDLE[vÍ 339 Handler [hŮ쳹éKvª éDIDLE[vÍfBXpb`©çÄ340 Ño³êéD3Åèß½æ¤ÉCfBXpb`ðThread[hŮ쳹é 341 ½ßCIDLE[vðÄÑo·ÛÉÍCHandler[hÖJÚ·éKvª éD 342 Handler [hÖÌJÚÍCSVC/PendSVCðp¢éÆÀ»Â\Å éªC6Ì343 ÝÉvGvg³ê½^XNÖÌ^[ÌHandler[hÖÌÚsÅ 344 àSVC/PendSVCÌgpªKvÆÈé½ßCSVCnhÅÍCÇÌÚIÅÄÑo 345 ³ê½©»è·éKvªoÄé½ßCI[owbhªå·éD 346 347 5-2 ÅÍCJ[lN®âIDLE[vÉÏð'1'ÉÝè·êÎ梱ÆÉ348 ÈéD±ÌêCJ[lN®âIDLE[vÉThread[hÅÀsµÄà 349 ®ìÉâèªÈ¢æ¤CÁÉÝÌoüèûÌÝvðÓ·éKvª éD 350 351 J[lN®ÉÖµÄÍCSÝðÖ~µÄ¨èCݪüçÈ¢ÌÅ 352 ÁÉâèÍÈ¢DIDLE[vÍCThread[hÅMSPÆPSPÌIðªÂ\Å 353 é±ÆðpµÄCñ^XNReLXgÌX^bNÅ éMSPÉÏX·éD 354 áO/ÝÌüèûÅÍC½dÝÅ é©ðEXC_RETURNÌ[h»èÌ 355 rbgÅÍÈCX^bNÌ»èrbgÅs¦ÎâèÈ¢DáO/Ý©ç 356 Ì^[ÉÖµÄÍC½dÝÌ»èÍCüèûƯlÉEXC_RETURNÌX 357 ^bN»èrbgÅs¦Îæ¢DáO^[ÉpcÉãü·é 358 EXC_RETURN Ìlðê¥0xfffffffd (Thread[h with MSP)Æ·éÌÅÍÈC359 áO/Ýót¯ÉLRÉÝè³êéEXC_RETURNðp¢é±ÆÉæèCIDLE360 [vÉèñ¾êÅàâèÈ^[·éD 361 362 J[lN®ÍCMSPªANeBuÅ èCÝnhÀsÍHandler363 [hÅ é±Æ©çMSPªANeBuÅèCIDLE[vÉMSPðANeBu 364 ÉÝè·éÆCñ^XNReLXgÍSÄCMSPðANeBuÉµÄ®ì· 365 é±ÆÉÈéDܽCÝÍÝOÉANeBuÈX^bNÌîñªC 366 EXC_RETURN ÉÝè³êéD»Ì½ßCReLXgÌ»èÍCÝlXgñ367 ðÛ·éϪÈÆàCANeBuÈX^bNð©êÎ梱ÆÉÈéD 368 ܽCexc_sense_context()ÉÖµÄÍCáOt[ÉEXC_RETURNðÇÁ 369 µC»ÌàeÉæè»f·êÎæ¢DÈãÌRÉæèC5-3ðÌp·éD 370 371 372 6. ÝÉvGvg³ê½^XNÖÌ^[ÌHandler[hÖÌÚ373 sû@329 アクティブなスタックにより判断(MSPなら非タスクコンテキスト,PSPなら 330 タスクコンテキストとする) 331 332 5-1は,ソフトウェア側でコンテキスト管理のための処理を行う必要がないと 333 いうメリットがある.しかしながら,カーネルの起動時Threadモードであるた 334 め,Handlerモードへ移行する必要がある.ASPカーネルでは,IDLEループ実行 335 は非タスクコンテキストとして動作させる必要があるため,IDLEループは 336 Handlerモードで動作させる必要がある.IDLEループはディスパッチャから呼 337 び出される.3で定めたように,ディスパッチャをThreadモードで動作させる 338 ため,IDLEループを呼び出す際には,Handlerモードへ遷移する必要がある. 339 Handlerモードへの遷移は,SVC/PendSVCを用いると実現可能であるが,6の割 340 込みにプリエンプトされたタスクへのリターン時のHandlerモードへの移行で 341 もSVC/PendSVCの使用が必要となるため,SVCハンドラでは,どの目的で呼び出 342 されたか判定する必要が出てくるため,オーバヘッドが増大する. 343 344 5-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に代入する 355 EXC_RETURNの値を一律0xfffffffd (Threadモード with MSP)とするのではなく, 356 例外/割込み受付け時にLRに設定されるEXC_RETURNを用いることにより,IDLE 357 ループに割り込んだ場合でも問題なくリターンする. 358 359 カーネル起動時は,MSPがアクティブであり,割込みハンドラ実行時はHandler 360 モードであることからMSPがアクティブでり,IDLEループ時にMSPをアクティブ 361 に設定すると,非タスクコンテキストは全て,MSPをアクティブにして動作す 362 ることになる.また,割込み時は割込み前にアクティブなスタックの情報が, 363 EXC_RETURNに設定される.そのため,コンテキストの判定は,割込みネスト回 364 数を保持する変数がなくとも,アクティブなスタックを見ればよいことになる. 365 また,exc_sense_context()に関しては,例外フレーム中にEXC_RETURNを追加 366 し,その内容により判断すればよい.以上の理由により,5-3を採用する. 367 368 369 6.割込みにプリエンプトされたタスクへのリターン時のHandlerモードへの移 370 行方法 374 371 375 372 6-1 376 SVC ðp¢é373 SVCを用いる 377 374 6-2 378 PendSVCðp¢é 379 380 PendSVCÆSVCÌá¢ÍCPendSVCªvªL 381 [CO³êCSVCÍvªL 382 383 [CO³êÈ¢±ÆÅ éDÝÉvGvg³ê½^XNÖÌ^[ 384 ÌHandler[hÖÌÚsÍCL 385 [CO³ê¸É¦ÀɳêéK 386 vª é½ßCÇ¿çÅÀ»µÄàâèÈ¢DÇ¿çðJ[lÌ\[Xµ 387 Ägp·é©ÌIð¾¯Å éD 388 389 Ç¿çðg¤ÆµÄàCDæxÌÝèªâèÆÈéDfBXpb`©ç 390 ÝÉvGvg³ê½^XNÖÌ^[ÜÅÌÍCÈÆàCPU 391 bNóÔÅÀs³êȯêÎÈçÈ¢DSVCâPendSVCÍÇ¿çàÝDæx 392 ð½ßCNVICDæx}XNæèBASEPRIDæx}XNÌûª¢êC 393 ³êÈ¢D 394 395 CPUbNóÔðBASEPRIÌÝèÅÀ»µ½êC»ÌÝèlðSVCâPendSVCÉ 396 Ýèµ½læèá·éKvª éD¾¢·¦éÆCSVCâPendSVCÌDæxð 397 CPUbNÌDæx}XNÌlæè¢li¼ÌÝæè¢DæxjÆ 398 ·éKvª éD 399 400 CPUbNóÔðFAULTMASKâPRIMASKÅÀ»µ½êÍC±êçªÝè³êé 401 ÆCSVCâPendSVCªót¯çêÈ¢½ßC¢Á½ñBASEPRIÉæèÝð} 402 XN·éæ¤ÉÝè·éKvª éD±ÌêàCSVCâPendSVCͼÌÝ 403 æè¢DæxðÝè·éKvª éD 404 405 ÈãÉæèCHandler[hÖÌÚs̽ßÉÍCCPUbNóÔðBASEPRIÅ 406 À»µCSVCâPendSVCÉÝè·éDæxðJ[lÇàÌÅDæxæèê 407 ¢DæxÉÝè·éKvª éD 408 409 410 7. áO/ÝoüèûÅ̽dÝÌ»f 375 PendSVCを用いる 376 377 PendSVCとSVCの違いは,PendSVCが要求がキューイングされ,SVCは要求がキュ 378 ーイングされないことである.割込みにプリエンプトされたタスクへのリター 379 ン時のHandlerモードへの移行は,キューイングされずに即座に処理される必 380 要があるため,どちらで実現しても問題ない.どちらをカーネルのリソースし 381 て使用するかの選択だけである. 382 383 どちらを使うとしても,優先度の設定が問題となる.ディスパッチャから割込 384 みにプリエンプトされたタスクへのリターンまでの処理は,少なくともCPUロ 385 ック状態で実行されなければならない.SVCやPendSVCはどちらも割込み優先度 386 を持つため,NVIC優先度マスクよりBASEPRI優先度マスクの方が高い場合,処 387 理されない. 388 389 CPUロック状態をBASEPRIの設定で実現した場合,その設定値をSVCやPendSVCに 390 設定した値より低くする必要がある.言い換えると,SVCやPendSVCの優先度を 391 CPUロック時の優先度マスクの値より高い値(他の割込みより高い優先度)と 392 する必要がある. 393 394 CPUロック状態をFAULTMASKやPRIMASKで実現した場合は,これらが設定される 395 と,SVCやPendSVCが受付けられないため,いったんBASEPRIにより割込みをマ 396 スクするように設定する必要がある.この場合も,SVCやPendSVCは他の割込み 397 より高い優先度を設定する必要がある. 398 399 以上により,Handlerモードへの移行のためには,CPUロック状態をBASEPRIで 400 実現し,SVCやPendSVCに設定する優先度をカーネル管理内の最高優先度より一 401 つ高い優先度に設定する必要がある. 402 403 404 7. 例外/割込み出入り口での多重割込みの判断 411 405 412 406 7-1 413 EXC_RETURN Ì[h»èrbg407 EXC_RETURNのモード判定ビット 414 408 7-2 415 EXC_RETURN ÌX^bN»èrbg409 EXC_RETURNのスタック判定ビット 416 410 7-3 417 ÝlXgñÌÇÏ418 419 áO/Ýót¯ÍCót¯½áO/ÝȺÌÝÍÖ~·éªCS 420 ÝÖ~óÔÉÍÈçÈ¢D»Ì½ßCÝlXgñÌÇÏðC 421 Ng·éOÉݪüéÂ\«ª é½ßC7-3Ígp·é±ÆªÅ 422 «È¢D 423 424 5 Åc_µ½ÊèCIDLE[vðThread[hÅÀs·é½ßC7-1ÅÍÈC425 7-2 Å»f·éKvª éD426 427 428 8. IDLE [v411 割込みネスト回数の管理変数 412 413 例外/割込み受付け時は,受付けた例外/割込み以下の割込みは禁止するが,全 414 割込み禁止状態にはならない.そのため,割込みネスト回数の管理変数をイン 415 クリメントする前に割込みが入る可能性があるため,7-3は使用することがで 416 きない. 417 418 5で議論した通り,IDLEループをThreadモードで実行するため,7-1ではなく, 419 7-2で判断する必要がある. 420 421 422 8. IDLEループ 429 423 430 424 8-1 431 Thread [hÅÀs425 Threadモードで実行 432 426 8-2 433 Handler [hÅÀs434 435 5 Åc_µ½ÊèCThread[hÅÀsÅ«½ûªI[owbhª¬³¢DÜ436 ½CThread[hÅÀsµÄàCèÝÌoüèûųµñ^XNRe 437 LXgÆ»èÅ«êÎCThread[hÅâèÈ¢D 438 439 440 9 DJ[lÇOÌÝÌT|[g427 Handlerモードで実行 428 429 5で議論した通り,Threadモードで実行できた方がオーバヘッドが小さい.ま 430 た,Threadモードで実行しても,割り込みの出入り口で正しく非タスクコンテ 431 キストと判定できれば,Threadモードで問題ない. 432 433 434 9.カーネル管理外の割込みのサポート 441 435 442 436 9-1 443 J[lÇOÌÝðT|[gµÈ¢437 カーネル管理外の割込みをサポートしない 444 438 9-2 445 J[lÇOÌÝðT|[g·é446 447 xN^e[uðT|[gµÄ¨èCÝnhàC¾êÅLqÂ\Å 448 é½ßCT|[gªeÕÅ é½ßCT|[g·éD 449 450 451 10. CPU bN439 カーネル管理外の割込みをサポートする 440 441 ベクタテーブルをサポートしており,割込みハンドラもC言語で記述可能であ 442 るため,サポートが容易であるため,サポートする. 443 444 445 10. CPUロック 452 446 453 447 10-1 454 BASEPRI ðgp448 BASEPRIを使用 455 449 10-2 456 FAULTMASK/PRIMASK ðgp457 458 J[lÌÇOÌÝðT|[g·éÈçCBASEPRIðgp·éKvª 459 éD 460 461 462 11. ÝbNÆCPUáOÌÖW450 FAULTMASK/PRIMASKを使用 451 452 カーネルの管理外の割込みをサポートするなら,BASEPRIを使用する必要があ 453 る. 454 455 456 11. 割込みロックとCPU例外の関係 463 457 464 458 11-1 465 BASEPRI ðgp459 BASEPRIを使用 466 460 11-2 467 FAULTMASK/PRIMASKðgp 468 469 FAULTMASK/PRIMASKðgp·éÆCNMI Æ Hardware Fault ÈOÌCPUáOàÖ 470 ~³êĵܤD 471 472 BASEPRIðp¢éÆCÝbNÉàCPUáOðót¯½¢êÍC 473 BASEPRIðp¢ÄCÅDæxðCPUáO̽ßÉU[u·éKvª éD 474 475 ÝbNàCCPUáOðót¯éæ¤Éµ½¯êÎBASEPRIðgp·éK 476 vª éD 477 478 ÊIRON4.0dlÌ3.5.3ÅÍCCPUáOÌDæxÍÌæ¤ÉèßçêÄ¢éD 479 480 "CPUáOnhÌDæÊÍCCPUáOª¶µ½ÌDæxÆCfBX 481 pb`ÌDæÊÌ¢¸ê©æèà¢D" 482 483 CPUáOª¶µ½ÌDæxæèà¢Æ éÌÅCCPUbNâÝ 484 bNóÔÌ^XNŶµ½êÅàCDæµÄÀs³êé׫¾Æàl¦ç 485 êéD 486 487 êûCTOPPERSWÝfÌdlÅÍCCPUáOÍCvZbT 488 ÉÙÈé½ßCCPUáOÌfÌW»¢ÌÎÛOƵĢéD»Ì 489 ½ßCARM-MÅ̵¢ðßÄC}j 490 AɾL·êÎæ¢Æl¦çêéD 491 492 493 12. ODæxÆàDæxÌÏ· 494 495 ODæxÆÍAPIÅwè·éÝDæx(PRI^)̱ÆÅ èClª¬³¢ 496 ÙÇDæxª¢DÝnhÉÍC-1©çA±µ½ÌlðÝèÂ\Å 497 éDàDæxÍCBASEPRIâNVICÌDæxWX^ÉÝè·élÅ éD 498 499 À³êéÝDæxÌrbgð TBITW_IPRI Æ·éÆCÝèÂ\ÈO 500 DæxÍÌæ¤ÉÈéD 501 502 TIPM_ENAALLi0j` -(1 << TBITW_IPRI) 503 504 505 13. J[lÇàÌÅDæx(CPUbNóÔÅÌDæx}XN) 506 507 6.Åq×½æ¤ÉCÝÌoûÅSVCnhðÄÑo·Kvª é½ßC 508 SVCnhÍCPUbNóÔÌBASEPRIÉÝè·éDæx}XNæè¢Dæx 509 ðÝè·éKvª éD 510 511 À³êéÝDæxÌrbgð TBITW_IPRICDæxÌTuDæxÌ 512 rbgðTBIT_IPRIÆ·éÆCCPUbNóÔiJ[lÇàÝÉÝè 513 Â\ÈÅDæxjƵÄwèÂ\ÈDæx}XNÌÝèÍÍÍȺÌlÌÍ 514 ÍÆÈéD 515 516 -(2^(TBIW_IPRI)) + (2^TBITW_SUBIPRI)) ` -1 517 518 519 14. ¢ðÛè 520 521 EÝbNÆCPUáOÌÖW 522 BASEPRIðgÁ½ÆµÄàC éCPUáOɼÌáOª¶·éÆC» 523 ÌáOÍó¯t¯çêÈ¢½ßCITRONdlͽ¹È¢D 524 -> «çßÄ}j 525 ALÚɦ°é©. 526 veNVÌáOà}XNÂ\Å é½ßvD 527 528 529 ÈãD 461 FAULTMASK/PRIMASKを使用 462 463 FAULTMASK/PRIMASKを使用すると,NMI と Hardware Fault 以外のCPU例外も禁 464 止されてしまう. 465 466 BASEPRIを用いると,割込みロック中にもCPU例外を受付けたい場合は, 467 BASEPRIを用いて,最高優先度をCPU例外のためにリザーブする必要がある. 468 469 割込みロック時も,CPU例外を受付けるようにしたければBASEPRIを使用する必 470 要がある. 471 472 μIRON4.0仕様の3.5.3では,CPU例外の優先度は次のように定められている. 473 474 "CPU例外ハンドラの優先順位は,CPU例外が発生した処理の優先度と,ディス 475 パッチャの優先順位のいずれかよりも高い." 476 477 CPU例外が発生した処理の優先度よりも高いとあるので,CPUロックや割込みロ 478 ック状態のタスクで発生した場合でも,優先して実行されるべきだとも考えら 479 れる. 480 481 一方,TOPPERS標準割込み処理モデルの仕様書では,CPU例外は,プロセッサ毎 482 に異なるため,CPU例外の処理モデルの標準化検討の対象外としている.その 483 ため,ARM-Mでの扱いを決めて,マニュアルに明記すればよいと考えられる. 484 485 486 12. 外部優先度と内部優先度の変換 487 488 外部優先度とはAPIで指定する割込み優先度(PRI型)のことであり,値が小さい 489 ほど優先度が高い.割込みハンドラには,-1から連続した負の値を設定可能で 490 ある.内部優先度は,BASEPRIやNVICの優先度レジスタに設定する値である. 491 492 実装される割込み優先度のビット幅を TBITW_IPRI とすると,設定可能な外部 493 優先度は次のようになる. 494 495 TIPM_ENAALL(=0)〜 -(1 << TBITW_IPRI) 496 497 498 13. カーネル管理内の最高優先度(CPUロック状態での優先度マスク) 499 500 6.で述べたように,割込みの出口でSVCハンドラを呼び出す必要があるため, 501 SVCハンドラはCPUロック状態のBASEPRIに設定する優先度マスクより高い優先度 502 を設定する必要がある. 503 504 実装される割込み優先度のビット幅を TBITW_IPRI,優先度中のサブ優先度の 505 ビット幅をTBIT_IPRIとすると,CPUロック状態(カーネル管理内割込みに設定 506 可能な最高優先度)として指定可能な優先度マスクの設定範囲は以下の値の範 507 囲となる. 508 509 -(2^(TBIW_IPRI)) + (2^TBITW_SUBIPRI)) 〜 -1 510 511 512 14. 未解決課題 513 514 ・割込みロックとCPU例外の関係 515 BASEPRIを使ったとしても,あるCPU例外処理中に他の例外が発生すると,そ 516 の例外は受け付けられないため,ITRON仕様は満たせない. 517 ->あきらめてマニュアル記載に逃げるか. 518 メモリプロテクションの例外もマスク可能であるため要件等. 519 520 521 以上. -
Property svn:mime-type
set to
-
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 6 6 * Graduate School of Information Science, Nagoya Univ., JAPAN 7 7 * 8 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 9 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 10 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 11 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 12 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 13 * XR[hÉÜÜêÄ¢é±ÆD 14 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 15 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 16 gip 17 * Ò}j 18 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 19 * ̳ÛØKèðfÚ·é±ÆD 20 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 21 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 22 * ÆD 23 * (a) Äzzɺ¤hL 24 gipÒ}j 25 AÈÇjÉCãLÌ 26 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 27 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 28 * ñ·é±ÆD 29 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 30 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 31 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 32 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 34 30 * 35 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨36 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI37 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF38 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»39 * ÌÓCðíÈ¢D31 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 32 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 33 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 34 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 35 * の責任を負わない. 40 36 * 41 37 * @(#) $Id: prc_insn.h 1304 2008-08-27 07:28:36Z ertl-honda $ … … 44 40 45 41 /* 46 * RA˶ÌÁê½ßÌCCÖè`iARM-Mpj42 * コア依存の特殊命令のインライン関数定義(ARM-M用) 47 43 */ 48 44 … … 53 49 54 50 /* 55 * FAULTMASK ÌZbg51 * FAULTMASKのセット 56 52 */ 57 53 Inline void … … 61 57 62 58 /* 63 * FAULTMASK ÌNA59 * FAULTMASKのクリア 64 60 */ 65 61 Inline void … … 69 65 70 66 /* 71 * PRIMASK ÌZbg67 * PRIMASKのセット 72 68 */ 73 69 Inline void … … 77 73 78 74 /* 79 * PRIMASK ÌNA75 * PRIMASKのクリア 80 76 */ 81 77 Inline void … … 85 81 86 82 /* 87 * BASEPRI ÌZbg83 * BASEPRIのセット 88 84 */ 89 85 Inline void … … 93 89 94 90 /* 95 * BASEPRI Ìæ¾91 * BASEPRIの取得 96 92 */ 97 93 Inline uint32_t … … 103 99 104 100 /* 105 * CONTROL ÌZbg101 * CONTROLのセット 106 102 */ 107 103 Inline void … … 113 109 114 110 /* 115 * CONTROL Ìæ¾111 * CONTROLの取得 116 112 */ 117 113 Inline uint32_t … … 123 119 124 120 /* 125 * Xe[^XWX^iCPSRjÌ»ÝlÌÇoµ121 * ステータスレジスタ(CPSR)の現在値の読出し 126 122 */ 127 123 Inline uint32_t -
Property svn:mime-type
set to
-
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 6 6 * Graduate School of Information Science, Nagoya Univ., JAPAN 7 7 * 8 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 9 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 10 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 11 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 12 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 13 * XR[hÉÜÜêÄ¢é±ÆD 14 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 15 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 16 gip 17 * Ò}j 18 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 19 * ̳ÛØKèðfÚ·é±ÆD 20 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 21 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 22 * ÆD 23 * (a) Äzzɺ¤hL 24 gipÒ}j 25 AÈÇjÉCãLÌ 26 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 27 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 28 * ñ·é±ÆD 29 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 30 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 31 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 32 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 34 30 * 35 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨36 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI37 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF38 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»39 * ÌÓCðíÈ¢D31 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 32 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 33 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 34 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 35 * の責任を負わない. 40 36 * 41 37 * @(#) $Id: prc_kernel.h 1304 2008-08-27 07:28:36Z ertl-honda $ … … 43 39 44 40 /* 45 * kernel.h ÌvZbT˶iARM-Mpj41 * kernel.hのプロセッサ依存部(ARM-M用) 46 42 * 47 * ±ÌCN[ht@CÍCtarget_kernel.hiܽÍC»±©çCN48 * [h³êét@CjÌÝ©çCN[h³êéD¼Ìt@C©ç49 * ¼ÚCN[hµÄÍÈçÈ¢D43 * このインクルードファイルは,target_kernel.h(または,そこからインク 44 * ルードされるファイル)のみからインクルードされる.他のファイルから 45 * 直接インクルードしてはならない. 50 46 */ 51 47 … … 54 50 55 51 /* 56 * T|[g·é@\Ìè`52 * サポートする機能の定義 57 53 */ 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をサポートする */ 60 56 61 #define TMAX_INTPRI (-1) /* ÝDæxÌÅåliÅálj*/57 #define TMAX_INTPRI (-1) /* 割込み優先度の最大値(最低値)*/ 62 58 63 59 #ifndef TOPPERS_MACRO_ONLY -
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/arch/arm_m_gcc/prc_rename.def
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
-
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/arch/arm_m_gcc/prc_rename.h
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
-
Property svn:mime-type
set to
-
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 6 6 * Graduate School of Information Science, Nagoya Univ., JAPAN 7 7 * 8 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 9 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 10 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 11 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 12 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 13 * XR[hÉÜÜêÄ¢é±ÆD 14 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 15 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 16 gip 17 * Ò}j 18 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 19 * ̳ÛØKèðfÚ·é±ÆD 20 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 21 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 22 * ÆD 23 * (a) Äzzɺ¤hL 24 gipÒ}j 25 AÈÇjÉCãLÌ 26 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 27 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 28 * ñ·é±ÆD 29 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 30 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 31 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 32 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 34 30 * 35 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨36 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI37 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF38 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»39 * ÌÓCðíÈ¢D31 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 32 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 33 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 34 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 35 * の責任を負わない. 40 36 * 41 37 * @(#) $Id: prc_sil.h 1304 2008-08-27 07:28:36Z ertl-honda $ … … 43 39 44 40 /* 45 * sil.h ÌvZbT˶iARM-Mpj41 * sil.hのプロセッサ依存部(ARM-M用) 46 42 */ 47 43 … … 52 48 53 49 /* 54 * NMI ð·×ÄÌÝÌÖ~50 * NMIを除くすべての割込みの禁止 55 51 */ 56 52 Inline bool_t … … 79 75 80 76 /* 81 * SÝbNóÔ̧ä77 * 全割込みロック状態の制御 82 78 */ 83 79 #define SIL_PRE_LOC bool_t TOPPERS_locked … … 86 82 87 83 /* 88 * GfBAÌè`84 * エンディアンの定義 89 85 */ 90 86 -
Property svn:mime-type
set to
-
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 6 6 * Graduate School of Information Science, Nagoya Univ., JAPAN 7 7 * 8 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 9 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 10 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 11 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 12 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 13 * XR[hÉÜÜêÄ¢é±ÆD 14 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 15 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 16 gip 17 * Ò}j 18 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 19 * ̳ÛØKèðfÚ·é±ÆD 20 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 21 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 22 * ÆD 23 * (a) Äzzɺ¤hL 24 gipÒ}j 25 AÈÇjÉCãLÌ 26 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 27 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 28 * ñ·é±ÆD 29 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 30 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 31 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 32 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 34 30 * 35 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨36 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI37 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF38 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»39 * ÌÓCðíÈ¢D31 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 32 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 33 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 34 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 35 * の責任を負わない. 40 36 * 41 37 * @(#) $Id: prc_stddef.h 1304 2008-08-27 07:28:36Z ertl-honda $ … … 43 39 44 40 /* 45 * t_stddef.h ÌvZbT˶iARM-Mpj41 * t_stddef.hのプロセッサ依存部(ARM-M用) 46 42 * 47 * ±ÌCN[ht@CÍCtarget_stddef.hiܽÍC»±©çCN48 * [h³êét@CjÌÝ©çCN[h³êéD¼Ìt@C©ç49 * ¼ÚCN[hµÄÍÈçÈ¢D43 * このインクルードファイルは,target_stddef.h(または,そこからインク 44 * ルードされるファイル)のみからインクルードされる.他のファイルから 45 * 直接インクルードしてはならない. 50 46 */ 51 47 … … 54 50 55 51 /* 56 * ^[Qbgð¯Ê·é½ßÌ}NÌè`52 * ターゲットを識別するためのマクロの定義 57 53 */ 58 #define TOPPERS_ARM_M /* vZbTªÌ*/54 #define TOPPERS_ARM_M /* プロセッサ略称 */ 59 55 60 56 /* 61 * X^bNÌ^62 * ARM ÅÍCX^bNð8byte«EÉzu·éKvª é57 * スタックの型 58 * ARMでは,スタックを8byte境界に配置する必要がある 63 59 */ 64 60 #define TOPPERS_STK_T long long -
Property svn:mime-type
set to
-
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 7 7 * Copyright (C) 2010 by Meika Sugimoto 8 8 * 9 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 10 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 11 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 12 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 13 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 14 * XR[hÉÜÜêÄ¢é±ÆD 15 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 16 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 17 gip 18 * Ò}j 19 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 20 * ̳ÛØKèðfÚ·é±ÆD 21 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 22 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 23 * ÆD 24 * (a) Äzzɺ¤hL 25 gipÒ}j 26 AÈÇjÉCãLÌ 27 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 28 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 29 * ñ·é±ÆD 30 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 31 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 32 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 33 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 35 31 * 36 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨37 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI38 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF39 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»40 * ÌÓCðíÈ¢D32 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 33 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 34 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 35 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 36 * の責任を負わない. 41 37 * 42 38 */ 43 39 44 40 /* 45 * vZbT˶W 46 [ AZu¾êiARM-Mpj 41 * プロセッサ依存モジュール アセンブリ言語部(ARM-M用) 47 42 */ 48 43 49 44 #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) /* ^LXgðs¤}N*/45 #define UINT_C(val) (val) /* uint_t型の定数を作るマクロ */ 46 #define ULONG_C(val) (val) /* ulong_t型の定数を作るマクロ */ 47 #define CAST(type, val) (val) /* 型キャストを行うマクロ */ 53 48 54 49 #include "kernel_impl.h" … … 59 54 60 55 /* 61 * OQÆ56 * 外部参照 62 57 */ 63 58 .global intnest 64 59 65 60 /* 66 * CPU áOGg61 * CPU例外エントリ 67 62 * 68 * ÝGgÆÌàeͯ¾ªCOÌíÞªÙÈé½ßC69 * ª¯Ä¢éD63 * 割込みエントリと処理の内容は同等だが,ログの種類が異なるため, 64 * 分けている. 70 65 */ 71 66 .align 2 … … 76 71 exc_entry: 77 72 /* 78 * áO/ݪ¶·éÆC¶ÉANeBuÈX^bNÉXN79 * b`WX^ªÛ¶³êéD80 * ±ÌàeÉÁ¦ÄCCPUáOnhÖÌîñƵÄCbasepri ÌlÆC81 * EXC_RETURN ÌîñðÁ¦ÄÛ¶·éDbasepriÌlÍCCPUáO©çÌ82 * ^[ÉÝDæx}XNÌlð³Éß·½ßÉàp¢çêéD73 * 例外/割込みが発生すると,発生時にアクティブなスタックにスクラ 74 * ッチレジスタ等が保存される. 75 * この内容に加えて,CPU例外ハンドラへの情報として,basepri の値と, 76 * EXC_RETURNの情報を加えて保存する.basepriの値は,CPU例外からの 77 * リターン時に割込み優先度マスクの値を元に戻すためにも用いられる. 83 78 * 84 79 * ----------- … … 107 102 108 103 /* 109 * ݶÌÝDæx}XNðX^bNÉÛ¶·é½ßæ¾110 */ 111 mrs r2, basepri /* baepri Ìlðæ¾*/112 push {r2} /* ݶÌÝDæx}XNðÏÞ*/113 push {lr} /* EXC_RETURN ðÏÞ*/114 mov r0, sp /* CPU áOnhÖÌøÆÈé*/115 116 ldr r1 , =lock_flag /* CPU bNtOðÛ¶*/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ロックフラグを保存 */ 117 112 ldr r1 , [r1] 118 113 push {r1} 119 114 120 /* ÝlXgÌÁZ*/115 /* 割込みネスト数の加算 */ 121 116 ldr r1 , =intnest 122 117 ldr r3 , [r1] … … 125 120 126 121 /* 127 * ¤Ê122 * 共通処理 128 123 */ 129 124 exc_entry_2: 130 mrs r3, ipsr /* nhAhXðæ¾*/125 mrs r3, ipsr /* ハンドラアドレスを取得 */ 131 126 ldr r1, =_kernel_exc_tbl 132 127 ldr r2, [r1, r3, lsl #2] … … 134 129 #ifdef LOG_EXC_ENTER 135 130 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を呼び出す */ 138 133 pop {r0, r2, r3} 139 134 #endif /* LOG_EXC_ENTER */ 140 135 141 136 #ifdef LOG_EXC_LEAVE 142 push { r3 } /* áOÔðX^bNÖ*/137 push { r3 } /* 例外番号をスタックへ */ 143 138 #endif /* LOG_EXC_LEAVE */ 144 139 145 140 /* 146 * CPU áOnhÌÄÑoµ141 * CPU例外ハンドラの呼び出し 147 142 */ 148 143 blx r2 149 144 150 /* CPU bNtOð³Éß·*/145 /* CPUロックフラグを元に戻す */ 151 146 pop {r0} 152 147 ldr r1 , =lock_flag … … 154 149 155 150 #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を呼び出す */ 158 153 #endif /* LOG_EXC_LEAVE */ 159 154 … … 162 157 163 158 /* 164 * ÝGg159 * 割込みエントリ 165 160 */ 166 161 .align 2 … … 171 166 int_entry: 172 167 /* 173 * ݶÌÝDæx}XNðX^bNÉÛ¶·é½ßæ¾174 */ 175 mrs r2, basepri /* baepri Ìlðæ¾*/176 push {r2} /* ݶÌÝDæx}XNðÏÞ*/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 * 共通処理 182 177 */ 183 178 int_entry_2: 184 /* ÝlXgÌÁZ*/179 /* 割込みネスト数の加算 */ 185 180 ldr r1 , =intnest 186 181 ldr r3 , [r1] … … 188 183 str r3 , [r1] 189 184 190 mrs r3, ipsr /* nhAhXðæ¾*/185 mrs r3, ipsr /* ハンドラアドレスを取得 */ 191 186 ldr r1, =_kernel_exc_tbl 192 187 ldr r2, [r1, r3, lsl #2] … … 194 189 #ifdef LOG_INH_ENTER 195 190 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を呼び出す */ 198 193 pop { r0,r2,r3 } 199 194 #endif /* LOG_INH_ENTER */ 200 195 201 196 #ifdef LOG_INH_LEAVE 202 push { r3 } /* ÝÔðX^bNÖ*/197 push { r3 } /* 割込み番号をスタックへ */ 203 198 #endif /* LOG_INH_LEAVE */ 204 199 205 200 /* 206 * CPU áOnhÌÄÑoµ201 * CPU例外ハンドラの呼び出し 207 202 */ 208 203 blx r2 209 204 210 205 #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を呼び出す */ 213 208 #endif /* LOG_INH_LEAVE */ 214 209 215 210 /* 216 * Ý/áOoû211 * 割込み/例外出口 217 212 * 218 * ret_exc/ret_int ÍCCPUáO/Ýnh©çßÁ½¼ãÉÀs·é219 * [`Å éD213 * ret_exc/ret_intは,CPU例外/割込みハンドラから戻った直後に実行する 214 * ルーチンである. 220 215 */ 221 216 ret_exc: 222 217 ret_int: 223 218 /* 224 * ÝbNóÔÆ·éD±Ì_ÅÍCCPUbNóÔÉÍÈçÈ¢225 * ibasepriÆlock_flagÆsaved_iipmÍXVµÈ¢jD226 * 227 * ÝbNóÔÆ·éÌÍCßèæÌReLXgÌ`FbNÆC228 * ßèæªñ^XNReLXgÅ Á½êÌ^[ðAg~bN229 * És¤½ßÅ éDbsepriðCPUbNÌlÉ·é±ÆÅàAg~b230 * NÈ`FbNÆAÍÂ\Å éªCÝ©ç^[µÄàC231 * basepri ÌÝèàeͳÉßçÈ¢½ßCgp·é±ÆªÅ«È¢D232 * êûCFAULTMASKÍCÝ©çÌ^[ÉæÁÄC'0'ÉN233 * A³êéD219 * 割込みロック状態とする.この時点では,CPUロック状態にはならない 220 * (basepriとlock_flagとsaved_iipmは更新しない). 221 * 222 * 割込みロック状態とするのは,戻り先のコンテキストのチェックと, 223 * 戻り先が非タスクコンテキストであった場合のリターンをアトミック 224 * に行うためである.bsepriをCPUロックの値にすることでもアトミッ 225 * クなチェックと復帰は可能であるが,割込みからリターンしても, 226 * basepri の設定内容は元に戻らないため,使用することができない. 227 * 一方,FAULTMASKは,割込みからのリターン処理によって,'0'にクリ 228 * アされる. 234 229 */ 235 230 cpsid f 236 231 237 232 /* 238 * ßèæÌReLXgÌ»è233 * 戻り先のコンテキストの判定 239 234 * 240 * intnest ª0©Ç¤©Å»f·é235 * intnestが0かどうかで判断する 241 236 * 242 237 */ 243 /* ÝlXg̸Z*/238 /* 割込みネスト数の減算 */ 244 239 ldr r1 , =intnest 245 240 ldr r3 , [r1] … … 251 246 252 247 /* 253 * êiÚÌÝÌoû248 * 一段目の割込みの出口処理 254 249 */ 255 250 ret_int_1: 256 251 /* 257 * ±±ÉÍÝbNóÔiFAULTMASKªZbgj³ê½óÔÅéD258 * Thread [h©çÌ^[Éæè©®IÉÝbNðóÔÉÈéD259 * ÝDæx}XNÍÝOÉóÔÉß·D252 * ここには割込みロック状態(FAULTMASKがセット)された状態で来る. 253 * Threadモードからのリターンにより自動的に割込みロック解除状態になる. 254 * 割込み優先度マスクは割込み前に状態に戻す. 260 255 */ 261 256 pop { r2 } 262 257 pop { r1 } 263 msr basepri, r1 /* ÝDæx}XNðÝOÉóÔÖ*/264 bx r2 /* ^[*/258 msr basepri, r1 /* 割込み優先度マスクを割込み前に状態へ */ 259 bx r2 /* リターン */ 265 260 266 261 ret_int_2: 267 ldr r0, =reqflg /* reqflg ªfalseÈç»ÌÜÜßé*/262 ldr r0, =reqflg /* reqflgがfalseならそのまま戻る */ 268 263 ldr r1, [r0] 269 264 cmp r1 , #0 270 beq ret_int_1 /* false Èçret_int_1Ö*/265 beq ret_int_1 /* falseならret_int_1へ */ 271 266 ret_int_3: 272 mov r1, #0 /* reqflg ðfalseÉ*/267 mov r1, #0 /* reqflgをfalseに */ 273 268 str r1, [r0] 274 269 275 270 /* 276 * CPU bNóÔÉÚs·éD277 * 278 * J[lÌÇàÌÝðÖ~·éæ¤ÉbasepriðÝèµC279 * lock_flag ðXV·éD280 * ±Ì_ÅCPUbNóÔÆ·éÌÍCdispatcherÖªò·éÉ281 * CPU bNóÔÉÈÁÄ¢éKvª é½ßÅ éD282 * ȨC±ÌÌãCThread[hÖÌÚsðsȤ½ßCÝ283 * bNóÔ(FAULTMASKð"1")ÍÛ·éD284 */ 285 ldr r1, =IIPM_LOCK /* CPU bNóÔ*/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ロック状態 */ 286 281 msr basepri, r1 287 mov r1, #0x01 /* lock_flag ð trueÉ*/282 mov r1, #0x01 /* lock_flag を trueに */ 288 283 ldr r0, =lock_flag 289 284 str r1, [r0] 290 285 291 286 /* 292 * lr ðæèo·D½¾µxfBXpb`ÌÛÉàg¤½ßC293 * X^bN|C^ÍìµÈ¢D287 * lrを取り出す.ただし遅延ディスパッチの際にも使うため, 288 * スタックポインタは操作しない. 294 289 */ 295 290 … … 297 292 298 293 /* 299 * Thread [hÖÚs·éD300 * 301 * dispatcher âcall_texrnðÄÑo·êÍCThread[hÅ éK302 * vª é½ßCPSPX^bNãÉ_~[ÌáOt[ðu¢ÄC303 * [IÉÝnh©ç^[·éD304 * ^[ƯÉFAULTMASKª©®IÉNA³êCJ[lÇOÌ305 * ݪ³êéD294 * Threadモードへ移行する. 295 * 296 * dispatcherやcall_texrnを呼び出す場合は,Threadモードである必 297 * 要があるため,PSPスタック上にダミーの例外フレームを置いて, 298 * 擬似的に割込みハンドラからリターンする. 299 * リターンと同時にFAULTMASKが自動的にクリアされ,カーネル管理外の 300 * 割込みが許可される. 306 301 */ 307 302 ldr r0, =ret_int_4 /* PC */ 308 ldr r1, =EPSR_T /* xPSR(T rbgª'1'Å éKvª é) */309 stmfd sp!, {r0-r1} /* _~[t[ðX^bNãÉÏÞ*/310 sub sp, #(EXC_FRAME_SIZE - (4*2)) /* r0-r3,r12,lr ÌàeÍÝè·éKvªÈ¢*/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モードへ移行 */ 312 307 313 308 ret_int_4: 314 bl search_schedtsk /* ÝÅN®³ê½^XNðÀs*/309 bl search_schedtsk /* 割込み中で起動されたタスクを実行 */ 315 310 bl run_task 316 311 ret_int_r: 317 svc 0 /* SVC ÌÄÑoµ*/318 319 /* 320 * xfBXpb`©çÌAÉêIÉÝ321 * ReLXgÉÚs·é½ßÌSVCR[nh312 svc 0 /* SVCの呼び出し */ 313 314 /* 315 * 遅延ディスパッチからの復帰時に一時的に割込み 316 * コンテキストに移行するためのSVCコールハンドラ 322 317 */ 323 318 … … 328 323 kernel_svc_handler: 329 324 /* 330 * Ý©çÌ^[ÉæèCCPUbNðóÔÉÚs·éæ331 * ¤õ·éD332 */ 333 cpsid f /* ÝbNóÔÖ*/334 ldr r2 , [ sp , #(EXC_FRAME_SIZE) ] /* lr ðX^bN©çæ¾*/335 add sp, #EXC_FRAME_SIZE + 8 /* X^bNðÌÄé*/325 * 割込み処理からのリターンにより,CPUロック解除状態に移行するよ 326 * う準備する. 327 */ 328 cpsid f /* 割込みロック状態へ */ 329 ldr r2 , [ sp , #(EXC_FRAME_SIZE) ] /* lrをスタックから取得 */ 330 add sp, #EXC_FRAME_SIZE + 8 /* スタックを捨てる */ 336 331 mov r0, #0 337 ldr r1, =lock_flag /* CPU bNðóÔÖ*/332 ldr r1, =lock_flag /* CPUロック解除状態へ */ 338 333 str r0, [r1] 339 334 msr basepri , r0 340 bx r2 /* ^[*/341 342 /* 343 * fBXpb`Ì®ìJn335 bx r2 /* リターン */ 336 337 /* 338 * ディスパッチャの動作開始 344 339 */ 345 340 .align 2 … … 349 344 start_dispatch: 350 345 /* 351 * ±Ì[`ÍCJ[lN®ÉC·×ÄÌÝðÖ~µ½óÔ352 * iÝbNóÔƯjÅÄÑo³êéDܽCÝ[hiñ353 * ^XNReLXgƯjÅÄÑo³êé±ÆðzèµÄ¢éD354 * 355 * prc_initialize ÅClock_flagðtrueÉCsaved_iipmðIIPM_ENAALLÉ356 * ú»µÄ¢é½ßCJ[lÇOÌÝð·é±ÆÅC357 * CPU bNóÔEifãÌjÝDæx}XNSðóÔÉÈéD358 * ܽCtask_initializeÅdisdspðfalseÉú»µÄ¢é½ßCfB359 * Xpb`ÂóÔÉÈÁÄ¢éD360 */ 361 ldr r0,=istkpt /* MSP ðú»*/362 ldr r1,[r0] /* start_dispatch ÄÑoµÉÄÑoµpÉ*/363 msr msp, r1 /* gpµÄ¢é½ßú»·é*/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 /* カーネル管理内の割込みを禁止 */ 365 360 msr basepri, r1 366 cpsie f /* J[lÇOÌÝðÂ*/361 cpsie f /* カーネル管理外の割込みを許可 */ 367 362 b dispatcher 368 363 369 364 /* 370 * J[lÌI¹ÌÄoµ365 * カーネルの終了処理の呼出し 371 366 * 372 * X^bNðñ^XNReLXgpÉØèÖ¦D367 * スタックを非タスクコンテキスト用に切り替え. 373 368 * 374 369 */ … … 379 374 .type call_exit_kernel, function 380 375 call_exit_kernel: 381 b exit_kernel /* J[lÌI¹ðÄÔ*/382 383 384 /* 385 * ÷ÔÒ¿376 b exit_kernel /* カーネルの終了処理を呼ぶ */ 377 378 379 /* 380 * 微少時間待ち 386 381 */ 387 382 .text -
Property svn:mime-type
set to
-
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 6 6 * Graduate School of Information Science, Nagoya Univ., JAPAN 7 7 * 8 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 9 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 10 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 11 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 12 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 13 * XR[hÉÜÜêÄ¢é±ÆD 14 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 15 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 16 gip 17 * Ò}j 18 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 19 * ̳ÛØKèðfÚ·é±ÆD 20 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 21 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 22 * ÆD 23 * (a) Äzzɺ¤hL 24 gipÒ}j 25 AÈÇjÉCãLÌ 26 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 27 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 28 * ñ·é±ÆD 29 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 30 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 31 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 32 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 34 30 * 35 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨36 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI37 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF38 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»39 * ÌÓCðíÈ¢D31 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 32 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 33 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 34 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 35 * の責任を負わない. 40 36 * 41 37 * @(#) $Id: prc_test.h 1304 2008-08-27 07:28:36Z ertl-honda $ … … 43 39 44 40 /* 45 * eXgvOÌ`bv˶è`iARM-Mpj41 * テストプログラムのチップ依存定義(ARM-M用) 46 42 */ 47 43 … … 50 46 51 47 /* 52 * `bvŤÊÈè`48 * チップで共通な定義 53 49 */ 54 50 -
Property svn:mime-type
set to
-
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 7 7 * Copyright (C) 2010 by Meika Sugimoto 8 8 * 9 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 10 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 11 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 12 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 13 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 14 * XR[hÉÜÜêÄ¢é±ÆD 15 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 16 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 17 gip 18 * Ò}j 19 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 20 * ̳ÛØKèðfÚ·é±ÆD 21 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 22 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 23 * ÆD 24 * (a) Äzzɺ¤hL 25 gipÒ}j 26 AÈÇjÉCãLÌ 27 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 28 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 29 * ñ·é±ÆD 30 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 31 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 32 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 33 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 35 31 * 36 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨37 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI38 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF39 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»40 * ÌÓCðíÈ¢D32 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 33 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 34 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 35 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 36 * の責任を負わない. 41 37 * 42 38 * @(#) $Id: prc_timer.c 1304 2008-08-27 07:28:36Z ertl-honda $ … … 44 40 45 41 /* 46 * ^C}hCoiSYSTICpj42 * タイマドライバ(SYSTIC用) 47 43 */ 48 44 #include <sil.h> … … 52 48 53 49 /* 54 * ^C}ÌN®50 * タイマの起動処理 55 51 */ 56 52 void … … 61 57 62 58 #ifdef SYSTIC_USE_CALIBRATION 63 /* CALIBRATION WX^Ìlðgp*/59 /* CALIBRATIONレジスタの値を使用 */ 64 60 cyc = (sil_rew_mem((void *)SYSTIC_CALIBRATION) & SYSTIC_TENMS) / 10; 65 61 #else … … 67 63 #endif /* SYSTIC_USE_CALIBRATION */ 68 64 69 /* â~*/65 /* 停止 */ 70 66 tmp = sil_rew_mem((void *)SYSTIC_CONTROL_STATUS); 71 67 tmp &= ~SYSTIC_ENABLE; … … 78 74 79 75 #ifdef SYSTIC_USE_STCLK 80 /* ONbNÌgp*/76 /* 外部クロックの使用 */ 81 77 tmp |= SYSTIC_ENABLE; 82 78 #else 83 /* vZbTNbNÌgp*/79 /* プロセッサクロックの使用 */ 84 80 tmp |= SYSTIC_ENABLE|SYSTIC_CLKSOURCE; 85 81 #endif /* SYSTIC_USE_STCLK */ … … 89 85 90 86 /* 91 * ^C}Ìâ~87 * タイマの停止処理 92 88 */ 93 89 void 94 90 target_timer_terminate(intptr_t exinf) 95 91 { 96 /* ^C}ðâ~*/92 /* タイマを停止 */ 97 93 sil_wrw_mem((void*)SYSTIC_CONTROL_STATUS, 0x00); 98 94 } 99 95 100 96 /* 101 * ^C}Ýnh97 * タイマ割込みハンドラ 102 98 */ 103 99 void 104 100 target_timer_handler(void) 105 101 { 106 /* probe_int ̽ßCCOUNTFLAGðNA*/102 /* probe_int のため,COUNTFLAGをクリア */ 107 103 (void)sil_rew_mem((void *)SYSTIC_CONTROL_STATUS); 108 104 109 105 i_begin_int(INTNO_TIMER); 110 signal_time(); /* ^CeBbNÌ*/106 signal_time(); /* タイムティックの供給 */ 111 107 i_end_int(INTNO_TIMER); 112 108 } -
Property svn:mime-type
set to
-
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 4 4 5 5 /* 6 * ^C}hCoÌRtBM 7 [Vt@C 6 * タイマドライバのコンフィギュレーションファイル 8 7 */ 9 8 ATT_INI({ TA_NULL, 0, target_timer_initialize }); -
Property svn:mime-type
set to
-
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 6 6 * Graduate School of Information Science, Nagoya Univ., JAPAN 7 7 * 8 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 9 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 10 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 11 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 12 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 13 * XR[hÉÜÜêÄ¢é±ÆD 14 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 15 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 16 gip 17 * Ò}j 18 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 19 * ̳ÛØKèðfÚ·é±ÆD 20 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 21 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 22 * ÆD 23 * (a) Äzzɺ¤hL 24 gipÒ}j 25 AÈÇjÉCãLÌ 26 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 27 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 28 * ñ·é±ÆD 29 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 30 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 31 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 32 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 34 30 * 35 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨36 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI37 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF38 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»39 * ÌÓCðíÈ¢D31 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 32 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 33 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 34 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 35 * の責任を負わない. 40 36 * 41 37 * @(#) $Id: prc_timer.h 1304 2008-08-27 07:28:36Z ertl-honda $ … … 43 39 44 40 /* 45 * ^C}hCoiSYSTICpj41 * タイマドライバ(SYSTIC用) 46 42 */ 47 43 … … 52 48 53 49 /* 54 * ^C}Ýnho^̽ßÌè50 * タイマ割込みハンドラ登録のための定数 55 51 */ 56 #define INHNO_TIMER IRQNO_SYSTICK /* ÝnhÔ*/57 #define INTNO_TIMER IRQNO_SYSTICK /* ÝÔ*/52 #define INHNO_TIMER IRQNO_SYSTICK /* 割込みハンドラ番号 */ 53 #define INTNO_TIMER IRQNO_SYSTICK /* 割込み番号 */ 58 54 59 55 #ifndef TOPPERS_MACRO_ONLY 60 56 61 57 /* 62 * ^C}lÌà\»Ì^58 * タイマ値の内部表現の型 63 59 */ 64 60 typedef uint32_t CLOCK; 65 61 66 62 /* 67 * ^C}lÌà\»Æ~bEÊbPÊÆÌÏ·63 * タイマ値の内部表現とミリ秒・μ秒単位との変換 68 64 * 69 65 */ … … 72 68 73 69 /* 74 * ÝèÅ«éÅåÌ^C}üúiPÊÍà\»j70 * 設定できる最大のタイマ周期(単位は内部表現) 75 71 */ 76 72 #define MAX_CLOCK ((CLOCK) 0x00ffffffU) 77 73 78 74 /* 79 * ^C}ÌN®75 * タイマの起動処理 80 76 * 81 * ^C}ðú»µCüúIÈ^C}Ýv𶳹éD77 * タイマを初期化し,周期的なタイマ割込み要求を発生させる. 82 78 */ 83 79 extern void target_timer_initialize(intptr_t exinf); 84 80 85 81 /* 86 * ^C}Ìâ~82 * タイマの停止処理 87 83 * 88 * ^C}Ì®ìðâ~³¹éD84 * タイマの動作を停止させる. 89 85 */ 90 86 extern void target_timer_terminate(intptr_t exinf); 91 87 92 88 /* 93 * ^C}Ì»ÝlÌÇoµ89 * タイマの現在値の読出し 94 90 */ 95 91 Inline CLOCK … … 100 96 101 97 /* 102 * ^C}ÝvÌ`FbN98 * タイマ割込み要求のチェック 103 99 */ 104 100 Inline bool_t … … 109 105 110 106 /* 111 * ^C}Ýnh107 * タイマ割込みハンドラ 112 108 */ 113 109 extern void target_timer_handler(void); -
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/arch/arm_m_gcc/prc_unrename.h
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
-
Property svn:mime-type
set to
-
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 1 1 ===================================================================== 2 ARM-M vZbT˶2 ARM-Mプロセッサ依存部 3 3 Last Modified: '13/04/07 4 4 ===================================================================== 5 5 6 6 7 (1) εĢé^[QbgVXeÌíÞE\¬7 (1) 対応しているターゲットシステムの種類・構成 8 8 9 ARM-M ˶ÍCARMVx-MA[LeN`ð^[QbgƵĢéDARMVx-MÍC10 ARM ÆÍÙÈèCARM½ßðÀsÅ«È¢½ßCARM˶ƪ¯Ä¢éD9 ARM-M依存部は,ARMVx-Mアーキテクチャをターゲットとしている.ARMVx-Mは, 10 ARMとは異なり,ARM命令を実行できないため,ARM依存部と分けている. 11 11 12 12 13 (2) gp·éJ«Ʈìص½ðio[WCIvVj13 (2) 使用する開発環境と動作検証した条件(バージョン,オプション等) 14 14 15 J[lÍGCCðp¢ÄRpC·éD®ìmFµ½o[WÍe^[Q 16 bg˶ÌhL 17 gÉLÚ·éD 15 カーネルはGCCを用いてコンパイルする.動作確認したバージョンは各ターゲ 16 ット依存部のドキュメントに記載する. 18 17 19 18 20 (3) ^[Qbgè`ÌKè19 (3) ターゲット定義事項の規定 21 20 22 (3-1) f[^^ÉÖ·éKè21 (3-1) データ型に関する規定 23 22 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型と 24 double型は,それぞれIEEE754準拠の単精度浮動小数点数と倍精度浮動小数点 25 数である. 27 26 28 (3-2) ÝÉÖ·éKè27 (3-2) 割込み処理に関する規定 29 28 30 ÝnhÔÆÝÔÌÄC¼ÒÌÎ 29 ○割込みハンドラ番号と割込み番号の割当て,両者の対応 31 30 32 ÝnhÔÆÝÔÍCáO¶ÉIPSRÉZbg³êéáOÔ 33 ðp¢éDSYSTICKÍ15ÔÅCOÝÍ16Ô©çÌÔªèt¯çê 34 Ä¢éD 31 割込みハンドラ番号と割込み番号は,例外発生時にIPSRにセットされる例外番 32 号を用いる.SYSTICKは15番で,外部割込みは16番からの番号が割り付けられ 33 ている. 35 34 36 ÝDæxÌiKiTMIN_INTPRIÌljC»ÌÝèû@ 35 ○割込み優先度の段階数(TMIN_INTPRIの値),その設定方法 37 36 38 ÝDæxÌiKÍCSoCÉn[hEFAIÉT|[g·éÝDæ 39 xrbgªÙÈéÌÅC^[Qbg˶ÉÙÈéD^[Qbg˶Š40 ÍCÝDæxÌrbgiTBITW_IPRIjÆ»ÌÝDæxÌTuDæ 41 xÌrbgiTBITW_SUBPRIjðè`·éDerbgÌlÆÝèÂ\ÈDæ 42 xÌÍÍÍÌÊèÅ éD 37 割込み優先度の段階数は,SoC毎にハードウェア的にサポートする割込み優先 38 度ビット幅が異なるので,ターゲット依存部毎に異なる.ターゲット依存部で 39 は,割込み優先度のビット幅(TBITW_IPRI)とその割込み優先度中のサブ優先 40 度のビット幅(TBITW_SUBPRI)を定義する.各ビット幅の値と設定可能な優先 41 度の範囲は次の通りである. 43 42 44 -(2^(TBIW_IPRI)) + (2^TBITW_SUBIPRI)) `-143 -(2^(TBIW_IPRI)) + (2^TBITW_SUBIPRI)) 〜 -1 45 44 46 á¦ÎDæxÌrbg(TBITW_IPRI)ª8bitCTuDæxÌrbg 47 (TBITW_SUBIPRI) ª1bitÌêÍC-254 ` -1 ÌÍÍÅ éD45 例えば優先度のビット幅(TBITW_IPRI)が8bit,サブ優先度のビット幅 46 (TBITW_SUBIPRI) が1bitの場合は,-254 〜 -1 の範囲である. 48 47 49 ±ÌÍÍÅCJ[lÇàÌÝÌÅDæxiTMIN_INTPRIjð^[Q 50 bg˶ÅÝè·éD 48 この範囲で,カーネル管理内の割込みの最高優先度(TMIN_INTPRI)をターゲ 49 ット依存部で設定する. 51 50 52 eÝÌÝDæxÍCCFG_INTÅTMIN_INTPRIÈãÌlðwè·éD 51 各割込みの割込み優先度は,CFG_INTでTMIN_INTPRI以上の値を指定する. 53 52 54 dis_intÆena_intÌT|[gÌL³C»Ì§À 53 ○dis_intとena_intのサポートの有無,その制限事項 55 54 56 dis_int Æena_intðT|[g·éD§ÀÍÁÉÈ¢D55 dis_intとena_intをサポートする.制限事項は特にない. 57 56 58 CFG_INŢÀÆg£i^[Qbgè`ÅgpÅ«éÝ®«j 57 ○CFG_INTの制限事項と拡張(ターゲット定義で使用できる割込み属性) 59 58 60 CFG_INT ̧ÀÍÈC^[Qbgè`ÅgpÂ\ÈÝ®«ÍÁÉÈ61 ¢D 59 CFG_INTの制限事項はなく,ターゲット定義で使用可能な割込み属性は特にな 60 い. 62 61 63 J[lÇOÌÝ 62 ○カーネル管理外の割込み 64 63 65 J[lÇOÌÝðT|[g·éDwèû@ÍCÝDæxÌiK 66 Åwèµ½CT|[g·éÝDæxÌÅliŬljæèC 67 TMIN_INTPRI ðå«Ýè·éÆCTMIN_INTPRIæèlª¬¢iDæxjÈ68 ÝDæxðÝèµ½ÝðÝDæxƵĵ¤D 64 カーネル管理外の割込みをサポートする.指定方法は,割込み優先度の段階数 65 で指定した,サポートする割込み優先度の最高値(最小値)より, 66 TMIN_INTPRIを大きく設定すると,TMIN_INTPRIより値が小い(高優先度)な割 67 込み優先度を設定した割込みを割込み優先度として扱う. 69 68 70 J[lÇOÌÝÍOSÀsàÖ~ÉÈé±ÆÍÈiµ§ÉÍÝ 71 ÌoûŲZ¢æÔÖ~³êéjCݶÍCJ[lÌR[hðo 72 R¹¸ÉÄÑo³êéD 69 カーネル管理外の割込みはOS実行中も禁止になることはなく(厳密には割込み 70 の出口でごく短い区間禁止される),割込み発生時は,カーネルのコードを経 71 由せずに呼び出される. 73 72 74 J[lÇOÌÝÉηéCDEF_INH,CFG_INTÍT|[g·éD 73 カーネル管理外の割込みに対する,DEF_INH,CFG_INTはサポートする. 75 74 76 (3-3) CPU áOÉÖ·éKè75 (3-3) CPU例外処理に関する規定 77 76 78 CPUáOnhÔ 77 ○CPU例外ハンドラ番号 79 78 80 CPU áOnhÔƵÄÍCáO¶ÉIPSRÉZbg³êéCáOÔ81 ðp¢éDeáOÌáOÔÍȺÌÊèÅ éD 79 CPU例外ハンドラ番号としては,例外発生時にIPSRにセットされる,例外番号 80 を用いる.各例外の例外番号は以下の通りである. 82 81 83 áO áOÔ82 例外 例外番号 84 83 Reset 1 85 84 Non-makable Interrupt 2 … … 92 91 PendSV 14 93 92 94 ȨCResetÆCSVCallÉ¢ÄÍCJ[lªgp·é½ßC[U[Íg 95 p·é±ÆªÅ«È¢D 93 なお,Resetと,SVCallについては,カーネルが使用するため,ユーザーは使 94 用することができない. 96 95 97 (3-4) CPU bNEÝbN96 (3-4) CPUロック・割込みロック 98 97 99 CPU bNÍCbasepriðTMIN_INTPRIÌDæxÌÝðÖ~·élÉÝè·100 éDÝbNÍCFAULTMASKð'1'ÉÝè·é±ÆÅÀ»µÄ¢éD 98 CPUロックは,basepriをTMIN_INTPRIの優先度の割込みを禁止する値に設定す 99 る.割込みロックは,FAULTMASKを'1'に設定することで実現している. 101 100 102 (3-5) «\]¿pVXeÌQÆÉÖ·éKè101 (3-5) 性能評価用システム時刻の参照に関する規定 103 102 104 get_utm ðT|[g·éD¸xÉÖµÄÍC^[QbgÉÙÈéD103 get_utmをサポートする.精度に関しては,ターゲット毎に異なる. 105 104 106 (3-6) X^[gAbv[`ÅÌú»àe105 (3-6) スタートアップルーチンでの初期化内容 107 106 108 X^[gAbv[`ÍCThread[hÅÄÑo³êé±ÆðOñƵĢ 109 éDÀsãCÝbNóÔiFAULTMASKðZbgjÆ·éDÝbN 110 óÔÍCJ[lÌú»I¹É·éDX^[gAbv[`ÅC 111 MSP ðANeBuÈX^bNƵCMSPÌàeðú»·é½ßÉÍCINIT_MSP112 ð^[Qbg˶Åè`·éD 107 スタートアップルーチンは,Threadモードで呼び出されることを前提としてい 108 る.実行後,割込みロック状態(FAULTMASKをセット)とする.割込みロック 109 状態は,カーネルの初期化終了時に許可する.スタートアップルーチンで, 110 MSPをアクティブなスタックとし,MSPの内容を初期化するためには,INIT_MSP 111 をターゲット依存部で定義する. 113 112 114 (3-7) xN^e[uItZbgÌú»113 (3-7) ベクタテーブルオフセットの初期化 115 114 116 vZbT˶Ìú»ÅCVector Table Offset Register ð^[Qb 117 g˶Ìú»[`ÅÝè·éDȨCxN^[e[uÍC.vector118 ÌZNV®«ªtÁ³êÄ¢é½ßCJXNvgűÌZNV 119 ðwèµÄzu·éD 115 プロセッサ依存の初期化処理で,Vector Table Offset Register をターゲッ 116 ト依存部の初期化ルーチンで設定する.なお,ベクターテーブルは,.vector 117 のセクション属性が付加されているため,リンカスクリプトでこのセクション 118 を指定して配置する. 120 119 121 120 122 (4) ^C}hCoÖAÌîñ121 (4) タイマドライバ関連の情報 123 122 124 J[lÌ^CeBbNƵÄCSYSTICðgp·éêÍCprc_config.c 125 ðRpCÎÛƵCRtBM 126 [Vt@CÉ prc_config.cfg 127 ðwè·é±ÆD 123 カーネルのタイムティックとして,SYSTICを使用する場合は,prc_config.c 124 をコンパイル対象とし,コンフィギュレーションファイルに prc_config.cfg 125 を指定すること. 128 126 129 üúÌî{Í1msecÆ·éDüúðCALIBRATIONWX^ÌÝèàeð³ÉvZ 130 ·éêÍCSYSTIC_USE_CALIBRATION ðè`·éDCALIBRATIONWX^ðp 131 ¢È¢êÍC1msecüúªÌJEglð TIMER_CLOCK ÉÝè·éDNb 132 N\[XƵÄCONbNðp¢éêÍCSYSTIC_USE_STCLK ðp¢éD 127 周期の基本は1msecとする.周期をCALIBRATIONレジスタの設定内容を元に計算 128 する場合は,SYSTIC_USE_CALIBRATION を定義する.CALIBRATIONレジスタを用 129 いない場合は,1msec周期分のカウント値を TIMER_CLOCK に設定する.クロッ 130 クソースとして,外部クロックを用いる場合は,SYSTIC_USE_STCLK を用いる. 133 131 134 132 135 (5) ^[Qbg˶ÅÌÝèÚ133 (5) ターゲット依存部での設定項目 136 134 137 ^[Qbg˶ÅÍȺÌ}Nðè`·éKvª éD 135 ターゲット依存部では以下のマクロを定義する必要がある. 138 136 139 ¥TMAX_INTNO : ÝÔÌÅål(ÊíÌÝÔ+ 15)140 ¥TBITW_IPRI : ÝDæxÌrbg141 ¥TBITW_SUBIPRI : ÝDæxÌrbgÌTuDæxÌrbg142 ¥TMIN_INTPRI : ÝDæxÌŬliÅlj143 ¥TIC_NUME : ^CeBbNÌüú̪q144 ¥TIC_DENO : ^CeBbNÌüú̪ê145 ¥TIMER_CLOCK : ^C}lÌà\»Æ~bPÊÆÌÏ·146 ¥INTPRI_TIMER : ^C}ÝÝDæx147 ¥INTATR_TIMER : ^C}ÝÌÝ®«148 ¥INIT_MSP : X^[gAbv[`ÅMSPðú»·éêÍè`149 ¥DEFAULT_ISTKSZ : X^bNTCYi8bytePÊÅwèj150 ¥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 : 微少時間待ちのための定義 152 150 153 151 154 (6) fBNg\¬Et@C\¬152 (6) ディレクトリ構成・ファイル構成 155 153 ./arch/arm_m_gcc/ 156 154 ./Makefile.prc … … 177 175 ./start.S 178 176 179 (12) o[Wð177 (12) バージョン履歴 180 178 181 179 2008/08/22 182 Eprc_user.txt/prc_design.txt183 E2008/8/21ÌZp¢ïÅÌc_Êð½fD184 Eprc_support.S/prc_config.c/prc_config.h/arm_m.h185 EReLXg»èðexc_ncnt©çANeBuÈX^bNÉÏX186 Eprc_config.c187 Eset_exc_int_priority() ÅT|[gÂ\ÈIRQÌãÀð239Ég£D188 Estart.S189 EN®ÍThread[hðOñƵĢé±Æð¾LD190 Eu[g[_[©çN®³êéêðzèµCMSPðLøÉ·éæ¤É191 ÏXD192 Eprc_timer.c193 ERgðC³194 EfobOpR[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 ・デバッグ用コードを削除 195 193 196 194 2008/07/11 197 EÅÌ[X195 ・最初のリリース 198 196 199 197 2013/04/07 200 EáO¶ÉÝ/CPUáO¶ñÌCNgªsíêĢȩÁ½201 âèÌC³198 ・例外処理発生時に割込み/CPU例外発生回数のインクリメントが行われていなかった 199 問題の修正 -
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/arch/arm_m_gcc/start.S
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
r93 r95 8 8 * Nagoya Municipal Industrial Research Institute, JAPAN 9 9 * 10 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 11 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 12 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 13 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 14 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 15 * XR[hÉÜÜêÄ¢é±ÆD 16 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 17 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 18 gip 19 * Ò}j 20 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 21 * ̳ÛØKèðfÚ·é±ÆD 22 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 23 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 24 * ÆD 25 * (a) Äzzɺ¤hL 26 gipÒ}j 27 AÈÇjÉCãLÌ 28 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 29 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 30 * ñ·é±ÆD 31 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 32 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 33 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 34 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 36 32 * 37 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨38 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI39 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF40 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»41 * ÌÓCðíÈ¢D33 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 34 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 35 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 36 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 37 * の責任を負わない. 42 38 * 43 39 * @(#) $Id: start.S 1304 2008-08-27 07:28:36Z ertl-honda $ … … 45 41 46 42 /* 47 * J[lpÌX^[gAbvW 48 [(ARM-Mp) 43 * カーネル用のスタートアップモジュール(ARM-M用) 49 44 */ 50 45 #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) /* ^LXgðs¤}N*/46 #define UINT_C(val) (val) /* uint_t型の定数を作るマクロ */ 47 #define ULONG_C(val) (val) /* ulong_t型の定数を作るマクロ */ 48 #define CAST(type, val) (val) /* 型キャストを行うマクロ */ 54 49 55 50 #include "kernel_impl.h" … … 57 52 58 53 /* 59 * X^[gAbv[`54 * スタートアップルーチン 60 55 * 61 * Thread [hÅÄÑo³êé±ÆðOñƵÄéD56 * Threadモードで呼び出されることを前提としてる. 62 57 */ 63 58 .text … … 68 63 .type _start, function 69 64 _start: 70 cpsid f /* ÝbNóÔÖ*/65 cpsid f /* 割込みロック状態へ */ 71 66 72 67 #ifdef INIT_MSP 73 68 /* 74 * MSP ÌÝè69 * MSPの設定 75 70 */ 76 mov r0, #CONTROL_MSP /* MSP ðLøÉ*/71 mov r0, #CONTROL_MSP /* MSPを有効に */ 77 72 msr control, r0 78 isb /* control ÌìãÉKv*/73 isb /* control の操作後に必要 */ 79 74 ldr r0,=_kernel_istkpt 80 75 ldr r1,[r0] … … 83 78 84 79 /* 85 * hardware_init_hook ÌÄÑoµ i0ÅÈ¢êj80 * hardware_init_hookの呼び出し (0でない場合) 86 81 * 87 * ^[Qbgn[hEFAÉ˶µÄKvÈú»ª éê88 * ÍChardware_init_hook Æ¢¤ÖðpÓ·é82 * ターゲットハードウェアに依存して必要な初期化処理がある場合 83 * は,hardware_init_hook という関数を用意する 89 84 */ 90 85 ldr r0, =hardware_init_hook … … 95 90 #ifndef OMIT_BSS_INIT 96 91 /* 97 * BSS ZNVú»92 * BSSセクション初期化 98 93 */ 99 94 mov r0, #0 … … 114 109 #ifndef OMIT_DATA_INIT 115 110 /* 116 * DATA ZNVú»117 * __idata_start ©ç __idata_end ÜÅðC__data_start È~É118 * Rs[·é111 * DATAセクション初期化 112 * __idata_start から __idata_end までを,__data_start 以降に 113 * コピーする 119 114 */ 120 115 ldr r1, =__idata_start … … 133 128 134 129 /* 135 * software_init_hook ðÄoµi0 ÅÈ¢êj130 * software_init_hook を呼出し(0 でない場合) 136 131 * 137 * \tgEFA«iÁÉCujÉ˶µÄKvÈú»138 * ª éêÍCsoftware_init_hook Æ¢¤ÖðpÓ·êÎ139 * æ¢D132 * ソフトウェア環境(特にライブラリ)に依存して必要な初期化処 133 * 理がある場合は,software_init_hook という関数を用意すれば 134 * よい. 140 135 */ 141 136 start_5: -
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/arch/ca78k0r/MANIFEST
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
-
Property svn:mime-type
set to
-
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
-
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/arch/ca78k0r/gensyms-rl78/gensyms-rl78/App.config
-
Property svn:mime-type
set to
text/plain; charset=utf-8
-
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/arch/ca78k0r/gensyms-rl78/gensyms-rl78/Program.cs
-
Property svn:mime-type
set to
text/plain; charset=utf-8
-
Property svn:mime-type
set to
-
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
-
Property svn:mime-type
set to
-
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
-
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/arch/ca78k0r/tool_stddef.h
-
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ü 15 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 16 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 17 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 18 * XR[hÉÜÜêÄ¢é±ÆD 19 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 20 * pÅ«é`ÅÄ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Ég 26 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 27 * ÆD 28 * (a) Äzzɺ¤hL 29 gipÒ}j 30 AÈÇjÉCãLÌ 31 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 32 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 33 * ñ·é±ÆD 34 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 35 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 36 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 37 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 39 35 * 40 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨41 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI42 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF43 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»44 * ÌÓCðíÈ¢D36 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 37 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 38 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 39 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 40 * の責任を負わない. 45 41 * 46 42 */ 47 43 48 44 /* 49 * t_stddef.h ÌJ«˶ilTXGNgjNX CA78K0Rpj45 * t_stddef.hの開発環境依存部(ルネサスエレクトロニクス CA78K0R用) 50 46 * 51 * ±ÌCN[ht@CÍCtarget_stddef.h ÌæªÅCN[h³êéD47 * このインクルードファイルは,target_stddef.h の先頭でインクルードされる. 52 48 */ 53 49 … … 56 52 57 53 /* 58 * RpCÌg£@\̽ßÌ}Nè`54 * コンパイラの拡張機能のためのマクロ定義 59 55 */ 60 56 /* 61 * inline ¯ÊqÍRpCªT|[gµÈ¢D57 * inline 識別子はコンパイラがサポートしない. 62 58 */ 63 59 #define inline … … 65 61 66 62 /* 67 * RpCÅÍ __asm ¯ÊqªT|[g³êÄ¢éªgpµÈ¢½ß¢è`Æ·éD63 * コンパイラでは __asm 識別子がサポートされているが使用しないため未定義とする. 68 64 */ 69 65 70 66 /* 71 * ^[µÈ¢ÖÅ é±Æ𦷽ßÌL[[h72 * ÀÛÉͽàµÈ¢67 * リターンしない関数であることを示すためのキーワード 68 * 実際には何もしない 73 69 */ 74 70 #define NoReturn … … 76 72 77 73 /* 78 * J«ÌWCN[ht@CÌp74 * 開発環境の標準インクルードファイルの利用 79 75 * 80 * NULL Ìè`ðstddef.h©çCINT_MAXCINT_MINCUINT_MAXCLONG_MAXC81 * LONG_MIN CULONG_MAXCCHAR_BITÌè`ðlimits.h©çæèÞD76 * NULLの定義をstddef.hから,INT_MAX,INT_MIN,UINT_MAX,LONG_MAX, 77 * LONG_MIN,ULONG_MAX,CHAR_BITの定義をlimits.hから取り込む. 82 78 */ 83 79 #ifndef TOPPERS_MACRO_ONLY … … 87 83 88 84 /* 89 * stdint.h ÌãpÆÈéè`85 * stdint.hの代用となる定義 90 86 * 91 * C99 Ì stdint.h ªpÓ³êĢȢ½ßC»ÌãpÆÈéè`ð^¦éD87 * C99 の stdint.h が用意されていないため,その代用となる定義を与える. 92 88 */ 93 89 94 90 /* 95 * RpC˶Ìf[^^Ìè`91 * コンパイラ依存のデータ型の定義 96 92 */ 97 93 #ifndef TOPPERS_MACRO_ONLY 98 94 99 typedef signed char int8_t; /* t«8rbg®*/100 typedef unsigned char uint8_t; /* ³µ8rbg®*/95 typedef signed char int8_t; /* 符号付き8ビット整数 */ 96 typedef unsigned char uint8_t; /* 符号無し8ビット整数 */ 101 97 102 typedef signed short int16_t; /* t«16rbg®*/103 typedef unsigned short uint16_t; /* ³µ16rbg®*/98 typedef signed short int16_t; /* 符号付き16ビット整数 */ 99 typedef unsigned short uint16_t; /* 符号無し16ビット整数 */ 104 100 105 typedef signed long int32_t; /* t«32rbg®*/106 typedef unsigned long uint32_t; /* ³µ32rbg®*/101 typedef signed long int32_t; /* 符号付き32ビット整数 */ 102 typedef unsigned long uint32_t; /* 符号無し32ビット整数 */ 107 103 108 /* 64 rbg®^Í¢T|[g*/104 /* 64ビット整数型は未サポート */ 109 105 110 typedef int8_t int_least8_t; /* 8 rbgÈãÌt«®*/111 typedef uint8_t uint_least8_t; /* 8 rbgÈã̳µ®*/106 typedef int8_t int_least8_t; /* 8ビット以上の符号付き整数 */ 107 typedef uint8_t uint_least8_t; /* 8ビット以上の符号無し整数 */ 112 108 113 typedef long intptr_t; /* |C^ði[Å«ét«®*/114 typedef unsigned long uintptr_t; /* |C^ði[Å«é³µ®*/109 typedef long intptr_t; /* ポインタを格納できる符号付き整数 */ 110 typedef unsigned long uintptr_t; /* ポインタを格納できる符号無し整数 */ 115 111 116 112 #endif /* TOPPERS_MACRO_ONLY */ 117 113 118 114 /* 119 * RpC˶Ìf[^^Ì®èðìé}N(C99)120 * pÓ³êĢȢ½ßC±±Åè`·éD115 * コンパイラ依存のデータ型の整数定数を作るマクロ(C99) 116 * 用意されていないため,ここで定義する. 121 117 */ 122 118 #ifndef INT8_C … … 145 141 146 142 /* 147 * RpC˶Ìf[^^Éi[Å«éÅålÆŬlÌè`(C99)148 * pÓ³êĢȢ½ßC±±Åè`·éD143 * コンパイラ依存のデータ型に格納できる最大値と最小値の定義(C99) 144 * 用意されていないため,ここで定義する. 149 145 */ 150 146 #define INT8_MAX SCHAR_MAX … … 165 161 166 162 /* 167 * ®¬_^ÉÖ·éè`163 * 浮動小数点型に関する定義 168 164 */ 169 165 #ifndef TOPPERS_MACRO_ONLY 170 166 171 typedef float float32_t; /* IEEE754 ÌP¸x®¬_*/172 /* {¸x®¬_Í¢T|[gÅ èCdoubleàfloatƯ¶32rbg*/167 typedef float float32_t; /* IEEE754準拠の単精度浮動小数点数 */ 168 /* 倍精度浮動小数点数は未サポートであり,doubleもfloatと同じ32ビット */ 173 169 174 170 #endif /* TOPPERS_MACRO_ONLY */ … … 178 174 179 175 /* 180 * óxÌè`181 * 嫳[ÌzñÍxÉÈé½ßA182 * ±±ÅÊrè`·éB176 * 空ラベルの定義 177 * 大きさゼロの配列は警告になるため、 178 * ここで別途定義する。 183 179 */ 184 180 #define TOPPERS_EMPTY_LABEL(x,y) x y[1] -
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/arch/gcc/MANIFEST
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
-
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/arch/gcc/tool_stddef.h
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
r93 r95 8 8 * Graduate School of Information Science, Nagoya Univ., JAPAN 9 9 * 10 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 11 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 12 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 13 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 14 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 15 * XR[hÉÜÜêÄ¢é±ÆD 16 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 17 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 18 gip 19 * Ò}j 20 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 21 * ̳ÛØKèðfÚ·é±ÆD 22 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 23 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 24 * ÆD 25 * (a) Äzzɺ¤hL 26 gipÒ}j 27 AÈÇjÉCãLÌ 28 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 29 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 30 * ñ·é±ÆD 31 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 32 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 33 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 34 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 35 * ÆÓ·é±ÆD 36 * 37 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨ 38 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI 39 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF 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 * の責任を負わない. 42 38 * 43 39 * @(#) $Id: tool_stddef.h 819 2008-03-18 12:58:50Z hiro $ … … 45 41 46 42 /* 47 * t_stddef.h ÌJ«˶iGCCpj43 * t_stddef.hの開発環境依存部(GCC用) 48 44 */ 49 45 … … 52 48 53 49 /* 54 * RpCÌg£@\̽ßÌ}Nè`55 */ 56 #ifndef __cplusplus /* C++ ÉÍinline ª é*/57 #if __STDC_VERSION__ < 199901L /* C99 ÉÍinline ª é*/58 #define inline __inline__ /* CCÖ*/50 * コンパイラの拡張機能のためのマクロ定義 51 */ 52 #ifndef __cplusplus /* C++にはinline がある */ 53 #if __STDC_VERSION__ < 199901L /* C99にはinline がある */ 54 #define inline __inline__ /* インライン関数 */ 59 55 #endif /* __STDC_VERSION__ < 199901L */ 60 56 #endif /* __cplusplus */ 61 57 62 #define Inline static __inline__ /* CCÖ*/63 64 #ifndef __cplusplus /* C++ ÉÍasmª é*/65 #define asm __asm__ /* CCAZu*/58 #define Inline static __inline__ /* インライン関数 */ 59 60 #ifndef __cplusplus /* C++にはasmがある */ 61 #define asm __asm__ /* インラインアセンブラ */ 66 62 #endif /* __cplusplus */ 67 63 68 #define Asm __asm__ volatile /* CCAZuiÅK»}~j*/64 #define Asm __asm__ volatile /* インラインアセンブラ(最適化抑止)*/ 69 65 70 66 #define NoReturn __attribute__((__noreturn__)) 71 /* ^[µÈ¢Ö*/72 73 /* 74 * J«ÌWCN[ht@CÌp75 * 76 * NULL Ìè`ðstddef.h©çCINT_MAXCINT_MINCUINT_MAXCLONG_MAXC77 * LONG_MIN CULONG_MAXCCHAR_BITÌè`ðlimits.h©çæèÞD78 * 79 * C++/EC++ ÅÍCWdlãͱêçÌCN[ht@CªpÓ³êÄ80 * ¢éÆÍÀçÈ¢ÌÅÓªKvÅ éiÙÆñÇÌJ«ÅpÓ³ê81 * Ä¢éjD67 /* リターンしない関数 */ 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 * ている). 82 78 */ 83 79 #ifndef TOPPERS_MACRO_ONLY … … 87 83 88 84 /* 89 * stdint.h ÌãpÆÈéè`90 * 91 * J«Éstdint.hªpÓ³êĨç¸Ce®^ÌTCYª ép^[92 * ÉÄÍÜéêÉCstdint.hÌãpÆÈéè`ð^¦éD93 * 94 * TOPPERS_STDINT_TYPE1: char/short/int/long long Ìrbg·ª»ê¼ê95 * 8/16/32/64 rbgÅC|C^Ìrbg·ªlong96 * Ìrbg·Æê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 * のビット長と一致する場合 97 93 */ 98 94 #ifdef TOPPERS_STDINT_TYPE1 99 95 100 96 /* 101 * RpC˶Ìf[^^Ìè`97 * コンパイラ依存のデータ型の定義 102 98 */ 103 99 #ifndef TOPPERS_MACRO_ONLY 104 100 105 typedef signed char int8_t; /* t«8rbg®*/106 typedef unsigned char uint8_t; /* ³µ8rbg®*/107 108 typedef signed short int16_t; /* t«16rbg®*/109 typedef unsigned short uint16_t; /* ³µ16rbg®*/110 111 typedef signed int int32_t; /* t«32rbg®*/112 typedef unsigned int uint32_t; /* ³µ32rbg®*/113 114 typedef signed long long int64_t; /* t«64rbg®*/115 typedef unsigned long long uint64_t; /* ³µ64rbg®*/116 117 typedef int8_t int_least8_t; /* 8 rbgÈãÌt«®*/118 typedef uint8_t uint_least8_t; /* 8 rbgÈã̳µ®*/119 120 typedef long intptr_t; /* |C^ði[Å«ét«®*/121 typedef unsigned long uintptr_t; /* |C^ði[Å«é³µ®*/101 typedef signed char int8_t; /* 符号付き8ビット整数 */ 102 typedef unsigned char uint8_t; /* 符号無し8ビット整数 */ 103 104 typedef signed short int16_t; /* 符号付き16ビット整数 */ 105 typedef unsigned short uint16_t; /* 符号無し16ビット整数 */ 106 107 typedef signed int int32_t; /* 符号付き32ビット整数 */ 108 typedef unsigned int uint32_t; /* 符号無し32ビット整数 */ 109 110 typedef signed long long int64_t; /* 符号付き64ビット整数 */ 111 typedef unsigned long long uint64_t; /* 符号無し64ビット整数 */ 112 113 typedef int8_t int_least8_t; /* 8ビット以上の符号付き整数 */ 114 typedef uint8_t uint_least8_t; /* 8ビット以上の符号無し整数 */ 115 116 typedef long intptr_t; /* ポインタを格納できる符号付き整数 */ 117 typedef unsigned long uintptr_t; /* ポインタを格納できる符号無し整数 */ 122 118 123 119 #endif /* TOPPERS_MACRO_ONLY */ 124 120 125 121 /* 126 * RpC˶Ìf[^^Ì®èðìé}N122 * コンパイラ依存のデータ型の整数定数を作るマクロ 127 123 */ 128 124 #ifndef INT8_C … … 159 155 160 156 /* 161 * RpC˶Ìf[^^Éi[Å«éÅålÆŬlÌè`157 * コンパイラ依存のデータ型に格納できる最大値と最小値の定義 162 158 */ 163 159 #define INT8_MAX SCHAR_MAX … … 184 180 185 181 /* 186 * ®¬_^ÉÖ·éè`187 * 188 * TOPPERS_STDFLOAT_TYPE1: float ªIEEE754ÌP¸x®¬_C189 * double ª{¸x®¬_Ìê182 * 浮動小数点型に関する定義 183 * 184 * TOPPERS_STDFLOAT_TYPE1: floatがIEEE754準拠の単精度浮動小数点数, 185 * doubleが倍精度浮動小数点数の場合 190 186 */ 191 187 #ifdef TOPPERS_STDFLOAT_TYPE1 192 188 #ifndef TOPPERS_MACRO_ONLY 193 189 194 typedef float float32_t; /* IEEE754 ÌP¸x®¬_*/195 typedef double double64_t; /* IEEE754 Ì{¸x®¬_*/190 typedef float float32_t; /* IEEE754準拠の単精度浮動小数点数 */ 191 typedef double double64_t; /* IEEE754準拠の倍精度浮動小数点数 */ 196 192 197 193 #endif /* TOPPERS_MACRO_ONLY */ -
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/arch/rl78_ca78k0r/MANIFEST
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
-
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/arch/rl78_ca78k0r/prc.tf
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
r93 r95 7 7 $ Nagoya Municipal Industrial Research Institute, JAPAN 8 8 $ 9 $ ãLì ÒÍCÈºÌ (1)`(4) Ìðð½·êÉÀèC{\tgEF 10 $ Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»EüÏE 11 $ ÄzziȺCpÆÄÔj·é±Æð³Åø·éD 12 $ (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 13 $ \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[X 14 $ R[hÉÜÜêÄ¢é±ÆD 15 $ (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉgp 16 $ Å«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 17 gipÒ} 18 $ j 19 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺLÌ³Û 20 $ ØKèðfÚ·é±ÆD 21 $ (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉgp 22 $ Å«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·±ÆD 23 $ (a) Äzzɺ¤hL 24 gipÒ}j 25 AÈÇjÉCãLÌì 26 $ \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 27 $ (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉñ 28 $ ·é±ÆD 29 $ (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹Q 30 $ ©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆDܽC 31 $ {\tgEFAÌ[UܽÍGh[U©çÌ¢©ÈéRÉîà 32 $ ¿©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 33 $ 34 $ {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨æ 35 $ ÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚIÉη 36 $ éK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEFAÌp 37 $ Éæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»ÌÓCð 38 $ íÈ¢D 39 $ 40 41 $ 42 $ vZbT˶ev[g 43 $ 44 45 $ 46 $ ATT_ISRÅgpÅ«éÝÔÆ»êÉηéÝnhÔ 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で使用できる割込み番号とそれに対応する割込みハンドラ番号 47 43 $ 48 44 … … 51 47 52 48 $ 53 $ DEF_INH ^DEF_EXCÅgpÅ«éÝnhÔ^CPUáOnhÔ49 $ DEF_INH/DEF_EXCで使用できる割込みハンドラ番号/CPU例外ハンドラ番号 54 50 $ 55 51 … … 58 54 59 55 $ 60 $ CFG_INT ÅgpÅ«éÝÔÆÝDæx56 $ CFG_INTで使用できる割込み番号と割込み優先度 61 57 $ 62 58 63 59 $INTNO_CFGINT_VALID = INTNO_VALID$ 64 60 65 $ // INTPRI_CFGINT_VALID ÍvZbTÉZbgÂ\ÈDæxÌÍÍð¦µC66 $ // J[lÇ(O)©Ç¤©ÌæÊðµÄ¢È¢D67 $ // J[lÇÆÈéÝDæxÌÍÍðÏX·éêC68 $ // TMIN_INTPRI (prc_kernel.h) ÌlðKvɶÄÏX·éD61 $ // INTPRI_CFGINT_VALID はプロセッサにセット可能な優先度の範囲を示し, 62 $ // カーネル管理(外)かどうかの区別をしていない. 63 $ // カーネル管理となる割込み優先度の範囲を変更する場合, 64 $ // TMIN_INTPRI (prc_kernel.h) の値を必要に応じて変更する. 69 65 $INTPRI_CFGINT_VALID = { -4,-3,-2,-1 }$ 70 66 71 67 $ 72 $ X^bNTCYÌ`FbNû@wè73 $ 74 $ ACgÉÖWȯ¶¬xÅANZXÅ«é68 $ スタックサイズのチェック方法指定 69 $ 70 $ アライメントに関係なく同じ速度でアクセスできる 75 71 $ 76 72 … … 79 75 80 76 $ 81 $ èè`77 $ 定数定義 82 78 $ 83 79 $TA_POSEDGE = TA_EDGE$ 84 80 85 81 $ 86 $ ^[Qbg˶ÌÝ®«Ìè`82 $ ターゲット依存の割込み属性の定義 87 83 $ 88 84 … … 90 86 91 87 $ 92 $ Wev[gt@CÌCN[h88 $ 標準テンプレートファイルのインクルード 93 89 $ 94 90 $INCLUDE "kernel.tf"$ … … 96 92 97 93 $ 98 $ CFG_INT Ì^[Qbg˶ÌG[`FbN94 $ CFG_INTのターゲット依存のエラーチェック 99 95 $ 100 96 $ … … 102 98 103 99 $FOREACH intno INT.ORDER_LIST$ 104 $ // INT ÝÉηéÝԩǤ©100 $ // INT割込みに対する割込み番号かどうか 105 101 $IF (LENGTH(FIND(INTNO_INT , INT.INTNO[intno])) != 0)$ 106 $ // TA_POSEDGE Ü½Í TA_NEGEDGE Ü½Í TA_BOTHEDGE ª¯ÉÝè³êÄÈ¢©Ç¤©102 $ // TA_POSEDGE または TA_NEGEDGE または TA_BOTHEDGE が同時に設定されてないかどうか 107 103 $IF 108 104 ( ((INT.INTATR[intno] & (TA_POSEDGE|TA_NEGEDGE|TA_BOTHEDGE)) != (TA_POSEDGE)) … … 113 109 $END$ 114 110 $ELSE$ 115 $ // INT ÝÈOÌÝÉ뵀 TA_ENAINT yÑ TA_EDGE ÈOÌÝ®«ªwè³êĢȢ©Ç¤©111 $ // INT割込み以外の割込みに対して TA_ENAINT 及び TA_EDGE 以外の割込み属性が指定されていないかどうか 116 112 $IF (INT.INTATR[intno] & ~(TA_ENAINT|TA_EDGE)) != 0$ 117 113 $ERROR$ INT.TEXT_LINE[intno]: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "intatr", INT.INTATR[intno], INT.INTNO[intno], "CFG_INT")$$END$ … … 122 118 123 119 $ 124 $ ÝÔ©çÝDæxðæèo·e[u120 $ 割込み番号から割込み優先度を取り出すテーブル 125 121 $ 126 122 … … 141 137 142 138 $ 143 $ A[LeN`˶ev[giAZuÅLªj144 $ 145 146 $ 147 $ AZuoÍt@C (¤Êª)139 $ アーキテクチャ依存テンプレート(アセンブラ固有部分) 140 $ 141 142 $ 143 $ アセンブラ出力ファイル (共通部分) 148 144 $ 149 145 … … 151 147 152 148 ;$NL$ 153 ; RL78 A[LeN`˶oÍt@C$NL$154 ;$NL$ 155 ; ÝnhüûÌè`$NL$149 ; RL78アーキテクチャ依存出力ファイル$NL$ 150 ;$NL$ 151 ; 割込みハンドラ入口処理の定義$NL$ 156 152 ;$NL$ 157 153 $NL$$NL$ … … 159 155 160 156 $ 161 $ Ýüû162 $ 163 164 $ 165 $ O[oV{157 $ 割込み入口処理 158 $ 159 160 $ 161 $ グローバルシンボル 166 162 $ 167 163 … … 169 165 $TAB$extrn __kernel_int_return$NL$$NL$ 170 166 171 $TAB$; RpCªgp·é saddrÌæÌWX^$NL$167 $TAB$; コンパイラが使用する saddr領域のレジスタ$NL$ 172 168 $TAB$extrn _@RTARG0,_@RTARG2,_@RTARG4,_@RTARG6,_@SEGAX,_@SEGDE$NL$ 173 169 $TAB$extrn _@NRARG0,_@NRARG1,_@NRARG2,_@NRARG3$NL$ … … 176 172 177 173 ; $NL$ 178 ; RpCªgp·ésaddrÌæÌÞð$NL$174 ; コンパイラが使用するsaddr領域の退避 $NL$ 179 175 ; $NL$ 180 176 save_saddr_regs macro$NL$ … … 191 187 $TAB$movw ax, _@SEGDE $NL$ 192 188 $TAB$push ax $NL$ 193 $TAB$$$if (ALLOC_REGVAR_TO_SADDR) ; -qr IvVðgp·éê$NL$189 $TAB$$$if (ALLOC_REGVAR_TO_SADDR) ; -qr オプションを使用する場合 $NL$ 194 190 $TAB$movw ax, _@NRARG0 $NL$ 195 191 $TAB$push ax $NL$ … … 215 211 216 212 $ 217 $ Ýnhüû213 $ 割込みハンドラ入口処理 218 214 $ 219 215 … … 223 219 $TAB$public __kernel_$INH.INTHDR[inhno]$_$+INH.INHNO[inhno]$_entry $NL$ 224 220 __kernel_$INH.INTHDR[inhno]$_$+INH.INHNO[inhno]$_entry: $NL$ 225 $TAB$push ax ; WX^ð^XNX^bNÖÞð$NL$221 $TAB$push ax ; レジスタをタスクスタックへ退避 $NL$ 226 222 $TAB$push bc $NL$ 227 223 $TAB$push de $NL$ 228 224 $TAB$push hl $NL$ 229 $TAB$mov a,es ; ES, CS ÌÞð$NL$225 $TAB$mov a,es ; ES, CS の退避 $NL$ 230 226 $TAB$mov x,a $NL$ 231 227 $TAB$mov a,cs $NL$ 232 228 $TAB$push ax $NL$ 233 229 $TAB$save_saddr_regs$NL$ 234 $TAB$movw bc, #_$INH.INTHDR[inhno]$ ; nhÌAhXð bc Ö$NL$230 $TAB$movw bc, #_$INH.INTHDR[inhno]$ ; ハンドラのアドレスを bc へ $NL$ 235 231 236 232 $IF (INH.INHATR[inhno] & TA_NONKERNEL) == 0$ 237 $TAB$br __kernel_interrupt_entry ; ¤ÊÌüûÖ$NL$233 $TAB$br __kernel_interrupt_entry ; 共通の入口処理へ $NL$ 238 234 $NL$$NL$ 239 235 $ELSE$ 240 $TAB$; J[lÇOÌÝÌêCnhÀsµÄ»ÌÜÜ^[$NL$241 $TAB$call bc ; ÝnhÄÑoµ$NL$242 $TAB$br __kernel_int_return ; WX^A & Ý©ç^[(prc_support.asm) $NL$236 $TAB$;カーネル管理外の割込みの場合,ハンドラ実行してそのままリターン $NL$ 237 $TAB$call bc ; 割込みハンドラ呼び出し$NL$ 238 $TAB$br __kernel_int_return ; レジスタ復帰 & 割込みからリターン(prc_support.asm) $NL$ 243 239 $END$ 244 240 $END$ … … 247 243 248 244 $ 249 $ CPU áOnhüû245 $ CPU例外ハンドラ入口処理 250 246 $ 251 247 … … 255 251 $TAB$public __kernel_$EXC.EXCHDR[excno]$_$+EXC.EXCNO[excno]$_entry $NL$ 256 252 __kernel_$EXC.EXCHDR[excno]$_$+EXC.EXCNO[excno]$_entry: $NL$ 257 $TAB$push ax ; WX^ð^XNX^bNÖÞð$NL$253 $TAB$push ax ; レジスタをタスクスタックへ退避 $NL$ 258 254 $TAB$push bc $NL$ 259 255 $TAB$push de $NL$ 260 256 $TAB$push hl $NL$ 261 $TAB$mov a,es ; ES, CS ÌÞð$NL$257 $TAB$mov a,es ; ES, CS の退避 $NL$ 262 258 $TAB$mov x,a $NL$ 263 259 $TAB$mov a,cs $NL$ 264 260 $TAB$push ax $NL$ 265 261 $TAB$save_saddr_regs $NL$ 266 $TAB$movw ax, sp ; SP( nhÌøÆÈé)ð ax Ö$NL$267 $TAB$movw bc, #_$EXC.EXCHDR[excno]$ ; nhÌAhXð 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$ 269 265 $NL$$NL$ 270 266 $END$ … … 273 269 274 270 $ 275 $ xN^e[u276 $ 277 278 ;$NL$ 279 ; xN^e[u$NL$271 $ ベクタテーブル 272 $ 273 274 ;$NL$ 275 ; ベクタテーブル$NL$ 280 276 ;$NL$ 281 277 $NL$ … … 308 304 309 305 $ 310 $ prc_support.asm p}Nè`t@C306 $ prc_support.asm 用マクロ定義ファイル 311 307 $ 312 308 -
Property svn:mime-type
set to
-
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 1 1 /* 2 * cfg1_out.c ÌNÉKvÈX^uÌè`2 * cfg1_out.cのリンクに必要なスタブの定義 3 3 */ 4 4 -
Property svn:mime-type
set to
-
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
-
ssp_qb_r5f100le_cs/trunk/arch/rl78_ca78k0r/prc_config.h
-
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 49 * 50 * ±ÌCN[ht@CÍC"<vZbT^Ô>_config.h" ÌÝ©ç 51 * CN[h³êéD¼Ìt@C©ç¼ÚCN[hµÄÍÈçÈ¢D 43 * プロセッサ依存モジュール(RL78) 44 * 45 * このインクルードファイルは,"<プロセッサ型番>_config.h" のみから 46 * インクルードされる.他のファイルから直接インクルードしてはならない. 52 47 */ 53 48 … … 56 51 57 52 /* 58 * (1) ReLXgÉÖ·éè`59 */ 60 61 /* ¤LX^bNÌæ̽ßÌX^bN|C^úl𶬷é}N*/53 * (1) コンテキストに関する定義 54 */ 55 56 /* 共有スタック領域のためのスタックポインタ初期値を生成するマクロ */ 62 57 #define TOPPERS_ISTKPT(istk, istksz) ((STK_T *)((char *)(istk) + (istksz))) 63 58 64 59 /* 65 * (2) VXeóÔÉÖ·éè`66 */ 67 68 /* 69 * CPU bNóÔÅÌÝDæx}XN(IPM)Ìl70 * TIPM_LOCK ÍCCPUbNóÔð\»·éÝDæx}XN(IPM)Ìlð¦·D71 * J[lÇÌÝÉηéÝDæxÌŬl(TMIN_INTPRI)ɵ¢D60 * (2) システム状態に関する定義 61 */ 62 63 /* 64 * CPUロック状態での割込み優先度マスク(IPM)の値 65 * TIPM_LOCKは,CPUロック状態を表現する割込み優先度マスク(IPM)の値を示す. 66 * カーネル管理の割込みに対する割込み優先度の最小値(TMIN_INTPRI)に等しい. 72 67 */ 73 68 #ifndef TIPM_LOCK … … 76 71 77 72 /* 78 * ÝDæx}XN(IPM) ÆvZbTÌÝDæx}XN(ISP) ÌÏ·79 * 80 * RL78 ÅÍCPSWWX^̺ʩç¦Ärbg1¨æÑ 2 Ì 2 rbgÉ81 * CT[rXEvCIeBEtO(ISP) Ìlªi[³êéD82 * 83 * J[lÌÇ·éIPM (-1©çA±µ½Ìl) ðgÁÄ84 * vZbTÌ ISP ð§ä·é½ßÉÏ·ªKvÆÈéD85 * 86 * wèµ½xȺÌÝð}XN·éêÍCISPÌÝèlð87 * ÚIÌxæèê¢Dæx(lƵÄͬ³¢)lÉ·éKvª éD73 * 割込み優先度マスク(IPM) とプロセッサの割込み優先度マスク(ISP) の変換 74 * 75 * RL78 では,PSWレジスタの下位から数えてビット1および 2 の 2 ビットに 76 * インサービス・プライオリティ・フラグ(ISP) の値が格納される. 77 * 78 * カーネルの管理するIPM (-1から連続した負の値) を使って 79 * プロセッサの ISP を制御するために変換が必要となる. 80 * 81 * 指定したレベル以下の割込みをマスクする場合は,ISPの設定値を 82 * 目的のレベルより一つ高い優先度(値としては小さい)値にする必要がある. 88 83 */ 89 84 #define IPM2ISP(ipm) (((uint8_t)(4-1+(ipm))) << 1U) /* IPM-->ISP(ipm=-3,-2,-1,0) */ … … 92 87 93 88 /* 94 * ÝDæx}XNÌÁÊÈlÉηéà\»95 */ 96 #define ISP_LOCK (IPM2ISP(TIPM_LOCK)) /* CPU bNóÔÅÌISP */97 #define ISP_ENAALL (IPM2ISP(TIPM_ENAALL)) /* TIPM_ENAALL ÅÌISP */98 99 100 101 /* 102 * (3) Ýf(ÝvC)103 */ 104 105 /* 106 * intno ªCdis_int^ena_intÉηéÝÔƵÄ107 * LøÈlÅ éêÉtrueC»¤ÅÈ¢êÉfalseðÔ·}N89 * 割込み優先度マスクの特別な値に対する内部表現 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を返すマクロ 108 103 */ 109 104 #define VALID_INTNO_DISINT(intno) VALID_INTNO(intno) … … 111 106 112 107 /* 113 * IPM ©çݧäWX^ÅÌ\»ÉÏ··é}N108 * IPM から割込み制御レジスタでの表現に変換するマクロ 114 109 */ 115 110 #define IPM2ILVL(ipm) ((ipm)+4) // ipm=-1,-2,-3,-4 … … 117 112 118 113 /* 119 * (4) Ýf(Ýnh)120 */ 121 122 /* 123 * ÝnhÌüû̶¬}N114 * (4) 割込み処理モデル(割込みハンドラ) 115 */ 116 117 /* 118 * 割込みハンドラの入口処理の生成マクロ 124 119 */ 125 120 #define _INT_ENTRY(inhno, inthdr) _kernel_##inthdr##_##inhno##_entry … … 131 126 132 127 /* 133 * (5) CPU áOf134 */ 135 136 /* 137 * CPU áOnhÌüû̶¬}N128 * (5) CPU例外処理モデル 129 */ 130 131 /* 132 * CPU例外ハンドラの入口処理の生成マクロ 138 133 */ 139 134 #define _EXC_ENTRY(excno , exchdr) _kernel_##exchdr##_##excno##_entry … … 145 140 146 141 /* 147 * (6) ú»EI¹148 */ 149 150 // è`ȵ142 * (6) 初期化・終了処理 143 */ 144 145 // 定義なし 151 146 152 147 #ifndef TOPPERS_MACRO_ONLY 153 148 154 149 /* 155 * (1) ReLXgÉÖ·éè`156 */ 157 158 /* 159 * ReLXgÌQÆ150 * (1) コンテキストに関する定義 151 */ 152 153 /* 154 * コンテキストの参照 160 155 */ 161 156 extern bool_t sense_context(void); 162 157 163 158 /* 164 * (2) VXeóÔÉÖ·éè`165 */ 166 167 /* 168 * CPU bNtOÀ»Ì½ßÌÏ(prc_config.c)169 */ 170 extern bool_t lock_flag; /* CPU bNtOÌl*/171 extern uint8_t saved_psw; /* CPU bNóÔÚsOÌÝDæxx*/172 173 /* 174 * CPU bNóÔÖÌÚs175 * ±ÌÖÍCCPU bNóÔÌÆ«ÉÄѾ³êÈ¢±ÆðOñÆ·éD159 * (2) システム状態に関する定義 160 */ 161 162 /* 163 * CPUロックフラグ実現のための変数 (prc_config.c) 164 */ 165 extern bool_t lock_flag; /* CPUロックフラグの値 */ 166 extern uint8_t saved_psw; /* CPUロック状態移行前の割込み優先度レベル */ 167 168 /* 169 * CPU ロック状態への移行 170 * この関数は,CPU ロック状態のときに呼びだされないことを前提とする. 176 171 */ 177 172 extern void t_lock_cpu(void); … … 179 174 180 175 /* 181 * CPU bNóÔÌð182 * ±ÌÖÍCCPU bNóÔÌÆ«ÉÌÝÄѾ³êé±ÆðOñÆ·éD176 * CPUロック状態の解除 177 * この関数は,CPU ロック状態のときにのみ呼びだされることを前提とする. 183 178 */ 184 179 extern void t_unlock_cpu(void); … … 187 182 188 183 /* 189 * CPU bNóÔÌQÆ184 * CPUロック状態の参照 190 185 */ 191 186 extern bool_t x_sense_lock(void); … … 195 190 196 191 /* 197 * ÝDæx}XN(IPM) ÌÝè198 * wèµ½ÝDæx(-1, -2, ..., TMIN_INTPRI) ð³É199 * vZbTÌÝDæxx (IPL) ðÝè·éD192 * 割込み優先度マスク(IPM) の設定 193 * 指定した割込み優先度(-1, -2, ..., TMIN_INTPRI) を元に 194 * プロセッサの割込み優先度レベル (IPL) を設定する. 200 195 */ 201 196 extern void x_set_ipm(PRI intpri); … … 210 205 211 206 /* 212 * (3) Ýf(ÝvC)213 */ 214 215 /* 216 * ÝvöÌxè`e[u (kernel_cfg.c ÉæéoÍ)217 * ÝÔ(INTNO) ©çÝDæxðæ¾·é½ßÉgpD207 * (3) 割込み処理モデル(割込み要求ライン) 208 */ 209 210 /* 211 * 割込み要因毎のレベル定義テーブル (kernel_cfg.c による出力) 212 * 割込み番号(INTNO) から割込み優先度を取得するために使用. 218 213 */ 219 214 extern const PRI intpri_table[]; 220 215 221 216 /* 222 * ÝvÖ~tOÌZbg(prc_config.c)223 * wèµ½ÝÔÉηéÝvCÌÝvtOðZbg·éD224 * Ý®«ªÝè³êĢȢÝvCÌÝÔðwèµ½225 * êÍCPÉ FALSE ðÔ·D217 * 割込み要求禁止フラグのセット(prc_config.c) 218 * 指定した割込み番号に対応する割込み要求ラインの割込み要求フラグをセットする. 219 * 割込み属性が設定されていない割込み要求ラインの割込み番号を指定した 220 * 場合は,単に FALSE を返す. 226 221 */ 227 222 extern bool_t x_disable_int(INTNO intno); … … 231 226 232 227 /* 233 * ÝvÖ~tOÌNA(prc_config.c)234 * wèµ½ÝÔÉηéÝvCÌÝvtOðNA·éD235 * Ý®«ªÝè³êĢȢÝvCÌÝÔðwèµ½236 * êÍCPÉ FALSE ðÔ·D228 * 割込み要求禁止フラグのクリア(prc_config.c) 229 * 指定した割込み番号に対応する割込み要求ラインの割込み要求フラグをクリアする. 230 * 割込み属性が設定されていない割込み要求ラインの割込み番号を指定した 231 * 場合は,単に FALSE を返す. 237 232 */ 238 233 extern bool_t x_enable_int(INTNO intno); … … 243 238 244 239 /* 245 * ÝvÌNA(prc_config.c)240 * 割込み要求のクリア(prc_config.c) 246 241 */ 247 242 extern void x_clear_int(INTNO intno); … … 252 247 253 248 /* 254 * ÝvÌ`FbN(prc_config.c)249 * 割込み要求のチェック(prc_config.c) 255 250 */ 256 251 extern bool_t x_probe_int(INTNO intno); … … 260 255 261 256 /* 262 * ÝvCÌ®«ÌÝè(prc_config.c)257 * 割込み要求ラインの属性の設定 (prc_config.c) 263 258 */ 264 259 extern void x_config_int(INTNO intno, ATR intatr, PRI intpri); 265 260 266 261 /* 267 * (4) Ýf(Ýnh)268 */ 269 270 /* 271 * ÝnhÌÝè272 * 273 * RL78 ÍROMÉÝxN^ðzu·é½ßC{ÖÍóÉè`·éD262 * (4) 割込み処理モデル(割込みハンドラ) 263 */ 264 265 /* 266 * 割込みハンドラの設定 267 * 268 * RL78はROMに割込みベクタを配置するため,本関数は空に定義する. 274 269 */ 275 270 #define x_define_inh(inhno, inthdr) 276 271 277 272 /* 278 * ÝnhÌüûÅKvÈ279 */ 280 #define i_begin_int(intno) /* ÁÉs¤×«ÍÈ¢*/281 282 /* 283 * ÝnhÌoûÅKvÈ284 */ 285 #define i_end_int(intno) /* ÁÉs¤×«ÍÈ¢*/286 287 /* 288 * (5) CPU áOf289 */ 290 291 /* 292 * CPU áOnhÌÝè293 * RL78 Í ROM ÉxN^ðzu·é½ßC{ÖÍóÉè`·éD273 * 割込みハンドラの入口で必要な処理 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 にベクタを配置するため,本関数は空に定義する. 294 289 */ 295 290 #define x_define_exc(excno, exchdr) 296 291 297 292 /* 298 * (6) ú»EI¹299 */ 300 301 /* 302 * vZbT˶Ìú»(prc_config.c)293 * (6) 初期化・終了処理 294 */ 295 296 /* 297 * プロセッサ依存の初期化(prc_config.c) 303 298 */ 304 299 extern void prc_initialize(void); 305 300 306 301 /* 307 * dispatcher ÄÑoµOÉ^[Qbg˶ÅKvÈðs¤½ßÌÖ302 * dispatcher 呼び出し前にターゲット依存で必要な処理を行うための関数 308 303 * (prc_support.asm) 309 304 */ … … 311 306 312 307 /* 313 * J[lÌI¹ÌÄoµiprc_support.asmj314 * 315 * call_exit_kernel ÍCJ[lÌI¹ÉÄÑo³êCX^bN|C^ð316 * ú»µCJ[lÌI¹iexit_kerneljðÄÑo·D308 * カーネルの終了処理の呼出し(prc_support.asm) 309 * 310 * call_exit_kernelは,カーネルの終了時に呼び出され,スタックポインタを 311 * 初期化し,カーネルの終了処理(exit_kernel)を呼び出す. 317 312 */ 318 313 extern void call_exit_kernel(void); 319 314 320 315 /* 321 * vZbT˶ÌI¹(prc_config.c)316 * プロセッサ依存の終了時処理(prc_config.c) 322 317 */ 323 318 extern void prc_terminate(void); 324 319 325 320 /* 326 * (7) dispacher ÅÌÝÒ¿321 * (7) dispacher での割込み待ち 327 322 */ 328 323 extern void idle_loop(void); -
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/arch/rl78_ca78k0r/prc_def.csv
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
-
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/arch/rl78_ca78k0r/prc_kernel.h
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
r93 r95 7 7 * Nagoya Municipal Industrial Research Institute, JAPAN 8 8 * 9 * ãLì ÒÍCÈºÌ (1)`(4) Ìðð½·êÉÀèC{\tgEF 10 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»EüÏE 11 * ÄzziȺCpÆÄÔj·é±Æð³Åø·éD 12 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 13 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[X 14 * R[hÉÜÜêÄ¢é±ÆD 15 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉgp 16 * Å«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 17 gipÒ} 18 * j 19 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺLÌ³Û 20 * ØKèðfÚ·é±ÆD 21 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉgp 22 * Å«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·±ÆD 23 * (a) Äzzɺ¤hL 24 gipÒ}j 25 AÈÇjÉCãLÌì 26 * \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 27 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉñ 28 * ·é±ÆD 29 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹Q 30 * ©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆDܽC 31 * {\tgEFAÌ[UܽÍGh[U©çÌ¢©ÈéRÉîà 32 * ¿©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±Æ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プロジェクトを免責すること. 33 29 * 34 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨æ35 * ÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚIÉη36 * éK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEFAÌp37 * Éæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»ÌÓCð38 * íÈ¢D30 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者およ 31 * びTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的に対す 32 * る適合性も含めて,いかなる保証も行わない.また,本ソフトウェアの利用 33 * により直接的または間接的に生じたいかなる損害に関しても,その責任を負 34 * わない. 39 35 * 40 36 */ 41 37 42 38 /* 43 * kernel.h vZbT˶iRL78j39 * kernel.h プロセッサ依存部(RL78) 44 40 * 45 * ±ÌCN[ht@CÍCtarget_kernel.hiܽÍC»±©çCN46 * [h³êét@CjÌÝ©çCN[h³êéD¼Ìt@C©ç47 * ¼ÚCN[hµÄÍÈçÈ¢D41 * このインクルードファイルは,target_kernel.h(または,そこからインク 42 * ルードされるファイル)のみからインクルードされる.他のファイルから 43 * 直接インクルードしてはならない. 48 44 */ 49 45 … … 52 48 53 49 /* 54 * J[l{ÌðRpC·é½ßÌ}Nè`50 * カーネル本体をコンパイルするためのマクロ定義 55 51 * 56 * {«ÅÍ1Öð1IuWFNgt@CÉRpC·é±ÆªÅ«È¢½ßC57 * ALLFUNC }Nðè`·éD52 * 本環境では1関数を1オブジェクトファイルにコンパイルすることができないため, 53 * ALLFUNCマクロを定義する. 58 54 */ 59 55 … … 61 57 62 58 /* 63 * T|[g·é@\Ìè`59 * サポートする機能の定義 64 60 */ 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をサポートする */ 67 63 68 64 /* 69 * J[lÇÌÝDæxÌÍÍ65 * カーネル管理の割込み優先度の範囲 70 66 * 71 * J[lÇÌÝDæxÌÅålyÑŬlÌè`D72 * ÅålÍ -1 ÅèÅC±êÍdlÉ éæ¤ÉÎÌ«ÌÏ_ÅpÓ³êÄ¢éD73 * Ŭl TMIN_INTPRI ÉÝèÂ\ÈlÌÍÍÍC-3, -2, -1 Å éD67 * カーネル管理の割込み優先度の最大値及び最小値の定義. 68 * 最大値は -1 固定で,これは統合仕様書にあるように対称性の観点で用意されている. 69 * 最小値 TMIN_INTPRI に設定可能な値の範囲は,-3, -2, -1 である. 74 70 * 75 * á¦Î TMIN_INTPRI ð -2 ÉÝè·éÆCNMI ÉÁ¦ÝDæxª76 * -4 yÑ -3 ÉÝè³êÄ¢éÝvC©çÌݪ77 * J[lÇOÌÝÆÈéD78 * ܽCTMIN_INTPRI ð -4 ÉÝè·é±ÆÍÅ«¸CNMI ¨æÑ -4 ÍíÉ79 * J[lÇOÌÝÆÈéD71 * 例えば TMIN_INTPRI を -2 に設定すると,NMI に加え割込み優先度が 72 * -4 及び -3 に設定されている割込み要求ラインからの割込みが 73 * カーネル管理外の割込みとなる. 74 * また,TMIN_INTPRI を -4 に設定することはできず,NMI および -4 は常に 75 * カーネル管理外の割込みとなる. 80 76 */ 81 77 #ifndef TMIN_INTPRI 82 #define TMIN_INTPRI (-3) /* ÝDæxÌŬliÅlj*/78 #define TMIN_INTPRI (-3) /* 割込み優先度の最小値(最高値)*/ 83 79 #endif /* TMIN_INTPRI */ 84 #define TMAX_INTPRI (-1) /* ÝDæxÌÅåliÅálj*/80 #define TMAX_INTPRI (-1) /* 割込み優先度の最大値(最低値) */ 85 81 86 82 /* 87 * èÝ®«83 * 割り込み属性 88 84 */ 89 #define TA_POSEDGE TA_EDGE /* |WeBuGbWgK*/90 #define TA_NEGEDGE UINT_C(0x04) /* lKeBuGbWgK*/91 #define TA_BOTHEDGE UINT_C(0x08) /* ¼GbWgK*/85 #define TA_POSEDGE TA_EDGE /* ポジティブエッジトリガ */ 86 #define TA_NEGEDGE UINT_C(0x04) /* ネガティブエッジトリガ */ 87 #define TA_BOTHEDGE UINT_C(0x08) /* 両エッジトリガ */ 92 88 93 89 -
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/arch/rl78_ca78k0r/prc_rename.def
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
-
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/arch/rl78_ca78k0r/prc_rename.h
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
-
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/arch/rl78_ca78k0r/prc_sil.asm
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
r93 r95 6 6 ; Nagoya Municipal Industrial Research Institute, JAPAN 7 7 ; 8 ; ãLì ÒÍCÈºÌ (1)`(4) Ìðð½·êÉÀèC{\tgEF 9 ; Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»EüÏE 10 ; ÄzziȺCpÆÄÔj·é±Æð³Åø·éD 11 ; (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 12 ; \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[X 13 ; R[hÉÜÜêÄ¢é±ÆD 14 ; (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉgp 15 ; Å«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 16 gipÒ} 17 ; j 18 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺLÌ³Û 19 ; ØKèðfÚ·é±ÆD 20 ; (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉgp 21 ; Å«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·±ÆD 22 ; (a) Äzzɺ¤hL 23 gipÒ}j 24 AÈÇjÉCãLÌì 25 ; \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 26 ; (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉñ 27 ; ·é±ÆD 28 ; (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹Q 29 ; ©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆDܽC 30 ; {\tgEFAÌ[UܽÍGh[U©çÌ¢©ÈéRÉîà 31 ; ¿©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±Æ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プロジェクトを免責すること. 32 28 ; 33 ; {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨æ34 ; ÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚIÉη35 ; éK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEFAÌp36 ; Éæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»ÌÓCð37 ; íÈ¢D29 ; 本ソフトウェアは,無保証で提供されているものである.上記著作権者およ 30 ; びTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的に対す 31 ; る適合性も含めて,いかなる保証も行わない.また,本ソフトウェアの利用 32 ; により直接的または間接的に生じたいかなる損害に関しても,その責任を負 33 ; わない. 38 34 ; 39 35 ; 40 36 41 37 ; 42 ; SIL ÌAZuLqª38 ; SILのアセンブラ記述部分 43 39 ; 44 40 … … 50 46 ; 51 47 ; uint8_t get_psw(void) 52 ; PSW Ìlðæ¾48 ; PSWの値を取得 53 49 ; 54 50 _get_psw: 55 51 push ax 56 mov a, psw ; PSW Ìlðæ¾52 mov a, psw ; PSW の値を取得 57 53 mov c, a 58 54 clrb b … … 62 58 ; 63 59 ; void set_psw(uint8_t psw) 64 ; PSW ÌlðÝè60 ; PSWの値を設定 65 61 ; 66 62 _set_psw: -
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/arch/rl78_ca78k0r/prc_sil.h
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
r93 r95 7 7 * Nagoya Municipal Industrial Research Institute, JAPAN 8 8 * 9 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 10 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 11 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 12 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 13 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 14 * XR[hÉÜÜêÄ¢é±ÆD 15 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 16 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 17 gip 18 * Ò}j 19 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 20 * ̳ÛØKèðfÚ·é±ÆD 21 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 22 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 23 * ÆD 24 * (a) Äzzɺ¤hL 25 gipÒ}j 26 AÈÇjÉCãLÌ 27 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 28 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 29 * ñ·é±ÆD 30 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 31 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 32 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 33 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 35 31 * 36 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨37 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI38 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF39 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»40 * ÌÓCðíÈ¢D32 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 33 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 34 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 35 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 36 * の責任を負わない. 41 37 * 42 38 */ 43 39 44 40 /* 45 * sil.h vZbT˶(RL78t@~¤Êª)41 * sil.h プロセッサ依存部(RL78ファミリ共通部分) 46 42 */ 47 43 … … 50 46 51 47 /* 52 * RpCª Inline ðT|[gµÈ¢½ß53 * WÌóÔANZXÖðgpµÈ¢48 * コンパイラが Inline をサポートしないため 49 * 標準のメモリ空間アクセス関数を使用しない 54 50 */ 55 51 #define TOPPERS_OMIT_SIL_ACCESS 56 52 57 53 /* 58 * PSW WX^54 * PSW レジスタ 59 55 */ 60 56 #define PSW_IE_MASK (0x80) 61 57 #define PSW_ISP_MASK (0x06) 62 58 63 // psw Ì ISP{0,1} ª¾¯ðæèo·59 // psw の ISP{0,1} 部分だけを取り出す 64 60 #define PSW2ISP(psw) ((uint8_t)((psw) & PSW_ISP_MASK)) 65 // psw Ì ISP{0,1} ÌrbgÊuÉ isp ðZbgµ½p^[ðìé61 // psw の ISP{0,1} のビット位置に isp をセットしたパターンを作る 66 62 #define PSW_SET_ISP(psw, isp) ((uint8_t)((uint8_t)(psw & ~PSW_ISP_MASK) | isp)) 67 63 … … 69 65 #ifndef TOPPERS_MACRO_ONLY 70 66 71 // PSW Ìæ¾EÝè67 // PSWの取得・設定 72 68 extern uint8_t get_psw(void); 73 69 extern void set_psw(uint8_t psw); 74 70 75 71 /* 76 * NMI ð·×ÄÌÝÌÖ~(prc_config.c)72 * NMIを除くすべての割込みの禁止(prc_config.c) 77 73 */ 78 74 extern uint8_t TOPPERS_disint(void); 79 75 80 76 /* 81 * ÝDæx}XNià\»jÌ»ÝlÌÝè(prc_config.c)77 * 割込み優先度マスク(内部表現)の現在値の設定(prc_config.c) 82 78 */ 83 79 extern void TOPPERS_enaint(uint8_t TOPPERS_psw); 84 80 85 81 /* 86 * SÝbNóÔ̧ä82 * 全割込みロック状態の制御 87 83 */ 88 84 #define SIL_PRE_LOC uint8_t TOPPERS_ie_psw; … … 91 87 92 88 /* 93 * ÷ÔÒ¿(target_support.asm, not yet)89 * 微少時間待ち(target_support.asm, not yet) 94 90 */ 95 91 extern void sil_dly_nse(ulong_t dlytim); … … 98 94 99 95 /* 100 * vZbTÌGfBA96 * プロセッサのエンディアン 101 97 */ 102 #define SIL_ENDIAN_LITTLE /* gGfBA*/98 #define SIL_ENDIAN_LITTLE /* リトルエンディアン */ 103 99 104 100 #endif /* TOPPERS_PRC_SIL_H */ -
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/arch/rl78_ca78k0r/prc_stddef.h
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
r93 r95 7 7 * Nagoya Municipal Industrial Research Institute, JAPAN 8 8 * 9 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 10 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 11 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 12 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 13 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 14 * XR[hÉÜÜêÄ¢é±ÆD 15 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 16 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 17 gip 18 * Ò}j 19 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 20 * ̳ÛØKèðfÚ·é±ÆD 21 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 22 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 23 * ÆD 24 * (a) Äzzɺ¤hL 25 gipÒ}j 26 AÈÇjÉCãLÌ 27 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 28 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 29 * ñ·é±ÆD 30 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 31 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 32 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 33 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 35 31 * 36 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨37 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI38 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF39 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»40 * ÌÓCðíÈ¢D32 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 33 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 34 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 35 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 36 * の責任を負わない. 41 37 * 42 38 */ 43 39 44 40 /* 45 * t_stddef.h ÌvZbT˶iRL78t@~¤Êªj41 * t_stddef.hのプロセッサ依存部(RL78ファミリ共通部分) 46 42 * 47 * ±ÌCN[ht@CÍCtarget_stddef.h ÌÝ©çCN[h³êéD48 * ¼Ìt@C©ç¼ÚCN[hµÄÍÈçÈ¢D43 * このインクルードファイルは,target_stddef.h のみからインクルードされる. 44 * 他のファイルから直接インクルードしてはならない. 49 45 */ 50 46 … … 53 49 54 50 /* 55 * ^[Qbgð¯Ê·é½ßÌ}NÌè`51 * ターゲットを識別するためのマクロの定義 56 52 */ 57 #define TOPPERS_RL78 /* vZbTªÌ*/53 #define TOPPERS_RL78 /* プロセッサ略称 */ 58 54 59 55 #endif /* TOPPERS_PRC_STDDEF_H */ -
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/arch/rl78_ca78k0r/prc_support.asm
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
r93 r95 6 6 ; Nagoya Municipal Industrial Research Institute, JAPAN 7 7 ; 8 ; ãLì ÒÍCÈºÌ (1)`(4) Ìðð½·êÉÀèC{\tgEF 9 ; Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»EüÏE 10 ; ÄzziȺCpÆÄÔj·é±Æð³Åø·éD 11 ; (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 12 ; \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[X 13 ; R[hÉÜÜêÄ¢é±ÆD 14 ; (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉgp 15 ; Å«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 16 gipÒ} 17 ; j 18 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺLÌ³Û 19 ; ØKèðfÚ·é±ÆD 20 ; (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉgp 21 ; Å«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·±ÆD 22 ; (a) Äzzɺ¤hL 23 gipÒ}j 24 AÈÇjÉCãLÌì 25 ; \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 26 ; (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉñ 27 ; ·é±ÆD 28 ; (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹Q 29 ; ©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆDܽC 30 ; {\tgEFAÌ[UܽÍGh[U©çÌ¢©ÈéRÉîà 31 ; ¿©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 32 ; 33 ; {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨æ 34 ; ÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚIÉη 35 ; éK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEFAÌp 36 ; Éæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»ÌÓCð 37 ; íÈ¢D 38 ; 39 ; 40 41 ; 42 ; J[lÀÌvZbT˶ª 43 ; 44 45 ; 46 ; }Nè`ÌCN[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 ; マクロ定義のインクルード 47 43 ; 48 44 $INCLUDE(prc_support_def.inc) 49 45 50 46 ; 51 ; O[oV{52 ; 53 ; RpCªgp·é saddrÌæÌWX^47 ; グローバルシンボル 48 ; 49 ; コンパイラが使用する saddr領域のレジスタ 54 50 extrn _@RTARG0,_@RTARG2,_@RTARG4,_@RTARG6,_@SEGAX,_@SEGDE 55 51 extrn _@NRARG0,_@NRARG1,_@NRARG2,_@NRARG3 56 52 extrn _@NRAT00,_@NRAT02,_@NRAT04,_@NRAT06 57 53 ; kernel_cfg.c 58 extrn __kernel_istkpt ; X^bN|C^Ìúl54 extrn __kernel_istkpt ; スタックポインタの初期値 59 55 ; prc_config.c 60 extrn _t_lock_cpu ; CPU bNóÔÖÌÚs61 extrn __kernel_intnest ; ÝÌlXgJE^62 extrn __kernel_lock_flag ; CPU bNtO56 extrn _t_lock_cpu ; CPUロック状態への移行 57 extrn __kernel_intnest ; 割込みのネストカウンタ 58 extrn __kernel_lock_flag ; CPUロックフラグ 63 59 ; task.c 64 extrn __kernel_dispatcher ; fBXpb`65 extrn __kernel_reqflg ; fBXpb`vtO66 extrn __kernel_disdsp ; fBXpb`Ö~óÔ67 extrn __kernel_search_schedtsk ; ÅDæxÌT[`68 extrn __kernel_run_task ; ^XNÌJn60 extrn __kernel_dispatcher ; ディスパッチャ 61 extrn __kernel_reqflg ; ディスパッチ要求フラグ 62 extrn __kernel_disdsp ; ディスパッチ禁止状態 63 extrn __kernel_search_schedtsk ; 最高優先度のサーチ 64 extrn __kernel_run_task ; タスクの開始 69 65 ; startup.c 70 extrn __kernel_exit_kernel ; J[lÌI¹66 extrn __kernel_exit_kernel ; カーネルの終了処理 71 67 72 68 ; prc_support.asm 73 public __kernel_start_dispatch ; fBXpb`ÌJn74 public __kernel_call_exit_kernel ; I¹ÌR[75 public __kernel_interrupt_entry ; ÝÌüû(¤Ê)76 public __kernel_int_return ; WX^ðAµÄݶ³Ö^[77 public _unused_interrupt ; ¢gpÝÌ78 79 ; 80 ; RpCÅgp·ésaddrÌæÌWX^ðÛ¶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領域のレジスタを保存 81 77 ; 82 78 restore_saddr_regs macro 83 $if (ALLOC_REGVAR_TO_SADDR) ; -qr IvVðgp·éê84 pop ax ; WX^A79 $if (ALLOC_REGVAR_TO_SADDR) ; -qr オプションを使用する場合 80 pop ax ; レジスタ復帰 85 81 movw _@NRAT06, ax ; 86 82 pop ax ; … … 99 95 movw _@NRARG0, ax ; 100 96 $endif 101 pop ax ; WX^A97 pop ax ; レジスタ復帰 102 98 movw _@SEGDE, ax ; 103 99 pop ax ; … … 114 110 115 111 ; 116 ; X^bN|C^ðú»112 ; スタックポインタを初期化 117 113 ; 118 114 reset_sp macro … … 124 120 125 121 ; 126 ; PSW Ì ISP1 = 1, ISP0 = 1 ɵÄÝÌ}XNðð·é122 ; PSW の ISP1 = 1, ISP0 = 1 にして割込みのマスクを解除する 127 123 ; 128 124 clear_pswisp_mask macro … … 136 132 137 133 ; 138 ; J[lÌ®ìJnÉKvƳêéãnðs¤½ßÌÖ139 ; sta_ker(startup.c) ©çÄÑo³êéD134 ; カーネルの動作開始に必要とされる後始末を行うための関数 135 ; sta_ker(startup.c) から呼び出される. 140 136 ; 141 137 __kernel_start_dispatch: 142 138 ; 143 ; CPU bNóÔÆSÝbNóÔÆðæÊ·éKvª éêC144 ; CPU bNóÔɵCSÝbNÌóÔðð·éD139 ; CPUロック状態と全割込みロック状態とを区別する必要がある場合, 140 ; CPUロック状態にし,全割込みロック相当の状態を解除する. 145 141 ; 146 142 call !!_t_lock_cpu … … 151 147 $ENDIF 152 148 ; 153 ; X^bN|C^ðú»·é154 ; sta_ker ©ç start_dispatch ÌÖR[ÉæéX^bNÁïªð155 ; NA·é½ßCX^bN|C^ðú»·éD149 ; スタックポインタを初期化する 150 ; sta_ker から start_dispatch の関数コールによるスタック消費分を 151 ; クリアするため,スタックポインタを初期化する. 156 152 ; 157 153 reset_sp 158 154 159 155 ; 160 ; dispatcher (task.c) ÖWv·é161 ; ÖR[ɵȢÌÍX^bNðßñ·é½ßD162 ; 163 ; dispatcher (kernel/task.c) ÌÄÑoµ156 ; dispatcher (task.c) へジャンプする 157 ; 関数コールにしないのはスタックを節約するため. 158 ; 159 ; dispatcher (kernel/task.c) の呼び出し 164 160 br !!__kernel_dispatcher 165 161 166 162 167 163 ; 168 ; I¹ÌÄÑoµ169 ; X^bN|C^ðú»µCexit_kernel ðÄÑo·D164 ; 終了処理の呼び出し 165 ; スタックポインタを初期化し,exit_kernel を呼び出す. 170 166 ; 171 167 __kernel_call_exit_kernel: … … 177 173 178 174 ; 179 ; Ý/CPUáOÌoüû(¤Ê)180 ; J[lÇÌÝܽÍCPUáOÌêÉWX^Û¶ãCÄÑo³êéD181 ; 182 ; Oñð183 ; EPSWWX^ÌIErbg=0, ISPÍót¯½ÝÌISP.184 ; EnhÌAhXª bc Éi[³êÄ¢é.185 ; ECPUáOnhÌüû©ç½êCX^bN|C^Ì186 ; æªÔn(p_excinf)ª ax Éi[³êĨèC187 ; ±êÍCPUáOnhÌø(p_excinf)ƵĻÌÜÜn³êéD188 ; 189 ; WX^ªX^bNãÉÇÌæ¤ÉÛ¶³êÄ¢é©ðȺɦ·.190 ; }ÍÀÑÌÝð\»µ½àÌÅ èCTCYðl¶µÄ¢È¢±ÆÉÓ·éD191 ; ³mÉÍf[^V[gðQÆ̱ÆD192 ; ±Ì}ÅÍãªáÊ, ºªÊÌAhXÅ, X^bNÍ}̺¤©ç193 ; ãûüÉü©ÁÄÏÝã°çêéàÌÆ·é.194 ; 195 ; ¦1 saddrÌæÌ[NGAÍRpCIvV -qr ðwè·éêÉ196 ; Û¶ªKvÅ èCÊíÍÛ¶µÈ¢DÛ¶·éêÍAZuIvV197 ; ÉÄuALLOC_REGVAR_TO_SADDRvðè`·é±ÆD198 ; 199 ; ¦2 CPUáOÌüûðoRµ½êÌÝÛ¶³êé200 ; 201 ; 202 ; ---------------<-- p_excinf( ¦)203 ; | saddr Ìæ|204 ; | [NpGA|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 | 206 202 ; ---------------<-- p_excinf 207 ; | saddr Ìæ|208 ; | ZOgîñ|209 ; | i[pGA|203 ; | saddr領域 | 204 ; |セグメント情報| 205 ; | 格納用エリア | 210 206 ; | (4byte) | 211 207 ; --------------- 212 ; | saddr Ìæ|213 ; | ^C|214 ; | øGA|208 ; | saddr領域 | 209 ; | ランタイム | 210 ; | 引数エリア | 215 211 ; | (8byte) | 216 212 ; --------------- … … 230 226 ; --------------- 231 227 ; 232 ; nh©ç^[µ½ãÍ, ½dÝÅÈ, ©ÂC233 ; reqflg ª TRUEC©ÂCdisdsp ª FALSE ÌÉCinterrupt_dispatch Öªò·éD234 ; 235 ; ½dݩǤ©ÍÝlXgJE^ÌlÅ»è·é.236 ; intnest > 0 ÈçνdÝÅ éÆ»è·é.228 ; ハンドラからリターンした後は, 多重割込みでなく, かつ, 229 ; reqflg が TRUE,かつ,disdsp が FALSE の時に,interrupt_dispatch へ分岐する. 230 ; 231 ; 多重割込みかどうかは割込みネストカウンタの値で判定する. 232 ; intnest > 0 ならば多重割込みであると判定する. 237 233 ; 238 234 239 235 __kernel_interrupt_entry: 240 inc !__kernel_intnest ; lXgJE^ðCNg241 ei ; ÝÂ(IPLÍó¯t¯çê½ÝÌx)242 call bc ; ÝnhÄÑoµ243 di ; ÝÖ~244 dec !__kernel_intnest ; lXgJE^ðfNg245 bnz $__kernel_int_return ; ßèæªñ^XNReLXg(ñ[)ÈçPÉ^[246 movw ax,!__kernel_reqflg ; fBXpb`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 ; ディスパッチ要求があるかどうか 247 243 cmpw ax, #0 248 bz $__kernel_int_return ; ȯêÎCPÉ^[244 bz $__kernel_int_return ; なければ,単にリターン 249 245 movw ax, #0 250 movw !__kernel_reqflg, ax ; reqflg = FALSE ÉߵĨ251 movw ax, !__kernel_disdsp ; fBXpb`Ö~©Ç¤©246 movw !__kernel_reqflg, ax ; reqflg = FALSE に戻しておく 247 movw ax, !__kernel_disdsp ; ディスパッチ禁止かどうか 252 248 cmpw ax, #0 253 bnz $__kernel_int_return ; Ö~ÈçCPÉ^[254 255 ; 256 ; ÝÌoû(fBXpb`t«)257 ; CPU bNÌóÔÉÚsµCVK^XNðJn·é258 ; 259 ; OñðF260 ; PSW WX^ÌIEtO = 0 (ÝÖ~)261 ; PSW WX^ÌISP{1,0} = ó¯t¯½ÝÌÝx249 bnz $__kernel_int_return ; 禁止なら,単にリターン 250 251 ; 252 ; 割込みの出口処理(ディスパッチ付き) 253 ; CPU ロック相当の状態に移行し,新規タスクを開始する 254 ; 255 ; 前提条件: 256 ; PSWレジスタのIEフラグ = 0 (割込み禁止) 257 ; PSWレジスタのISP{1,0} = 受け付けた割込みの割込みレベル 262 258 ; 263 259 __kernel_interrupt_dispatch: … … 272 268 call !!__kernel_run_task 273 269 274 ; run_task ©çÌ^[ãÌóÔ: CPUbNóÔ275 ; __kernel_int_return Ì reti Å PSW Ì IE, ISP Í276 ; ݶOÌóÔÉßé½ßClock_flag ¾¯³Éß·D270 ; run_task からのリターン後の状態: CPUロック状態 271 ; __kernel_int_return の reti で PSW の IE, ISP は 272 ; 割込み発生前の状態に戻るため,lock_flag だけ元に戻す. 277 273 movw ax, #0 278 movw !__kernel_lock_flag, ax ; lock_flag ðNA279 280 ; 281 ; WX^AµÄÝ©ç^[274 movw !__kernel_lock_flag, ax ; lock_flag をクリア 275 276 ; 277 ; レジスタ復帰して割込みからリターン 282 278 ; 283 279 __kernel_int_return: 284 restore_saddr_regs ; saddr ÌæÌWX^A285 pop ax ; ES, CS ÌA280 restore_saddr_regs ; saddr領域のレジスタ復帰 281 pop ax ; ES, CS の復帰 286 282 mov cs, a ; 287 283 mov a, x ; 288 284 mov es, a ; 289 pop hl ; WX^ðA285 pop hl ; レジスタを復帰 290 286 pop de 291 287 pop bc … … 294 290 295 291 ; 296 ; ³À[v(O̽ß)292 ; 無限ループ(念のため) 297 293 ; 298 294 _loop: … … 300 296 301 297 ; 302 ; ¢gpÝ298 ; 未使用割込み 303 299 ; 304 300 _unused_interrupt: -
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/arch/rl78_ca78k0r/prc_unrename.h
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
-
Property svn:mime-type
set to
-
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
-
ssp_qb_r5f100le_cs/trunk/arch/rl78_ca78k0r/rl78g13.h
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
r93 r95 7 7 * Nagoya Municipal Industrial Research Institute, JAPAN 8 8 * 9 * ãLì ÒÍCÈºÌ (1)`(4) Ìðð½·êÉÀèC{\tgEF 10 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»EüÏE 11 * ÄzziȺCpÆÄÔj·é±Æð³Åø·éD 12 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 13 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[X 14 * R[hÉÜÜêÄ¢é±ÆD 15 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉgp 16 * Å«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 17 gipÒ} 18 * j 19 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺLÌ³Û 20 * ØKèðfÚ·é±ÆD 21 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉgp 22 * Å«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·±ÆD 23 * (a) Äzzɺ¤hL 24 gipÒ}j 25 AÈÇjÉCãLÌì 26 * \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 27 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉñ 28 * ·é±ÆD 29 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹Q 30 * ©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆDܽC 31 * {\tgEFAÌ[UܽÍGh[U©çÌ¢©ÈéRÉîà 32 * ¿©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±Æ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プロジェクトを免責すること. 33 29 * 34 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨æ35 * ÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚIÉη36 * éK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEFAÌp37 * Éæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»ÌÓCð38 * íÈ¢D30 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者およ 31 * びTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的に対す 32 * る適合性も含めて,いかなる保証も行わない.また,本ソフトウェアの利用 33 * により直接的または間接的に生じたいかなる損害に関しても,その責任を負 34 * わない. 39 35 * 40 36 */ 41 37 42 38 /* 43 * RL78/G13 É˶·éè`39 * RL78/G13に依存する定義 44 40 */ 45 41 … … 49 45 50 46 /* 51 * CPU áOnhÔÌè`52 */ 53 #define EXCNO_BRK 0 /* \tgEFAxN^ݽß*/54 55 /* 56 * ÝÔÌè`(ftHgvCIeBÌlðÝÔÆ·é)57 */ 58 #define INTNO_INTWDTI 0 /* EHb`hbOE^C}*/59 #define INTNO_INTLV1 1 /* d³o*/60 #define INTNO_INTP0 2 /* [qüÍGbWo*/61 #define INTNO_INTP1 3 /* [qüÍGbWo*/62 #define INTNO_INTP2 4 /* [qüÍGbWo*/63 #define INTNO_INTP3 5 /* [qüÍGbWo*/64 #define INTNO_INTP4 6 /* [qüÍGbWo*/65 #define INTNO_INTP5 7 /* [qüÍGbWo*/66 67 #define INTNO_INTST2 8 /* UART2 MÌ]®¹Cobt@ó«Ý*/68 #define INTNO_INTCSI20 8 /* CSI20 Ì]®¹Cobt@ó«Ý*/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ÌÊMG[¶*/76 #define INTNO_INTTM11H 10 /* ^C}E`l11ÌJEg®¹Ü½ÍLv`®¹(8rbg^C}®ì) */77 78 #define INTNO_INTDMA0 11 /* DMA0 Ì]®¹*/79 #define INTNO_INTDMA1 12 /* DMA1 Ì]®¹*/80 81 #define INTNO_INTST0 13 /* UART0 MÌ]®¹Cobt@ó«Ý*/82 #define INTNO_INTCSI00 13 /* CSI00 Ì]®¹, obt@ó«Ý*/83 #define INTNO_INTIIC00 13 /* IIC00 Ì]®¹*/84 85 #define INTNO_INTSR0 14 /* UART0 óMÌ]®¹Cobt@ó«Ý*/86 #define INTNO_INTCSI01 14 /* CSI01 Ì]®¹, obt@ó«Ý*/87 #define INTNO_INTIIC01 14 /* IIC01 Ì]®¹*/88 89 #define INTNO_SRE0 15 /* UART0 óMÌÊMG[¶*/90 #define INTNO_INTTM01H 15 /* ^C}E`l01ÌJEg®¹Ü½ÍLv`®¹(8rbg^C}®ì) */91 92 #define INTNO_INTST1 16 /* UART1 MÌ]®¹Cobt@ó«Ý*/93 #define INTNO_INTCSI10 16 /* CSI10 Ì]®¹, obt@ó«Ý*/94 #define INTNO_INTIIC10 16 /* IIC10 Ì]®¹*/95 96 #define INTNO_INTSR1 17 /* UART1 óMÌ]®¹Cobt@ó«Ý*/97 #define INTNO_INTCSI11 17 /* CSI11 Ì]®¹, obt@ó«Ý*/98 #define INTNO_INTIIC11 17 /* IIC11 Ì]®¹*/99 100 #define INTNO_SRE1 18 /* UART1 óMÌÊMG[¶*/101 #define INTNO_INTTM03H 18 /* ^C}E`l03ÌJEg®¹Ü½ÍLv`®¹(8rbg^C}®ì) */102 103 #define INTNO_INTIICA0 19 /* IICA0 ÊM®¹*/104 #define INTNO_INTTM00 20 /* ^C}E`l00ÌJEg®¹Ü½ÍLv`®¹*/105 #define INTNO_INTTM01 21 /* ^C}E`l01ÌJEg®¹Ü½ÍLv`®¹(16rbg/ºÊ8rbg^C}®ì) */106 #define INTNO_INTTM02 22 /* ^C}E`l02ÌJEg®¹Ü½ÍLv`®¹*/107 #define INTNO_INTTM03 23 /* ^C}E`l03ÌJEg®¹Ü½ÍLv`®¹(16rbg/ºÊ8rbg^C}®ì) */108 #define INTNO_INTAD 24 /* A/D Ï·®¹*/109 #define INTNO_INTRTC 25 /* A^CENbNÌèüúM/A[êvo*/110 #define INTNO_INTIT 26 /* 12 rbgEC^[oE^C}ÌC^[oMo*/111 #define INTNO_INTKR 27 /* L[E^[EMo*/112 113 #define INTNO_INTST3 28 /* UART3 MÌ]®¹Cobt@ó«Ý*/114 #define INTNO_INTCSI30 28 /* CSI30 Ì]®¹, obt@ó«Ý*/115 #define INTNO_INTIIC30 28 /* IIC30 Ì]®¹*/116 117 #define INTNO_INTSR3 29 /* UART3 óMÌ]®¹Cobt@ó«Ý*/118 #define INTNO_INTCSI31 29 /* CSI31 Ì]®¹, obt@ó«Ý*/119 #define INTNO_INTIIC31 29 /* IIC31 Ì]®¹*/120 121 #define INTNO_INTTM13 30 /* ^C}E`l13ÌJEg®¹Ü½ÍLv`®¹(16rbg/ºÊ8rbg^C}®ì) */122 #define INTNO_INTTM04 31 /* ^C}E`l04ÌJEg®¹Ü½ÍLv`®¹*/123 #define INTNO_INTTM05 32 /* ^C}E`l05ÌJEg®¹Ü½ÍLv`®¹*/124 #define INTNO_INTTM06 33 /* ^C}E`l06ÌJEg®¹Ü½ÍLv`®¹*/125 #define INTNO_INTTM07 34 /* ^C}E`l07ÌJEg®¹Ü½ÍLv`®¹*/126 127 #define INTNO_INTP6 35 /* [qüÍGbWo*/128 #define INTNO_INTP7 36 /* [qüÍGbWo*/129 #define INTNO_INTP8 37 /* [qüÍGbWo*/130 #define INTNO_INTP9 38 /* [qüÍGbWo*/131 #define INTNO_INTP10 39 /* [qüÍGbWo*/132 #define INTNO_INTP11 40 /* [qüÍGbWo*/133 134 #define INTNO_INTTM10 41 /* ^C}E`l10ÌJEg®¹Ü½ÍLv`®¹*/135 #define INTNO_INTTM11 42 /* ^C}E`l11ÌJEg®¹Ü½ÍLv`®¹(16rbg/ºÊ8rbg^C}®ì) */136 #define INTNO_INTTM12 43 /* ^C}E`l12ÌJEg®¹Ü½ÍLv`®¹*/137 138 #define INTNO_SRE3 44 /* UART3 óMÌÊMG[¶*/139 #define INTNO_INTTM13H 44 /* ^C}E`l13ÌJEg®¹Ü½ÍLv`®¹(8rbg^C}®ì) */140 141 #define INTNO_INTMD 45 /* Z½ßI¹/ÏaZÊÌ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`l14ÌJEg®¹Ü½ÍLv`®¹*/147 #define INTNO_INTTM15 51 /* ^C}E`l15ÌJEg®¹Ü½ÍLv`®¹*/148 #define INTNO_INTTM16 52 /* ^C}E`l16ÌJEg®¹Ü½ÍLv`®¹*/149 #define INTNO_INTTM17 53 /* ^C}E`l17ÌJEg®¹Ü½ÍLv`®¹*/150 151 152 /* 153 * ÝnhÔÌè`154 */ 155 #define INHNO_INTWDTI INTNO_INTWDTI /* EHb`hbOE^C}*/156 #define INHNO_INTLV1 INTNO_INTLV1 /* d³o*/157 #define INHNO_INTP0 INTNO_INTP0 /* [qüÍGbWo*/158 #define INHNO_INTP1 INTNO_INTP1 /* [qüÍGbWo*/159 #define INHNO_INTP2 INTNO_INTP2 /* [qüÍGbWo*/160 #define INHNO_INTP3 INTNO_INTP3 /* [qüÍGbWo*/161 #define INHNO_INTP4 INTNO_INTP4 /* [qüÍGbWo*/162 #define INHNO_INTP5 INTNO_INTP5 /* [qüÍGbWo*/163 164 #define INHNO_INTST2 INTNO_INTST2 /* UART2 MÌ]®¹Cobt@ó«Ý*/165 #define INHNO_INTCSI20 INTNO_INTCSI20 /* CSI20 Ì]®¹Cobt@ó«Ý*/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ÌÊMG[¶*/173 #define INHNO_INTTM11H INTNO_INTTM11H /* ^C}E`l11ÌJEg®¹Ü½ÍLv`®¹(8rbg^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Ì]®¹Cobt@ó«Ý*/179 #define INHNO_INTCSI00 INTNO_INTCSI00 /* CSI00 Ì]®¹, obt@ó«Ý*/180 #define INHNO_INTIIC00 INTNO_INTIIC00 /* IIC00 Ì]®¹*/181 182 #define INHNO_INTSR0 INTNO_INTSR0 /* UART0 óMÌ]®¹Cobt@ó«Ý*/183 #define INHNO_INTCSI01 INTNO_INTCSI01 /* CSI01 Ì]®¹, obt@ó«Ý*/184 #define INHNO_INTIIC01 INTNO_INTIIC01 /* IIC01 Ì]®¹*/185 186 #define INHNO_SRE0 INTNO_SRE0 /* UART0 óMÌÊMG[¶*/187 #define INHNO_INTTM01H INTNO_INTTM01H /* ^C}E`l01ÌJEg®¹Ü½ÍLv`®¹(8rbg^C}®ì) */188 189 #define INHNO_INTST1 INTNO_INTST1 /* UART1 MÌ]®¹Cobt@ó«Ý*/190 #define INHNO_INTCSI10 INTNO_INTCSI10 /* CSI10 Ì]®¹, obt@ó«Ý*/191 #define INHNO_INTIIC10 INTNO_INTIIC10 /* IIC10 Ì]®¹*/192 193 #define INHNO_INTSR1 INTNO_INTSR1 /* UART1 óMÌ]®¹Cobt@ó«Ý*/194 #define INHNO_INTCSI11 INTNO_INTCSI11 /* CSI11 Ì]®¹, obt@ó«Ý*/195 #define INHNO_INTIIC11 INTNO_INTIIC11 /* IIC11 Ì]®¹*/196 197 #define INHNO_SRE1 INTNO_SRE1 /* UART1 óMÌÊMG[¶*/198 #define INHNO_INTTM03H INTNO_INTTM03H /* ^C}E`l03ÌJEg®¹Ü½ÍLv`®¹(8rbg^C}®ì) */199 200 #define INHNO_INTIICA0 INTNO_INTIICA0 /* IICA0 ÊM®¹*/201 #define INHNO_INTTM00 INTNO_INTTM00 /* ^C}E`l00ÌJEg®¹Ü½ÍLv`®¹*/202 #define INHNO_INTTM01 INTNO_INTTM01 /* ^C}E`l01ÌJEg®¹Ü½ÍLv`®¹(16rbg/ºÊ8rbg^C}®ì) */203 #define INHNO_INTTM02 INTNO_INTTM02 /* ^C}E`l02ÌJEg®¹Ü½ÍLv`®¹*/204 #define INHNO_INTTM03 INTNO_INTTM03 /* ^C}E`l03ÌJEg®¹Ü½ÍLv`®¹(16rbg/ºÊ8rbg^C}®ì) */205 #define INHNO_INTAD INTNO_INTAD /* A/D Ï·®¹*/206 #define INHNO_INTRTC INTNO_INTRTC /* A^CENbNÌèüúM/A[êvo*/207 #define INHNO_INTIT INTNO_INTIT /* 12 rbgEC^[oE^C}ÌC^[oMo*/208 #define INHNO_INTKR INTNO_INTKR /* L[E^[EMo*/209 210 #define INHNO_INTST3 INTNO_INTST3 /* UART3 MÌ]®¹Cobt@ó«Ý*/211 #define INHNO_INTCSI30 INTNO_INTCSI30 /* CSI30 Ì]®¹, obt@ó«Ý*/212 #define INHNO_INTIIC30 INTNO_INTIIC30 /* IIC30 Ì]®¹*/213 214 #define INHNO_INTSR3 INTNO_INTSR3 /* UART3 óMÌ]®¹Cobt@ó«Ý*/215 #define INHNO_INTCSI31 INTNO_INTCSI31 /* CSI31 Ì]®¹, obt@ó«Ý*/216 #define INHNO_INTIIC31 INTNO_INTIIC31 /* IIC31 Ì]®¹*/217 218 #define INHNO_INTTM13 INTNO_INTTM13 /* ^C}E`l13ÌJEg®¹Ü½ÍLv`®¹(16rbg/ºÊ8rbg^C}®ì) */219 #define INHNO_INTTM04 INTNO_INTTM04 /* ^C}E`l04ÌJEg®¹Ü½ÍLv`®¹*/220 #define INHNO_INTTM05 INTNO_INTTM05 /* ^C}E`l05ÌJEg®¹Ü½ÍLv`®¹*/221 #define INHNO_INTTM06 INTNO_INTTM06 /* ^C}E`l06ÌJEg®¹Ü½ÍLv`®¹*/222 #define INHNO_INTTM07 INTNO_INTTM07 /* ^C}E`l07ÌJEg®¹Ü½ÍLv`®¹*/223 224 #define INHNO_INTP6 INTNO_INTP6 /* [qüÍGbWo*/225 #define INHNO_INTP7 INTNO_INTP7 /* [qüÍGbWo*/226 #define INHNO_INTP8 INTNO_INTP8 /* [qüÍGbWo*/227 #define INHNO_INTP9 INTNO_INTP9 /* [qüÍGbWo*/228 #define INHNO_INTP10 INTNO_INTP10 /* [qüÍGbWo*/229 #define INHNO_INTP11 INTNO_INTP11 /* [qüÍGbWo*/230 231 #define INHNO_INTTM10 INTNO_INTTM10 /* ^C}E`l10ÌJEg®¹Ü½ÍLv`®¹*/232 #define INHNO_INTTM11 INTNO_INTTM11 /* ^C}E`l11ÌJEg®¹Ü½ÍLv`®¹(16rbg/ºÊ8rbg^C}®ì) */233 #define INHNO_INTTM12 INTNO_INTTM12 /* ^C}E`l12ÌJEg®¹Ü½ÍLv`®¹*/234 235 #define INHNO_SRE3 INTNO_SRE3 /* UART3 óMÌÊMG[¶*/236 #define INHNO_INTTM13H INTNO_INTTM13H /* ^C}E`l13ÌJEg®¹Ü½ÍLv`®¹(8rbg^C}®ì) */237 238 #define INHNO_INTMD INTNO_INTMD /* Z½ßI¹/ÏaZÊÌ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`l14ÌJEg®¹Ü½ÍLv`®¹*/244 #define INHNO_INTTM15 INTNO_INTTM15 /* ^C}E`l15ÌJEg®¹Ü½ÍLv`®¹*/245 #define INHNO_INTTM16 INTNO_INTTM16 /* ^C}E`l16ÌJEg®¹Ü½ÍLv`®¹*/246 #define INHNO_INTTM17 INTNO_INTTM17 /* ^C}E`l17ÌJEg®¹Ü½ÍLv`®¹*/247 248 249 /* 250 * ݧäWX^è`251 */ 252 #define TADR_IF0L 0xfffe0 // ÝvtOEWX^253 #define TADR_IF2L 0xfffd0 // ÝvtOEWX^254 #define TADR_MK0L 0xfffe4 // Ý}XNEtOEWX^255 #define TADR_MK2L 0xfffd4 // Ý}XNEtOEWX^256 #define TADR_PR00L 0xfffe8 // DæÊwètOEWX^257 #define TADR_PR02L 0xfffd8 // DæÊwètOEWX^258 #define TADR_EGP0 0xfff38 // Oݧ¿ãªèGbWÂWX^259 #define TADR_EGP1 0xfff3a // Oݧ¿ãªèGbWÂWX^260 261 262 #define TADR_PER0 0xf00f0 // üÓCl[uWX^0263 264 #define TBIT_PER0_TAU0EN UINT8_C(0x01) // ^C}EACEjbg0ÌüÍNbN§ä265 #define TBIT_PER0_SAU0EN UINT8_C(0x04) // VAEACEjbg0ÌüÍNbN§ä266 267 /* 268 * NbN¶ñH269 */ 270 #define TADR_CMC 0xfffa0 // NbN®ì[h§äWX^271 #define TADR_CKC 0xfffa4 // NbN®ì[h§äWX^272 #define TADR_CSC 0xfffa1 // NbN®ìXe[^X§äWX^273 #define TADR_OSTC 0xfffa2 // UÀèÔJE^óÔWX^274 275 /* 276 * ^C}EACÖAWX^(VXeeBbNp)277 */ 278 #define TADR_TPS0 0xf01b6 // ^C}ENbNIðWX^0279 #define TADR_TMR00 0xf0190 // ^C}E[hEWX^00280 #define TADR_TDR00 0xfff18 // ^C}Ef[^EWX^00281 #define TADR_TS0 0xf01b2 // ^C}E`lâ~WX^0282 #define TADR_TT0 0xf01b4 // ^C}E`lâ~WX^047 * 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 283 279 284 280 #define TBIT_TTm_TTm0 UINT16_C(0x0001) … … 288 284 289 285 /* 290 * VAEACÖAWX^291 */ 292 #define TADR_SPS0 0xf0126 // VANbNIðWX^293 #define TADR_SMR00 0xf0110 // VA[hWX^294 #define TADR_SMR01 0xf0112 // VA[hWX^295 296 #define TADR_SCR00 0xf0118 // VAÊM®ìÝèWX^297 #define TADR_SCR01 0xf011a // VAÊM®ìÝèWX^298 299 #define TADR_SDR00 0xfff10 // VAf[^WX^0300 #define TADR_SDR01 0xfff12 // VAf[^WX^0301 302 #define TADR_SOL0 0xf0134 // VAoÍxWX^0303 #define TADR_SO0 0xf0128 // VAoÍWX^0304 #define TADR_SOE0 0xf012a // VAoÍÂWX^0305 #define TADR_SSR00 0xf0100 // VAXe[^XWX^00306 #define TADR_SSR01 0xf0102 // VAXe[^XWX^01307 308 #define TADR_SS0 0xf0122 // VA`lJnWX^0309 #define TADR_ST0 0xf0124 // VA`lâ~WX^0310 311 #define TADR_SIR01 0xf010a // VAEtOENAEgKEWX^01312 313 #define TADR_NFEN0 0xf0070 // mCYEtB^ÂWX^0314 315 #define TBIT_SSRmn_BFF UINT16_C(0x0020) // `lnÌobt@WX^óÔ\¦tO316 #define TBIT_SSRmn_TSF UINT16_C(0x0040) // `lnÌÊMóÔ\¦tO317 #define TBIT_SSRmnL_BFF UINT8_C(0x20) // `lnÌobt@WX^óÔ\¦tO318 #define TBIT_SSRmnL_TSF UINT8_C(0x40) // `lnÌÊMóÔ\¦tO319 320 #define TBIT_SCRmn_TXEmn UINT16_C(0x8000) // `lnÌ®ì[h(M)321 #define TBIT_SCRmn_RXEmn UINT16_C(0x4000) // `lnÌ®ì[h(óM)322 323 /* 324 * I/O |[g286 * シリアル・アレイ関連レジスタ 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ポート 325 321 */ 326 322 #define TADR_PU0 0xf0030 … … 338 334 339 335 /* 340 * Äp|[gWX^336 * 汎用ポートレジスタ 341 337 */ 342 338 #define TBIT_BIT0 0x01 -
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/arch/rl78_ca78k0r/rl78g13.tf
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
r93 r95 1 1 $ 2 $ `bv˶ev[giRL78/G13pj2 $ チップ依存テンプレート(RL78/G13用) 3 3 $ 4 4 5 5 $ 6 $ ÝÔÆÝnhÔÌè`6 $ 割込み番号と割込みハンドラ番号の定義 7 7 $ 8 $ RL78 ÅÍÝÔÆÝnhÔª1Î1ÅηéD9 $ ftHgvCIeBðÂ}XJuݪÎÛÆÈéD10 $ ftHgvCIeBÌÔðÝÔÆ·éD8 $ RL78では割込み番号と割込みハンドラ番号が1対1で対応する. 9 $ デフォルトプライオリティを持つマスカブル割込みが対象となる. 10 $ デフォルトプライオリティの番号を割込み番号とする. 11 11 $ 12 12 … … 16 16 17 17 $ 18 $ áOÔÌè`18 $ 例外番号の定義 19 19 $ 20 $ áOÆµÄ BRK ÝÌÝÆ·éD20 $ 例外として BRK 割込みのみとする. 21 21 $ 22 22 … … 24 24 25 25 $ 26 $ INT ÝÌÔ27 $ INTP0--INTP11 ( [qüÍGbWoÝ)ªY26 $ INT割込みの番号 27 $ INTP0--INTP11 (端子入力エッジ検出割込み)が該当 28 28 $ 29 29 … … 31 31 32 32 $ 33 $ ÝÔCÝnhÔCáOÔÌÍÍ33 $ 割込み番号,割込みハンドラ番号,例外番号の範囲 34 34 $ 35 35 … … 39 39 40 40 $ 41 $ vZbT˶Ìev[gt@C41 $ プロセッサ依存のテンプレートファイル 42 42 $ 43 43 $INCLUDE"rl78_ca78k0r/prc.tf"$ -
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/arch/rl78_ca78k0r/rl78g13_config.h
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
r93 r95 7 7 * Nagoya Municipal Industrial Research Institute, JAPAN 8 8 * 9 * ãLì ÒÍCÈºÌ (1)`(4) Ìðð½·êÉÀèC{\tgEF 10 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»EüÏE 11 * ÄzziȺCpÆÄÔj·é±Æð³Åø·éD 12 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 13 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[X 14 * R[hÉÜÜêÄ¢é±ÆD 15 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉgp 16 * Å«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 17 gipÒ} 18 * j 19 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺLÌ³Û 20 * ØKèðfÚ·é±ÆD 21 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉgp 22 * Å«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·±ÆD 23 * (a) Äzzɺ¤hL 24 gipÒ}j 25 AÈÇjÉCãLÌì 26 * \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 27 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉñ 28 * ·é±ÆD 29 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹Q 30 * ©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆDܽC 31 * {\tgEFAÌ[UܽÍGh[U©çÌ¢©ÈéRÉîà 32 * ¿©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±Æ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プロジェクトを免責すること. 33 29 * 34 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨æ35 * ÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚIÉη36 * éK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEFAÌp37 * Éæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»ÌÓCð38 * íÈ¢D30 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者およ 31 * びTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的に対す 32 * る適合性も含めて,いかなる保証も行わない.また,本ソフトウェアの利用 33 * により直接的または間接的に生じたいかなる損害に関しても,その責任を負 34 * わない. 39 35 * 40 36 */ 41 37 42 38 /* 43 * vZbT˶W 44 [iRL78/G13pj 39 * プロセッサ依存モジュール(RL78/G13用) 45 40 * 46 * ±ÌCN[ht@CÍCtarget_config.h ÌÝ©çCN[h³êéD47 * ¼Ìt@C©ç¼ÚCN[hµÄÍÈçÈ¢D41 * このインクルードファイルは,target_config.h のみからインクルードされる. 42 * 他のファイルから直接インクルードしてはならない. 48 43 */ 49 44 … … 53 48 54 49 /* 55 * ÝÔÌÅål50 * 割込み番号の最大値 56 51 */ 57 52 #define INTNO_MAX UINT_C(53) 58 53 59 54 /* 60 * wèÝÔªLøÈÝÔÌÍÍÉ é©Ç¤©Ì»è55 * 指定割込み番号が有効な割込み番号の範囲にあるかどうかの判定 61 56 */ 62 57 #define VALID_INTNO(intno) \ -
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/arch/rl78_ca78k0r/segment_e.asm
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
r93 r95 1 1 ; 2 ; ZOgè`3 ; ZOgöAhXðè`·é½ßCNðêÔÅãÉ·é2 ; セグメント定義 3 ; セグメント末尾アドレスを定義するため,リンク順序を一番最後にする 4 4 ; 5 5 -
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/arch/rl78_ca78k0r/segment_s.asm
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
r93 r95 1 1 ; 2 ; ZOgè`3 ; ZOgæªAhXðè`·é½ßCNðêÔÅÉ·é2 ; セグメント定義 3 ; セグメント先頭アドレスを定義するため,リンク順序を一番最初にする 4 4 ; 5 5 6 6 ; 7 ; O[oV{7 ; グローバルシンボル 8 8 ; 9 9 extrn _start … … 14 14 15 15 ; 16 ; ZOgè`16 ; セグメント定義 17 17 ; 18 18 VECTOR CSEG … … 23 23 ;OCDWORK CSEG 24 24 25 ; IvVoCgÝè25 ; オプションバイト設定 26 26 OPT CSEG OPT_BYTE 27 db 06eh ; WDT: C^[oÝðgpµÈ¢CJE^®ìÖ~ 28 db 0ffh ; LVD: It 29 db 0efh ; HS[hCI`bvIV[^ 1MHz 30 db 085h ; I`bvfobOÂ, FظsÉtbV 31 ÁµÈ¢ 27 db 06eh ; WDT: インターバル割込みを使用しない,カウンタ動作禁止 28 db 0ffh ; LVD: オフ 29 db 0efh ; HSモード,オンチップオシレータ 1MHz 30 db 085h ; オンチップデバッグ許可, 認証失敗時にフラッシュ消去しない 32 31 33 32 ; ROM -
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/arch/rl78_ca78k0r/start.asm
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
r93 r95 6 6 ; Nagoya Municipal Industrial Research Institute, JAPAN 7 7 ; 8 ; ãLì ÒÍCÈºÌ (1)`(4) Ìðð½·êÉÀèC{\tgEF 9 ; Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»EüÏE 10 ; ÄzziȺCpÆÄÔj·é±Æð³Åø·éD 11 ; (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 12 ; \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[X 13 ; R[hÉÜÜêÄ¢é±ÆD 14 ; (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉgp 15 ; Å«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 16 gipÒ} 17 ; j 18 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺLÌ³Û 19 ; ØKèðfÚ·é±ÆD 20 ; (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉgp 21 ; Å«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·±ÆD 22 ; (a) Äzzɺ¤hL 23 gipÒ}j 24 AÈÇjÉCãLÌì 25 ; \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 26 ; (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉñ 27 ; ·é±ÆD 28 ; (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹Q 29 ; ©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆDܽC 30 ; {\tgEFAÌ[UܽÍGh[U©çÌ¢©ÈéRÉîà 31 ; ¿©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 32 ; 33 ; {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨æ 34 ; ÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚIÉη 35 ; éK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEFAÌp 36 ; Éæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»ÌÓCð 37 ; íÈ¢D 38 ; 39 ; 40 41 ; 42 ; X^[gAbv[` 43 ; vZbTÍS2RAC~fBAfðÎÛÆ·é 44 ; 45 46 ; 47 ; O[oV{ 48 ; 49 ; ZOgæªAhX(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) 50 46 extrn _@R_INIT, _@R_INIS, _@RLINIT 51 47 extrn _@INIT, _@DATA, _@INIS, _@DATS, _@INITL, _@DATAL 52 48 53 ; ZOgöAhX(segment_e.asm)49 ; セグメント末尾アドレス(segment_e.asm) 54 50 extrn _?R_INIT, _?R_INIS, _?RLINIT 55 51 extrn _?INIT, _?DATA, _?INIS, _?DATS, _?INITL, _?DATAL 56 52 57 ; X^bN|C^Ìúl(kernel_cfg.c)53 ; スタックポインタの初期値(kernel_cfg.c) 58 54 extrn __kernel_istkpt 59 55 60 ; J[lJn(kernel/startup.c)56 ; カーネル開始処理(kernel/startup.c) 61 57 extrn _sta_ker 62 58 63 ; saddr ÌæÌæªAhXCTCYiJÅè`j59 ; saddr領域の先頭アドレス,サイズ(リンカで定義) 64 60 extrn _@SADBEG, _@SADSIZ 65 61 66 ; Gg|Cg62 ; エントリポイント 67 63 public _start 68 64 69 65 70 66 ; 71 ; èè`72 ; 73 ; MAA(PMC Ìrbg0): 0 ܽÍ174 ; 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へミラー 76 72 INIT_MAA EQU 0 77 73 78 74 ; 79 ; }Nè`80 ; 81 ; ZOgÔÌf[^Rs[(farÌROM©çnearÌRAMÖCsrcÌTCYª)75 ; マクロ定義 76 ; 77 ; セグメント間のデータコピー(farのROMからnearのRAMへ,srcのサイズ分) 82 78 copy_seg macro src, dst 83 79 local _1, _2 … … 97 93 endm 98 94 99 ; ZOgÔÌf[^Rs[(farÌROM©çfarÌRAMÖCsrcÌTCYª)95 ; セグメント間のデータコピー(farのROMからfarのRAMへ,srcのサイズ分) 100 96 copy_fseg MACRO src, dst 101 97 local _1, _2 … … 116 112 endm 117 113 118 ; ZOgÌf[^NA(near RAM)114 ; セグメントのデータクリア(near RAM) 119 115 clear_seg MACRO dst 120 116 local _1, _2 … … 131 127 endm 132 128 133 ; ZOgÌf[^NA(far RAM)129 ; セグメントのデータクリア(far RAM) 134 130 clear_fseg MACRO dst 135 131 local _1, _2 … … 147 143 148 144 ; 149 ; VXeJn145 ; システム開始 150 146 ; 151 147 @@CODE CSEG BASE … … 153 149 154 150 ; 155 ; PSW ÌÝè156 ; 157 di ; ÝÖ~(ÝbNÌÝÖ~)158 sel rb0 ; WX^oN(RB0)159 160 ; 161 ; ~[ÌæÌÝè151 ; PSWの設定 152 ; 153 di ; 割込み禁止(割込みロック相当の割込み禁止) 154 sel rb0 ; レジスタバンク(RB0) 155 156 ; 157 ; ミラー領域の設定 162 158 ; 163 159 mov a, #INIT_MAA … … 166 162 167 163 ; 168 ; X^bN|C^ÌÝè164 ; スタックポインタの設定 169 165 ; 170 166 movw de, #__kernel_istkpt … … 174 170 175 171 ; 176 ; _hardware_init_hook ÌÄÑoµ(ൠêÎ)172 ; _hardware_init_hook の呼び出し(もしあれば) 177 173 ; 178 174 ;call !!_hardware_init_hook 179 175 180 176 ; 181 ; ú»177 ; メモリ初期化 182 178 ; 183 179 copy_seg R_INIS, INIS … … 189 185 clear_fseg DATAL 190 186 191 ; saddr ÌæÌú»187 ; saddr領域の初期化 192 188 mov b,#_@SADSIZ 193 189 clrw ax … … 199 195 200 196 ; 201 ; _sofrware_init_hook ÌÄÑoµ(ൠêÎ)197 ; _sofrware_init_hook の呼び出し(もしあれば) 202 198 ; 203 199 ;call !!_software_init_hook 204 200 205 201 ; 206 ; sta_ker (kernel/startup.c) ÌÄÑoµ202 ; sta_ker (kernel/startup.c) の呼び出し 207 203 ; 208 204 br !!_sta_ker -
Property svn:mime-type
set to
Note:
See TracChangeset
for help on using the changeset viewer.