• R/O
  • HTTP
  • SSH
  • HTTPS

hos-v4a: コミット

HOS-V4 Advance の開発リポジトリ


コミットメタ情報

リビジョン3c4d7491790f57d9722e3b8ec2c8b5bf2f27e499 (tree)
日時2014-03-01 11:41:19
作者Ryuji Fuchikami <ryuz@user...>
コミッターRyuji Fuchikami

ログメッセージ

add cortex-a9 base

変更サマリ

差分

--- /dev/null
+++ b/kernel/build/arm/cortex_a9/gcc/Makefile
@@ -0,0 +1,150 @@
1+# ----------------------------------------------------------------------------
2+# Hyper Operating System V4 Advance
3+# makefile for Cortex-M3
4+#
5+# Copyright (C) 1998-2011 by Project HOS
6+# http://sourceforge.jp/projects/hos/
7+# ----------------------------------------------------------------------------
8+
9+
10+
11+# --------------------------------------
12+# %jp{各種設定}%en{setting}
13+# --------------------------------------
14+
15+# %jp{ターゲットライブラリ名}%en{target library name}
16+TARGET ?= libhosv4a
17+
18+
19+# %jp{ツール定義}%jp{tools}
20+GCC_ARCH ?= arm-none-eabi-
21+CMD_CC ?= $(GCC_ARCH)gcc
22+CMD_ASM ?= $(GCC_ARCH)gcc
23+CMD_LIBR ?= $(GCC_ARCH)ar
24+
25+
26+# %jp{アーキテクチャ定義}%en{architecture}
27+ARCH_NAME ?= cortex_a9
28+ARCH_PROC ?= arm/arm_v7a
29+ARCH_IRC ?= none
30+ARCH_CC ?= gcc
31+
32+
33+# %jp{ディレクトリ定義}%en{directories}
34+TOP_DIR = ../../../../..
35+KERNEL_DIR = $(TOP_DIR)/kernel
36+KERNEL_MAKINC_DIR = $(KERNEL_DIR)/build/common/gmake
37+INC_PROC_DIR = $(KERNEL_DIR)/include/arch/proc/$(ARCH_PROC)
38+INC_IRC_DIR = $(KERNEL_DIR)/include/arch/irc/$(ARCH_IRC)
39+SRC_PROC_DIR = $(KERNEL_DIR)/source/arch/proc/$(ARCH_PROC)
40+SRC_PROC_CC_DIR = $(KERNEL_DIR)/source/arch/proc/$(ARCH_PROC)/$(ARCH_CC)
41+SRC_IRC_DIR = $(KERNEL_DIR)/source/arch/irc/$(ARCH_IRC)
42+SRC_IRC_CC_DIR = $(KERNEL_DIR)/source/arch/irc/$(ARCH_IRC)/$(ARCH_CC)
43+CFGRTR_DIR = $(TOP_DIR)/cfgrtr/build/gcc
44+
45+
46+# %jp{コンフィギュレータ定義}%en{kernel configurator}
47+CFGRTR = h4acfg-$(ARCH_NAME)
48+
49+
50+# %jp{カーネル指定}%en{kernel flag}
51+KERNEL = Yes
52+
53+
54+# %jp{共通定義読込み}%en{common setting}
55+include $(KERNEL_MAKINC_DIR)/common.inc
56+
57+
58+# %jp{パス設定}%en{add source directories}
59+INC_DIRS += $(INC_PROC_DIR) $(INC_IRC_DIR)
60+SRC_DIRS += $(SRC_PROC_DIR) $(SRC_PROC_DIR) $(SRC_PROC_CC_DIR) $(SRC_IRC_DIR) $(SRC_IRC_CC_DIR)
61+
62+
63+# %jp{オプションフラグ}%en{option flags}
64+AFLAGS = -mcpu=cortex-a9 -mthumb
65+CFLAGS = -mcpu=cortex-a9 -mthumb
66+ARFLAGS =
67+
68+
69+# %jp{コンパイラ依存の設定読込み}%en{compiler dependent definitions}
70+include $(KERNEL_MAKINC_DIR)/$(ARCH_CC)_d.inc
71+
72+# %jp{ライブラリ生成用設定読込み}%en{definitions for library}
73+include $(KERNEL_MAKINC_DIR)/maklib_d.inc
74+
75+
76+
77+
78+# --------------------------------------
79+# %jp{ソースファイル}%en{source files}
80+# --------------------------------------
81+
82+# %jp{アセンブラファイルの追加}%en{assembry sources}
83+ASRCS += $(SRC_PROC_CC_DIR)/kdis_int.S
84+ASRCS += $(SRC_PROC_CC_DIR)/kena_int.S
85+ASRCS += $(SRC_PROC_CC_DIR)/kcre_ctx.S
86+ASRCS += $(SRC_PROC_CC_DIR)/krst_ctx.S
87+ASRCS += $(SRC_PROC_CC_DIR)/kswi_ctx.S
88+ASRCS += $(SRC_PROC_CC_DIR)/kwai_int.S
89+ASRCS += $(SRC_PROC_CC_DIR)/kirq_hdr.S
90+
91+# %jp{C言語ファイルの追加}%en{C sources}
92+CSRCS += $(SRC_PROC_DIR)/val_int.c
93+
94+# %jp{カーネル共通ソースの追加}%en{kernel common sources}
95+include $(KERNEL_MAKINC_DIR)/knlsrc.inc
96+
97+
98+
99+
100+# --------------------------------------
101+# %jp{ルール定義}%en{rules}
102+# --------------------------------------
103+
104+# %jp{ALL}%en{all}
105+.PHONY : all
106+all: makelib_all
107+ $(MAKE) -C $(CFGRTR_DIR) TARGET=$(CFGRTR) ARCH_PROC=$(ARCH_PROC) ARCH_IRC=$(ARCH_IRC)
108+
109+# %jp{クリーン}%en{clean}
110+.PHONY : clean
111+clean: makelib_clean
112+ $(MAKE) -C $(CFGRTR_DIR) TARGET=$(CFGRTR) ARCH_PROC=$(ARCH_PROC) ARCH_IRC=$(ARCH_IRC) clean
113+ $(RM) -f *.lst
114+
115+# %jp{依存関係更新}%en{make depend}
116+.PHONY : depend
117+depend: makelib_depend
118+
119+# %jp{ソース一括コピー}%en{source files copy}
120+.PHONY : srccpy
121+srccpy: makelib_srccpy
122+
123+
124+# %jp{ライブラリ生成用設定読込み}%en{rules for library}
125+include $(KERNEL_MAKINC_DIR)/maklib_r.inc
126+
127+# %jp{コンパイラ依存のルール定義読込み}%en{rules for compiler}
128+include $(KERNEL_MAKINC_DIR)/$(ARCH_CC)_r.inc
129+
130+
131+
132+
133+# --------------------------------------
134+# %jp{依存関係}%en{dependency}
135+# --------------------------------------
136+
137+# %jp{カーネル依存関係読込み}{dependency list of kernel sources}
138+include $(KERNEL_MAKINC_DIR)/knldep.inc
139+
140+
141+$(OBJS_DIR)/val_int.$(EXT_OBJ) : $(COMMON_HEADERS)
142+$(OBJS_DIR)/kini_irc.$(EXT_OBJ) : $(COMMON_HEADERS)
143+$(OBJS_DIR)/kexe_irc.$(EXT_OBJ) : $(COMMON_HEADERS)
144+$(OBJS_DIR)/ena_int.$(EXT_OBJ) : $(COMMON_HEADERS)
145+$(OBJS_DIR)/dis_int.$(EXT_OBJ) : $(COMMON_HEADERS)
146+$(OBJS_DIR)/vclr_int.$(EXT_OBJ) : $(COMMON_HEADERS)
147+
148+
149+
150+# end of file
--- /dev/null
+++ b/kernel/include/arch/proc/arm/arm_v7a/proc.h
@@ -0,0 +1,85 @@
1+/**
2+ * Hyper Operating System V4 Advance
3+ *
4+ * @file proc.h
5+ * @brief %jp{コンテキスト制御}%en{context control}
6+ *
7+ * Copyright (C) 1998-2014 by Project HOS
8+ * http://sourceforge.jp/projects/hos/
9+ */
10+
11+
12+#ifndef _KERNEL__arch__proc__arm__arm_v7a__proc_h__
13+#define _KERNEL__arch__proc__arm__arm_v7a__proc_h__
14+
15+
16+
17+#define _KERNEL_IMSK_F 0x40 /**< %jp{FIQ割込みマスクビット} */
18+#define _KERNEL_IMSK_I 0x80 /**< %jp{IRQ割込みマスクビット} */
19+
20+#define _KERNEL_IMSK_LV0 0xc0 /**< %jp{割込みマスクレベル0(すべてマスク)} */
21+#define _KERNEL_IMSK_LV1 0x80 /**< %jp{割込みマスクレベル1(FIQのみ許可)} */
22+#define _KERNEL_IMSK_LV2 0x00 /**< %jp{割込みマスクレベル2(すべて許可)} */
23+
24+
25+
26+/** %jp{コンテキスト制御ブロック} */
27+typedef struct _kernel_t_ctxcb
28+{
29+ VP sp;
30+} _KERNEL_T_CTXCB;
31+
32+/** %jp{割込みコンテキスト制御ブロック} */
33+typedef struct _kernel_t_ictxcb
34+{
35+ UB imsk;
36+ UB intcnt;
37+ VP isp;
38+} _KERNEL_T_ICTXCB;
39+
40+
41+extern _KERNEL_T_ICTXCB _kernel_ictxcb; /**< %jp{割込みコンテキスト制御ブロック} */
42+
43+
44+
45+#ifdef __cplusplus
46+extern "C" {
47+#endif
48+
49+void _kernel_ena_int(void); /**< %jp{割込み許可} */
50+void _kernel_dis_int(void); /**< %jp{割込み禁止} */
51+void _kernel_wai_int(void); /**< %jp{割込み待ち(アイドル時の処理)} */
52+
53+void _kernel_cre_ctx(_KERNEL_T_CTXCB *pk_ctxcb, VP isp, FP entry, VP_INT par1, VP_INT par2); /**< %jp{実行コンテキストの作成} */
54+void _kernel_rst_ctx(VP_INT par1, VP_INT par2, FP entry, VP isp); /**< %jp{実行コンテキストのリスタート} */
55+void _kernel_sta_ctx(_KERNEL_T_CTXCB *pk_ctxcb); /**< %jp{実行コンテキストの開始} */
56+void _kernel_swi_ctx(_KERNEL_T_CTXCB *pk_ctxinf_nxt, _KERNEL_T_CTXCB *pk_ctxcb_now); /**< %jp{実行コンテキストの切替} */
57+
58+#ifdef __cplusplus
59+}
60+#endif
61+
62+
63+
64+#define _KERNEL_INI_PRC() do {} while (0) /**< %jp{プロセッサ固有の初期化} */
65+
66+#define _KERNEL_INI_INT(stksz, stk) do { _kernel_ictxcb.isp = (VB *)(stk) + (stksz); } while (0) /**< %jp{割込み初期化} */
67+#define _KERNEL_ENA_INT() _kernel_ena_int() /**< %jp{割込み許可} */
68+#define _KERNEL_DIS_INT() _kernel_dis_int() /**< %jp{割込み禁止} */
69+#define _KERNEL_WAI_INT() _kernel_wai_int() /**< %jp{割込み待ち(アイドル時の処理)} */
70+
71+#define _KERNEL_CRE_CTX(pk_ctxcb, stksz, stk, isp, entry, exinf1, exinf2) \
72+ _kernel_cre_ctx((pk_ctxcb), (isp), (entry), (exinf1), (exinf2)) /**< %jp{実行コンテキストの作成} */
73+#define _KERNEL_DEL_CTX(pk_ctxcb) do {} while (0) /**< %jp{実行コンテキストの削除} */
74+#define _KERNEL_RST_CTX(pk_ctxcb, stksz, stk, isp, entry, exinf1, exinf2) \
75+ _kernel_rst_ctx((exinf1), (exinf2), (entry), (isp)) /**< %jp{実行コンテキストのリスタート} */
76+#define _KERNEL_STA_CTX(pk_ctxcb) _kernel_sta_ctx(pk_ctxcb)
77+#define _KERNEL_SWI_CTX(pk_ctxcb_now, pk_ctxinf_nxt) \
78+ _kernel_swi_ctx((pk_ctxinf_nxt), (pk_ctxcb_now)) /**< %jp{実行コンテキストの切替} */
79+
80+
81+#endif /* _KERNEL__arch__proc__arm__arm_v7a__proc_h__ */
82+
83+
84+
85+/* end of file */
--- /dev/null
+++ b/kernel/include/arch/proc/arm/arm_v7a/procatr.h
@@ -0,0 +1,72 @@
1+/**
2+ * Hyper Operating System V4 Advance
3+ *
4+ * @file ctxctl.h
5+ * @brief %jp{コンテキスト制御}%en{context control}
6+ *
7+ * Copyright (C) 1998-2014 by Project HOS
8+ * http://sourceforge.jp/projects/hos/
9+ */
10+
11+
12+#ifndef _KERNEL__arch__proc__arm__arm_v7a__procatr_h__
13+#define _KERNEL__arch__proc__arm__arm_v7a__procatr_h__
14+
15+
16+
17+/* %jp{プロセッサアーキテクチャ定義のあるインクルードパス} */
18+#define _KERNEL_PROCATR_INC_PATH "arm/arm_v7a"
19+
20+
21+/* %jp{プロセッサアーキテクチャに依存した属性} */
22+#define _KERNEL_PROCATR_CTX_STK FALSE /**< %jp{コンテキスト生成にスタック領域の指定が必要か?} */
23+#define _KERNEL_PROCATR_CTX_STKSZ FALSE /**< %jp{コンテキスト生成にスタックサイズの指定が必要か?} */
24+#define _KERNEL_PROCATR_CTX_ISP TRUE /**< %jp{コンテキスト生成に初期スタックポインタ値が必要か?} */
25+#define _KERNEL_PROCATR_CTX_DEL FALSE /**< %jp{別コンテキストからのコンテキスト削除が必要か?} */
26+#define _KERNEL_PROCATR_CTX_RST TRUE /**< %jp{自コンテキストのリスタートが可能か?} */
27+
28+#define _KERNEL_PROCATR_TMIN_STKSZ (4*16) /**< %jp{最低限必要なスタックサイズ(byte単位)} */
29+#define _KERNEL_PROCATR_DEF_SYSSTKSZ 64
30+#define _KERNEL_PROCATR_DEF_INTSTKSZ 256
31+
32+#define _KERNEL_PROCATR_SPT_SMP FALSE /**< %jp{SMPに対応しているか?} */
33+#define _KERNEL_PROCATR_SPT_MULTINT TRUE /**< %jp{多重割込みに対応しているか?} */
34+
35+#define _KERNEL_PROCATR_TMIN_INHNO 0 /**< %jp{割込みハンドラ番号の最小値} */
36+#define _KERNEL_PROCATR_TMAX_INHNO 1 /**< %jp{割込みハンドラ番号の最大値} */
37+
38+#define _KERNEL_PROCATR_TMIN_EXCNO 0 /**< %jp{CPU例外ハンドラ番号の最小値} */
39+#define _KERNEL_PROCATR_TMAX_EXCNO 4 /**< %jp{CPU例外ハンドラ番号の最大値} */
40+
41+#define _KERNEL_PROCATR_SYSSTK_NUM 2 /**< %jp{システムスタックは何本必要か?} */
42+
43+#define _KERNEL_PROCATR_SIGNED_INT 0 /**< %jp{符号付整数と符号無し整数のどちらが得意か?(符号付き:1, 符号無し:-1, 同じ:0)} */
44+#define _KERNEL_PROCATR_TBIT_INT 32 /**< %jp{プロセッサに最適な整数型のビット数} */
45+#define _KERNEL_PROCATR_TBIT_PTR 32 /**< %jp{ポインタのビット数} */
46+#define _KERNEL_PROCATR_MEM_ALIGN 32 /**< %jp{適切なメモリのアライメント(byte単位)} */
47+#define _KERNEL_PROCATR_STK_ALIGN 8 /**< %jp{適切なスタックのアライメント(byte単位)} */
48+#define _KERNEL_PROCATR_ALLOW_UNALIGN FALSE /**< %jp{アンアラインアクセスは可能か?} */
49+
50+#define _KERNEL_PROCATR_SYS_CTX FALSE /**< %jp{コンテキスト状態管理をプロセッサで実施するか?} */
51+#define _KERNEL_PROCATR_SYS_LOC FALSE /**< %jp{CPUロック状態管理をプロセッサで実施するか?} */
52+#define _KERNEL_PROCATR_SYS_DSP FALSE /**< %jp{ディスパッチ禁止状態管理をプロセッサで実施するか?} */
53+#define _KERNEL_PROCATR_SYS_SYS FALSE /**< %jp{システム状態管理をプロセッサで実施するか?} */
54+#define _KERNEL_PROCATR_SYS_DLY FALSE /**< %jp{遅延ディスパッチ保留状態管理をプロセッサで実施するか?} */
55+
56+
57+/* %jp{ARM固有の定数} */
58+#define _KERNEL_ARM_INHNO_IRQ 0 /**< %jp{IRQ割込みの割込みハンドラ番号} */
59+#define _KERNEL_ARM_INHNO_FIQ 1 /**< %jp{FIQ割込みの割込みハンドラ番号} */
60+
61+#define _KERNEL_ARM_EXCNO_RST 0 /**< %jp{リセットのCPU例外ハンドラ番号} */
62+#define _KERNEL_ARM_EXCNO_UND 1 /**< %jp{無効命令例外のCPU例外ハンドラ番号} */
63+#define _KERNEL_ARM_EXCNO_SWI 2 /**< %jp{ソフトウェア割込みのCPU例外ハンドラ番号} */
64+#define _KERNEL_ARM_EXCNO_PRE 3 /**< %jp{プリフェッチアボートのCPU例外ハンドラ番号} */
65+#define _KERNEL_ARM_EXCNO_ABT 4 /**< %jp{データアボートのCPU例外ハンドラ番号} */
66+
67+
68+
69+#endif /* _KERNEL__arch__proc__arm__arm_v7a__procatr_h__ */
70+
71+
72+/* end of file */
--- /dev/null
+++ b/kernel/source/arch/proc/arm/arm_v7a/gcc/arm_v7a.inc
@@ -0,0 +1,36 @@
1+/**
2+ * Hyper Operating System V4 Advance
3+ *
4+ * Copyright (C) 1998-2006 by Project HOS
5+ * http://sourceforge.jp/projects/hos/
6+ */
7+
8+
9+/* %jp{割込みハンドラ番号}%en{interruput handler number} */
10+#define INHNO_IRQ 0
11+#define INHNO_FIQ 1
12+
13+
14+/* %jp{_KERNEL_T_ICTXCB構造体オフセット} */
15+#define ICTXCB_IMSK 0
16+#define ICTXCB_INTCNT 1
17+#define ICTXCB_ISP 4
18+
19+
20+/* %jp{プロセッサモード定義} */
21+#define Mode_USR 0x10 /* USR モード */
22+#define Mode_FIQ 0x11 /* FIQ モード */
23+#define Mode_IRQ 0x12 /* IRQ モード */
24+#define Mode_SVC 0x13 /* SVC モード */
25+#define Mode_ABT 0x17 /* ABT モード */
26+#define Mode_UND 0x1b /* UND モード */
27+#define Mode_SYS 0x1f /* SYS モード */
28+#define Mode_MASK 0x1f /* モードビットマスク */
29+
30+/* %jp{フラグ定義} */
31+#define T_Bit 0x20 /* T ビット */
32+#define F_Bit 0x40 /* F ビット */
33+#define I_Bit 0x80 /* I ビット */
34+
35+
36+/* end of file */
--- /dev/null
+++ b/kernel/source/arch/proc/arm/arm_v7a/gcc/kcre_ctx.S
@@ -0,0 +1,49 @@
1+/**
2+ * Hyper Operating System V4 Advance
3+ *
4+ * Copyright (C) 1998-2014 by Project HOS
5+ * http://sourceforge.jp/projects/hos/
6+ */
7+
8+
9+#include "arm_v7a.inc"
10+
11+
12+ .code 16
13+ .text
14+ .align 2
15+
16+/************************************************
17+ 実行コンテキストの作成
18+ void _kernel_cre_ctx(
19+ _KERNEL_T_CTXCB *pk_ctxcb, r0 :作成するコンテキスト
20+ VP isp, r1 :スタックポインタ
21+ FP entry, r2 :実行アドレス
22+ VP_INT par1, r3 :実行時パラメータ
23+ VP_INT par2) sp[0]:実行時パラメータ
24+ ************************************************/
25+ .global _kernel_cre_ctx
26+_kernel_cre_ctx:
27+ sub r1, #36 /* スタックを確保 */
28+ str r2, [r1, #0] /* r4 部分にentryを設定 */
29+ str r3, [r1, #4] /* r5 部分にpar1を設定 */
30+ ldr r2, [sp, #0] /* par2を取り出し */
31+ str r2, [r1, #8] /* r6 部分にpar2を設定 */
32+ adr r2, ctx_entry /* エントリーアドレス設定 */
33+ add r2, #1 /* Thumbモードアドレスとして設定 */
34+ str r2, [r1, #32] /* lr 部分にエントリーアドレスを設定 */
35+ str r1, [r0] /* ctxcb に新 sp を保存 */
36+ bx lr /* リターン */
37+
38+/************************************************
39+ 実行コンテキストエントリーアドレス
40+ ************************************************/
41+ctx_entry:
42+ mov r0, r5 /* par1を設定 */
43+ mov r1, r6 /* par2を設定 */
44+ bx r4 /* entry を実行 */
45+
46+ .end
47+
48+
49+/* end of file */
--- /dev/null
+++ b/kernel/source/arch/proc/arm/arm_v7a/gcc/kdis_int.S
@@ -0,0 +1,28 @@
1+/**
2+ * Hyper Operating System V4 Advance
3+ *
4+ * Copyright (C) 1998-2014 by Project HOS
5+ * http://sourceforge.jp/projects/hos/
6+ */
7+
8+
9+#include "arm_v7a.inc"
10+
11+
12+ .text
13+ .align 2
14+
15+/************************************************
16+ 割り込み禁止
17+ void _kernel_dis_int(void)
18+ ************************************************/
19+ .global _kernel_dis_int
20+_kernel_dis_int:
21+ cpsid fi /* 割り込み禁止 */
22+ bx lr /* リターン */
23+
24+
25+ .end
26+
27+
28+/* end of file */
--- /dev/null
+++ b/kernel/source/arch/proc/arm/arm_v7a/gcc/kena_int.S
@@ -0,0 +1,34 @@
1+/**
2+ * Hyper Operating System V4 Advance
3+ *
4+ * Copyright (C) 1998-2014 by Project HOS
5+ * http://sourceforge.jp/projects/hos/
6+ */
7+
8+
9+#include "arm_v7a.inc"
10+
11+ .code 32
12+ .text
13+ .align 2
14+
15+/************************************************
16+ 割り込み許可
17+ void _kernel_ena_int(void)
18+ ************************************************/
19+ .global _kernel_ena_int
20+ .global _kernel_ictxcb
21+_kernel_ena_int:
22+ ldr r1, =_kernel_ictxcb
23+ mrs r0, cpsr /* cpsr取得 */
24+ ldrb r1, [r1, #ICTXCB_IMSK] /* 割込みマスク値取得 */
25+ bic r0, r0, #(F_Bit | I_Bit) /* FビットとIビットをクリア */
26+ orr r0, r0, r1 /* 割込みマスク設定 */
27+ msr cpsr_c, r0 /* cpsr設定 */
28+ bx lr /* リターン */
29+
30+
31+ .end
32+
33+
34+/* end of file */
--- /dev/null
+++ b/kernel/source/arch/proc/arm/arm_v7a/gcc/kirq_hdr.S
@@ -0,0 +1,116 @@
1+/**
2+ * Hyper Operating System V4 Advance
3+ *
4+ * Copyright (C) 1998-2014 by Project HOS
5+ * http://sourceforge.jp/projects/hos/
6+ */
7+
8+
9+#include "arm_v7a.inc"
10+
11+
12+ .code 32
13+ .text
14+ .align 2
15+
16+ .global _kernel_ictxcb
17+ .global _kernel_sta_inh
18+ .global _kernel_end_inh
19+ .global _kernel_exe_inh
20+
21+/************************************************
22+ IRQ handler
23+ ************************************************/
24+ .global _kernel_irq_hdr
25+_kernel_irq_hdr:
26+ /* ---- レジスタ退避 */
27+ sub lr, lr, #4 /* リターンアドレス算出 */
28+ /* srsfd #Mode_SYS! */ /* lr_irq, spsr_irqをSYSモードスタックに退避 */
29+ .long 0xf96d051f
30+ cps #Mode_SYS /* SYSモードに移行 */
31+ stmfd sp!, {r0-r3, r12, lr} /* 汎用レジスタ退避 */
32+ mrs r2, cpsr /* cpsrをr2に退避 */
33+ cpsid fi /* 割り込み禁止 */
34+
35+ /* ---- 割込みマスク設定 */
36+ ldr r0, =_kernel_ictxcb
37+ ldr r3, [r0, #ICTXCB_IMSK] /* 古いimsk値を取り出し */
38+ and r2, r2, #(F_Bit | I_Bit)
39+ strb r2, [r0, #ICTXCB_IMSK] /* cpsr値をimsk値に設定 */
40+
41+ /* ---- 多重割込み判定 */
42+ ldrb r1, [r0, #ICTXCB_INTCNT] /* 割り込みネストカウンタ値取得 */
43+ add r1, r1, #1 /* 割り込みネストカウンタインクリメント */
44+ strb r1, [r0, #ICTXCB_INTCNT] /* 割り込みネストカウンタ設定 */
45+ cmp r1, #1
46+ bne multiple_int /* 多重割り込みなら分岐 */
47+
48+ /* ---- SPを割込みコンテキストのものに切替え */
49+ mov r1, sp /* タスクのSPを保存 */
50+ ldr sp, [r0, #ICTXCB_ISP] /* 割り込み用スタックに切り替え */
51+ stmfd sp!, {r1, r3} /* タスクのSPと旧imask保存 */
52+
53+ /* ---- 割込み開始処理 */
54+ bl _kernel_sta_inh /* 割り込み開始 */
55+
56+ /* ---- 割込みハンドラ実行 */
57+ mov r0, #INHNO_IRQ
58+ bl _kernel_exe_inh
59+
60+ /* ---- 割込み処理の終了設定 */
61+ ldmfd sp!, {r1, r3} /* 汎用レジスタ復帰 */
62+ mov sp, r1 /* SPを元のコンテキストのものに戻す */
63+ ldr r0, =_kernel_ictxcb /* 割り込みネストカウンタのアドレス取得 */
64+ mov r1, #0 /* 割り込みネストカウンタを0に戻す */
65+ strb r1, [r0, #ICTXCB_INTCNT] /* 割り込みネストカウンタ値設定 */
66+
67+ /* ---- 割込みマスク値復帰処理 */
68+ ldr r1, [sp, #28] /* spsr_irq 値取り出し */
69+ and r1, r1, #(F_Bit | I_Bit)
70+ cmp r1, r3 /* 旧imsk値と比較 */
71+ bne return_int /* 不一致なら終了処理スキップ */
72+ strb r3, [r0, #ICTXCB_IMSK] /* マスク値復帰 */
73+
74+ /* ---- 割込み終了処理 */
75+ bl _kernel_end_inh /* 割り込み終了処理 */
76+
77+ ldr r0, =_kernel_ictxcb
78+ ldr r1, [sp, #28] /* spsr_irq 値取り出し */
79+ ldrb r0, [r0, #ICTXCB_IMSK] /* この時点でのimsk値取り出し */
80+ bic r1, r1, #(F_Bit | I_Bit)
81+ and r0, r0, #(F_Bit | I_Bit)
82+ orr r1, r1, r0
83+ str r1, [sp, #28] /* spsr_irq にimsk値反映 */
84+
85+return_int:
86+ /* ---- 復帰処理 */
87+ ldmfd sp!, {r0-r3, r12, lr} /* 汎用レジスタ復帰 */
88+ rfefd sp! /* リターン */
89+
90+
91+ /* ---- 多重割り込み処理 */
92+multiple_int:
93+ /* ---- スタックを8バイトアライメントに移動 */
94+ mov r1, sp /* 割り込み発生時のSYSモードのSPに8の倍数の保証されないので */
95+ bic sp, sp, #0x7
96+ stmfd sp!, {r0, r1} /* タスクのSPを割り込み用スタックに保存(8の倍数になるようにr1も) */
97+
98+ /* ---- 割り込みハンドラ実行 */
99+ mov r0, #INHNO_IRQ
100+ bl _kernel_exe_inh
101+
102+ /* ---- スタックアライメント復帰 */
103+ ldmfd sp!, {r0, r1} /* 汎用レジスタ復帰 */
104+ mov sp, r1
105+
106+ /* ---- 割り込みカウンタ復帰 */
107+ ldrb r1, [r0, #ICTXCB_INTCNT]
108+ add r1, r1, #1
109+ strb r1, [r0, #ICTXCB_INTCNT]
110+ b return_int /* 復帰処理 */
111+
112+
113+ .end
114+
115+
116+/* end of file */
--- /dev/null
+++ b/kernel/source/arch/proc/arm/arm_v7a/gcc/krst_ctx.S
@@ -0,0 +1,31 @@
1+/**
2+ * Hyper Operating System V4 Advance
3+ *
4+ * Copyright (C) 1998-2014 by Project HOS
5+ * http://sourceforge.jp/projects/hos/
6+ */
7+
8+
9+#include "arm_v7a.inc"
10+
11+
12+ .text
13+ .align 2
14+
15+/************************************************
16+ 実行コンテキストのリスタート
17+ void _kernel_rst_ctx(
18+ VP_INT par1, r0 : 実行時パラメータ
19+ VP_INT par2, r1 : 実行時パラメータ
20+ FP entry, r2 : 実行アドレス
21+ VP isp) r3 : スタックポインタ
22+ ************************************************/
23+ .global _kernel_rst_ctx
24+_kernel_rst_ctx:
25+ mov sp, r3 /* スタックを初期値にリセット */
26+ bx r2 /* エントリーアドレスから再開始 */
27+
28+ .end
29+
30+
31+/* end of file */
--- /dev/null
+++ b/kernel/source/arch/proc/arm/arm_v7a/gcc/kswi_ctx.S
@@ -0,0 +1,42 @@
1+/**
2+ * Hyper Operating System V4 Advance
3+ *
4+ * Copyright (C) 1998-2014 by Project HOS
5+ * http://sourceforge.jp/projects/hos/
6+ */
7+
8+
9+#include "arm_v7a.inc"
10+
11+
12+ .text
13+ .align 2
14+
15+/************************************************
16+ 実行コンテキストの切替
17+ void _kernel_swi_ctx(
18+ _KERNEL_T_CTXCB *pk_ctxinf_nxt, r0 : 現在のコンテキストの保存先
19+ _KERNEL_T_CTXCB *pk_ctxinf_now) r1 : 切り替えるコンテキスト
20+ ************************************************/
21+ .global _kernel_swi_ctx
22+_kernel_swi_ctx:
23+ stmfd sp!, {r4-r11, lr} /* レジスタ保存 */
24+ str sp, [r1] /* スタックポインタ保存 */
25+ /* --- そのまま _kernel_sta_ctx に続ける */
26+
27+
28+/************************************************
29+ 実行コンテキストの開始
30+ void _kernel_sta_ctx(
31+ _KERNEL_T_CTXCB *pk_ctxcb) r0: 実行を開始するコンテキスト
32+ ************************************************/
33+ .global _kernel_sta_ctx
34+_kernel_sta_ctx:
35+ ldr sp, [r0] /* スタックポインタ復帰 */
36+ ldmfd sp!, {r4-r11, pc} /* レジスタ復帰 */
37+
38+ .end
39+
40+
41+; end of file
42+
--- /dev/null
+++ b/kernel/source/arch/proc/arm/arm_v7a/gcc/kwai_int.S
@@ -0,0 +1,27 @@
1+/**
2+ * Hyper Operating System V4 Advance
3+ *
4+ * Copyright (C) 1998-2014 by Project HOS
5+ * http://sourceforge.jp/projects/hos/
6+ */
7+
8+
9+#include "arm_v7a.inc"
10+
11+ .text
12+ .align 2
13+
14+/************************************************
15+ 割り込み待ち(CPUのアイドル処理)
16+ void _kernel_wai_int(void);
17+ ************************************************/
18+ .global _kernel_wai_int
19+_kernel_wai_int:
20+ /* mcr p15, 0, r0, c7, c0, 4 */ /* WaitForInterrupt */
21+ b _kernel_wai_int
22+
23+
24+ .end
25+
26+
27+/* end of file */
--- /dev/null
+++ b/kernel/source/arch/proc/arm/arm_v7a/val_int.c
@@ -0,0 +1,18 @@
1+/**
2+ * Hyper Operating System V4 Advance
3+ *
4+ * @file val_int.c
5+ * @brief %jp{割込み用変数定義}
6+ *
7+ * Copyright (C) 1998-2006 by Project HOS
8+ * http://sourceforge.jp/projects/hos/
9+ */
10+
11+#include "core/core.h"
12+
13+
14+_KERNEL_T_ICTXCB _kernel_ictxcb; /**< %jp{割込みコンテキスト制御ブロック} */
15+
16+
17+/* end of file */
18+
旧リポジトリブラウザで表示