Changeset 95 for ssp_qb_r5f100le_cs/trunk/arch/arm_m_gcc
- Timestamp:
- Jun 2, 2015, 3:39:53 PM (9 years ago)
- Location:
- ssp_qb_r5f100le_cs/trunk/arch/arm_m_gcc
- Files:
-
- 24 edited
Legend:
- Unmodified
- Added
- Removed
-
ssp_qb_r5f100le_cs/trunk/arch/arm_m_gcc/MANIFEST
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
-
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
Note:
See TracChangeset
for help on using the changeset viewer.