ASRCS += $(SRC_PROC_CC_DIR)/krst_ctx.S
ASRCS += $(SRC_PROC_CC_DIR)/kswi_ctx.S
ASRCS += $(SRC_PROC_CC_DIR)/kwai_int.S
-#ASRCS += $(SRC_PROC_CC_DIR)/kint_hdr.S
+ASRCS += $(SRC_PROC_CC_DIR)/kint_hdr.S
+ASRCS += $(SRC_PROC_CC_DIR)/kexc_hdr.S
# %jp{C言語ファイルの追加}%en{C sources}
-#CSRCS += $(SRC_PROC_DIR)/val_int.c
+CSRCS += $(SRC_PROC_DIR)/val_int.c
# %jp{カーネル共通ソースの追加}%en{kernel common sources}
/** %jp{割込みコンテキスト制御ブロック} */
typedef struct _kernel_t_ictxcb
{
- H imsk;
- B intcnt;
VP isp;
} _KERNEL_T_ICTXCB;
* @file procatr.h
* @brief %jp{プロセッサアーキテクチャ固有属性定義(XILINX MicroBlaze)}
*
- * Copyright (C) 1998-2006 by Project HOS
+ * Copyright (C) 1998-2011 by Project HOS
* http://sourceforge.jp/projects/hos/
*/
#define _KERNEL_PROCATR_TMIN_STKSZ (4*32) /**< %jp{最低限必要なスタックサイズ(byte単位)} */
#define _KERNEL_PROCATR_SPT_SMP FALSE /**< %jp{SMPに対応しているか?} */
-#define _KERNEL_PROCATR_SPT_MULTINT TRUE /**< %jp{多重割込みに対応しているか?} */
+#define _KERNEL_PROCATR_SPT_MULTINT FALSE /**< %jp{多重割込みに対応しているか?} */
#define _KERNEL_PROCATR_TMIN_INHNO 0 /**< %jp{割込みハンドラ番号の最小値} */
#define _KERNEL_PROCATR_TMAX_INHNO 255 /**< %jp{割込みハンドラ番号の最大値} */
#else /* %jp{バズロック型の場合} */
#define _KERNEL_ENTER_SVC() do { _KERNEL_DIS_INT(); } while (0)
+#if _KERNEL_PROCATR_SPT_MULTINT
#define _KERNEL_LEAVE_SVC() do { if (!(_KERNEL_SYS_GET_STST() & (_KERNEL_TSS_LOC | _KERNEL_TSS_SYS))){ _KERNEL_ENA_INT(); } } while (0)
+#else
+#define _KERNEL_LEAVE_SVC() do { if (!(_KERNEL_SYS_GET_STST() & (_KERNEL_TSS_LOC | _KERNEL_TSS_SYS | _KERNEL_TSS_CTX))){ _KERNEL_ENA_INT(); } } while (0)
+#endif
#endif
--- /dev/null
+/* ------------------------------------------------------------------------ */
+/* Hyper Operating System V4 Advance */
+/* */
+/* Copyright (C) 1998-2011 by Project HOS */
+/* http://sourceforge.jp/projects/hos/ */
+/* ------------------------------------------------------------------------ */
+
+
+ .global _kernel_exc_hdr
+ .global _kernel_exe_exc
+
+
+ .text
+
+
+/************************************************
+ CPU例外ハンドラ
+************************************************/
+ .align 2
+_kernel_exc_hdr:
+ /* ---- レジスタ保存 */
+ addik r1, r1, -44
+ swi r15, r1, 0
+ swi r3, r1, 4
+ swi r4, r1, 8
+ swi r5, r1, 12
+ swi r6, r1, 16
+ swi r7, r1, 20
+ swi r8, r1, 24
+ swi r9, r1, 28
+ swi r10, r1, 32
+ swi r11, r1, 36
+ swi r12, r1, 40
+
+
+ /* ---- 例外処理実行処理呼び出し */
+ brlid r15, _kernel_exe_exc
+ addik r3, r0, 0
+
+ /* ---- レジスタ復帰 */
+ lwi r15, r1, 0
+ lwi r3, r1, 4
+ lwi r4, r1, 8
+ lwi r5, r1, 12
+ lwi r6, r1, 16
+ lwi r7, r1, 20
+ lwi r8, r1, 24
+ lwi r9, r1, 28
+ lwi r10, r1, 32
+ lwi r11, r1, 36
+ lwi r12, r1, 40
+ rted r17, 0
+ addik r1, r1, 44
+
+
+
+/* end of file */
--- /dev/null
+/* ------------------------------------------------------------------------ */
+/* Hyper Operating System V4 Advance */
+/* */
+/* Copyright (C) 1998-2011 by Project HOS */
+/* http://sourceforge.jp/projects/hos/ */
+/* ------------------------------------------------------------------------ */
+
+ .global _kernel_int_hdr
+ .global _kernel_ictxcb
+ .global _kernel_sta_inh
+ .global _kernel_exe_inh
+ .global _kernel_end_inh
+
+
+ .text
+
+
+#define ICTXCB_ISP 0
+#define ICTXCB_INTCNT 4
+#define ICTXCB_IMSK 6
+
+
+/************************************************
+ 割込みハンドラ
+ ************************************************/
+ .align 2
+_kernel_int_hdr:
+ /* ---- レジスタ保存 */
+ addik r1, r1, -44
+ swi r15, r1, 0
+ swi r3, r1, 4
+ swi r4, r1, 8
+ swi r5, r1, 12
+ swi r6, r1, 16
+ swi r7, r1, 20
+ swi r8, r1, 24
+ swi r9, r1, 28
+ swi r10, r1, 32
+ swi r11, r1, 36
+ swi r12, r1, 40
+
+ /* ---- スタック入れ替え */
+ addik r3, r1, 0
+ addik r4, r0, _kernel_ictxcb
+ lwi r1, r4, ICTXCB_ISP
+
+ /* ---- 割り込み開始処理呼び出し */
+ addik r1, r1, -4
+ brlid r15, _kernel_sta_inh
+ swi r3, r1, 0 /* 旧スタックポインタ保存 */
+
+ /* ---- 割り込み実行処理呼び出し */
+ brlid r15, _kernel_exe_inh
+ addik r3, r0, 0
+
+
+ /* ---- 割込み終了処理呼び出し */
+ brlid r15, _kernel_end_inh
+ lwi r1, r1, 0 /* スタックの復帰 */
+
+ /* ---- レジスタ復帰 */
+ lwi r15, r1, 0
+ lwi r3, r1, 4
+ lwi r4, r1, 8
+ lwi r5, r1, 12
+ lwi r6, r1, 16
+ lwi r7, r1, 20
+ lwi r8, r1, 24
+ lwi r9, r1, 28
+ lwi r10, r1, 32
+ lwi r11, r1, 36
+ lwi r12, r1, 40
+ rtid r14, 0
+ addik r1, r1, 44
+
+
+/* end of file */
addik r15, r7, 0 /* スタックポインタリセット(遅延スロット) */
- .end
-
/* end of file */
lwi r28, r1, 40
lwi r29, r1, 44
lwi r30, r1, 48
- rtsd r15, 8
lwi r31, r1, 52
+ rtsd r15, 8
+ addik r1, r1, 56
--- /dev/null
+/**
+ * Hyper Operating System V4 Advance
+ *
+ * @file val_int.c
+ * @brief %jp{割込み用変数定義}
+ *
+ * Copyright (C) 1998-2011 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+#include "core/core.h"
+
+
+_KERNEL_T_ICTXCB _kernel_ictxcb; /**< %jp{割込みコンテキスト制御ブロック} */
+
+
+/* end of file */
+