• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
Keine Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

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


Commit MetaInfo

Revisionce36ecd22fd80f0a9e6590613dd63429b57fdd6c (tree)
Zeit2008-05-24 18:17:53
Autorryuz <ryuz>
Commiterryuz

Log Message

(none)

Ändern Zusammenfassung

Diff

--- /dev/null
+++ b/test/twai_sem/lpc2000/armcc/gmake.mak
@@ -0,0 +1,116 @@
1+# ----------------------------------------------------------------------------
2+# Hyper Operating System V4 Advance
3+#
4+# Copyright (C) 1998-2007 by Project HOS
5+# http://sourceforge.jp/projects/hos/
6+# ----------------------------------------------------------------------------
7+
8+
9+# %jp{ターゲット名}
10+TARGET ?= sample
11+
12+# %jp{ディレクトリ定義}
13+OS_DIR = ../../../..
14+KERNEL_DIR = $(OS_DIR)/kernel
15+KERNEL_CFGRTR_DIR = $(OS_DIR)/cfgrtr/build/gcc
16+KERNEL_MAKINC_DIR = $(KERNEL_DIR)/build/common/gmake
17+KERNEL_BUILD_DIR = $(KERNEL_DIR)/build/arm/lpc2000/armcc
18+OBJS_DIR = objs_$(TARGET)
19+
20+# %jp{共通定義読込み}
21+include $(KERNEL_MAKINC_DIR)/common.inc
22+
23+
24+# デバッグ版のターゲット名変更
25+ifeq ($(DEBUG),Yes)
26+TARGET := $(TARGET)dbg
27+endif
28+
29+# %jp{メモリマップ}
30+ifeq ($(MEMMAP),ext)
31+# %jp{外部メモリ}
32+TARGET := $(TARGET)ext
33+SECTION_ROM ?= 0x80000000
34+SECTION_RAM ?= 0x80010000
35+else
36+ifeq ($(MEMMAP),ram)
37+# %jp{内蔵RAM}
38+SECTION_ROM ?= 0x00000000
39+SECTION_RAM ?= 0x80010000
40+else
41+# %jp{内蔵ROM}
42+SECTION_ROM ?= 0x00000000
43+SECTION_RAM ?= 0x80010000
44+endif
45+endif
46+
47+
48+# %jp{フラグ設定}
49+CFLAGS = --cpu=ARM7TDMI-S --apcs=inter --thumb
50+AFLAGS = --cpu=ARM7TDMI-S --apcs=inter --thumb
51+LNFLAGS = --ro_base=$(SECTION_ROM) --rw_base=$(SECTION_RAM) --first=vectors.o --entry=$(SECTION_ROM)
52+
53+
54+# %jp{コンフィギュレータ定義}
55+KERNEL_CFGRTR = $(KERNEL_CFGRTR_DIR)/h4acfg-lpc2000
56+
57+
58+# 出力ファイル名
59+TARGET_EXE = $(TARGET).axf
60+TARGET_MOT = $(TARGET).mot
61+TARGET_HEX = $(TARGET).hex
62+
63+
64+# %jp{armcc用の設定読込み}
65+include $(KERNEL_MAKINC_DIR)/armcc_d.inc
66+
67+# ソースディレクトリ
68+SRC_DIRS += . ..
69+
70+# アセンブラファイルの追加
71+ASRCS += ./vectors.s \
72+ ./startup.s \
73+ ./uish.s
74+
75+
76+# %jp{C言語ファイルの追加}
77+CSRCS += ../kernel_cfg.c \
78+ ../main.c \
79+ ../sample.c \
80+ ../ostimer.c \
81+ ../uart.c
82+
83+
84+
85+# --------------------------------------
86+# %jp{ルール}
87+# --------------------------------------
88+
89+.PHONY : all
90+all: kernel_make makeexe_all $(TARGET_EXE) $(TARGET_MOT) $(TARGET_HEX)
91+
92+clean: makeexe_clean
93+ rm -f $(TARGET_EXE) $(TARGET_EXE) $(OBJS) ../kernel_cfg.c ../kernel_id.h
94+
95+../kernel_cfg.c ../kernel_id.h: ../system.cfg
96+ cpp -E ../system.cfg ../system.i
97+ $(KERNEL_CFGRTR) ../system.i -c ../kernel_cfg.c -i ../kernel_id.h
98+
99+
100+# %jp{ライブラリ生成用設定読込み}
101+include $(KERNEL_MAKINC_DIR)/makeexe.inc
102+
103+# %jp{armcc用のルール定義読込み}
104+include $(KERNEL_MAKINC_DIR)/armcc_r.inc
105+
106+
107+
108+# --------------------------------------
109+# %jp{依存関係}
110+# --------------------------------------
111+
112+$(OBJS_DIR)/sample.obj: ../sample.c ../kernel_id.h
113+
114+
115+# end of file
116+
--- /dev/null
+++ b/test/twai_sem/lpc2000/armcc/startup.s
@@ -0,0 +1,76 @@
1+
2+ EXPORT Reset_Handler
3+ EXPORT Undefined_Handler
4+ EXPORT Swi_Handler
5+ EXPORT Prefetch_Handler
6+ EXPORT Abort_Handler
7+ IMPORT _kernel_int_isp
8+
9+
10+
11+; %jp{プロセッサモード定義}
12+Mode_USR EQU 0x10 ; USR モード
13+Mode_FIQ EQU 0x11 ; FIQ モード
14+Mode_IRQ EQU 0x12 ; IRQ モード
15+Mode_SVC EQU 0x13 ; SVC モード
16+Mode_ABT EQU 0x17 ; ABT モード
17+Mode_UND EQU 0x1b ; UND モード
18+Mode_SYS EQU 0x1f ; SYS モード
19+Mode_MASK EQU 0x1f ; モードビットマスク
20+
21+; %jp{フラグ定義}
22+T_Bit EQU 0x20 ; T ビット
23+F_Bit EQU 0x40 ; F ビット
24+I_Bit EQU 0x80 ; I ビット
25+
26+
27+
28+ CODE32
29+
30+ PRESERVE8
31+ AREA Init, CODE, READONLY
32+
33+
34+; リセットハンドラ
35+Reset_Handler
36+ ; --- SYSモード移行
37+ msr cpsr_c, #Mode_SYS:OR:F_Bit:OR:I_Bit
38+
39+ ; --- スタック仮設定
40+ ldr r0, =_kernel_int_isp
41+ ldr sp, [r0]
42+
43+ ; --- C言語コードにジャンプ
44+ IMPORT __main
45+ bl __main
46+end_loop
47+ b end_loop
48+
49+
50+
51+
52+; SWIハンドラ
53+Swi_Handler
54+ movs pc, lr
55+
56+
57+; Undefined ハンドラ
58+Undefined_Handler
59+ b Undefined_Handler
60+
61+
62+; Prefetch ハンドラ
63+Prefetch_Handler
64+ b Prefetch_Handler
65+
66+
67+; Abort ハンドラ
68+Abort_Handler
69+ b Abort_Handler
70+
71+
72+
73+ END
74+
75+
76+; end of file
--- /dev/null
+++ b/test/twai_sem/lpc2000/armcc/uish.s
@@ -0,0 +1,38 @@
1+
2+HEAP_SIZE EQU 256
3+
4+
5+ EXPORT __user_initial_stackheap
6+ IMPORT __use_two_region_memory
7+
8+ IMPORT _kernel_int_stkblk
9+ IMPORT _kernel_int_isp
10+
11+
12+ PRESERVE8
13+ AREA UISH, CODE, READONLY
14+ CODE32
15+
16+__user_initial_stackheap FUNCTION
17+
18+ ldr r0, =User_Heap ; Heap Base
19+ ldr r2, =HEAP_SIZE
20+ add r2, r2, r0 ; Heap Limit
21+
22+ ldr r1, =_kernel_int_isp
23+ ldr r1, [r1] ; Stack Base
24+ ldr r3, =_kernel_int_stkblk ; Stack Limit
25+
26+ bx lr
27+
28+ ENDFUNC
29+
30+
31+
32+ AREA ||.bss||, NOINIT, ALIGN=2
33+User_Heap
34+ % HEAP_SIZE
35+
36+
37+
38+ END
--- /dev/null
+++ b/test/twai_sem/lpc2000/armcc/vectors.s
@@ -0,0 +1,42 @@
1+
2+
3+ IMPORT Reset_Handler
4+ IMPORT Undefined_Handler
5+ IMPORT Swi_Handler
6+ IMPORT Prefetch_Handler
7+ IMPORT Abort_Handler
8+ IMPORT _kernel_irq_hdr
9+ IMPORT _kernel_fiq_hdr
10+
11+
12+ CODE32
13+
14+ PRESERVE8
15+ AREA Init, CODE, READONLY
16+
17+ ENTRY
18+
19+ ldr pc, Reset_Addr
20+ ldr pc, Undefined_Addr
21+ ldr pc, Swi_Addr
22+ ldr pc, Prefetch_Addr
23+ ldr pc, Abort_Addr
24+ nop
25+ ldr pc, IRQ_Addr
26+ ldr pc, FIQ_Addr
27+
28+
29+Reset_Addr dcd Reset_Handler
30+Undefined_Addr dcd Undefined_Handler
31+Swi_Addr dcd Swi_Handler
32+Prefetch_Addr dcd Prefetch_Handler
33+Abort_Addr dcd Abort_Handler
34+IRQ_Addr dcd _kernel_irq_hdr
35+FIQ_Addr dcd _kernel_fiq_hdr
36+
37+
38+ END
39+
40+
41+
42+; end of file
--- /dev/null
+++ b/test/twai_sem/lpc2000/gcc/crt0.S
@@ -0,0 +1,82 @@
1+/* ------------------------------------------------------------------------ */
2+/* Hyper Operating System V4 Advance */
3+/* Sample program for ADuC7000 series */
4+/* */
5+/* Copyright (C) 1998-2007 by Project HOS */
6+/* http://sourceforge.jp/projects/hos/ */
7+/* ------------------------------------------------------------------------ */
8+
9+
10+ .extern __kernel_int_isp
11+ .extern ___data
12+ .extern ___data_end
13+ .extern ___bss
14+ .extern ___bss_end
15+ .extern main
16+
17+ .global _reset_handler
18+ .global __main
19+
20+
21+ .text
22+
23+#define Mode_USR 0x10
24+#define Mode_IRQ 0x12
25+#define Mode_FIQ 0x11
26+#define Mode_SVC 0x13
27+#define Mode_UND 0x1b
28+#define Mode_SYS 0x1f
29+#define I_Bit 0x80
30+#define F_Bit 0x40
31+#define T_Bit 0x20
32+
33+
34+/************************************************
35+ リセットハンドラ
36+************************************************/
37+ .align 4
38+_reset_handler:
39+ /* モード設定 */
40+ msr cpsr_c, #(Mode_SYS | F_Bit | I_Bit)
41+
42+ /* スタック仮設定 */
43+ ldr r0, =_kernel_int_isp
44+ ldr sp, [r0]
45+
46+
47+ /* DATA領域のコピー */
48+ ldr r0, =___data_rom
49+ ldr r1, =___data
50+ ldr r2, =___data_end
51+data_loop:
52+ cmp r1, r2
53+ ldrcc r3, [r0], #4
54+ strcc r3, [r1], #4
55+ bcc data_loop
56+
57+
58+ /* BSS領域の初期化 */
59+ ldr r0, =___bss
60+ ldr r1, =___bss_end
61+ mov r2, #0
62+bss_loop:
63+ cmp r0, r1
64+ strcc r2, [r0], #4
65+ bcc bss_loop
66+
67+
68+ /* main関数の呼び出し */
69+ bl main
70+end_loop:
71+ b end_loop
72+
73+
74+__main:
75+ bx lr
76+
77+
78+
79+ .end
80+
81+
82+/* end of file */
--- /dev/null
+++ b/test/twai_sem/lpc2000/gcc/gmake.mak
@@ -0,0 +1,158 @@
1+# ----------------------------------------------------------------------------
2+# Hyper Operating System V4 Advance
3+#
4+# Copyright (C) 1998-2008 by Project HOS
5+# http://sourceforge.jp/projects/hos/
6+# ----------------------------------------------------------------------------
7+
8+
9+
10+# --------------------------------------
11+# %jp{各種設定}{setting}
12+# --------------------------------------
13+
14+# %jp{ターゲット名}%en{target name}
15+TARGET ?= sample
16+
17+
18+# %jp{ツール定義}%en{tools}
19+GCC_ARCH ?= arm-elf-
20+CMD_CC ?= $(GCC_ARCH)gcc
21+CMD_ASM ?= $(GCC_ARCH)gcc
22+CMD_LINK ?= $(GCC_ARCH)gcc
23+CMD_OBJCNV ?= $(GCC_ARCH)objcopy
24+
25+
26+# %jp{アーキテクチャ定義}%en{architecture}
27+ARCH_NAME ?= lpc2000
28+ARCH_CC ?= gcc
29+
30+
31+# %jp{ディレクトリ定義}%en{directories}
32+TOP_DIR = ../../../..
33+KERNEL_DIR = $(TOP_DIR)/kernel
34+KERNEL_CFGRTR_DIR = $(TOP_DIR)/cfgrtr/build/gcc
35+KERNEL_MAKINC_DIR = $(KERNEL_DIR)/build/common/gmake
36+KERNEL_BUILD_DIR = $(KERNEL_DIR)/build/arm/lpc2000/gcc
37+
38+
39+# %jp{コンフィギュレータ定義}
40+KERNEL_CFGRTR = $(KERNEL_CFGRTR_DIR)/h4acfg-$(ARCH_NAME)
41+
42+
43+# %jp{共通定義読込み}%jp{common setting}
44+include $(KERNEL_MAKINC_DIR)/common.inc
45+
46+
47+# %jp{リンカスクリプト}%en{linker script}
48+LINK_SCRIPT = link.x
49+
50+# %jp{外部メモリ}%en{external memory}
51+ifeq ($(MEMMAP),ext)
52+TARGET := $(TARGET)_ext
53+LINK_SCRIPT = linkext.x
54+endif
55+
56+# %jp{内蔵RAM}%en{internal RAM}
57+ifeq ($(MEMMAP),ram)
58+LINK_SCRIPT = linkram.x
59+endif
60+
61+
62+# %jp{パス設定}%en{add source directories}
63+INC_DIRS += . ..
64+SRC_DIRS += . ..
65+
66+
67+# %jp{オプションフラグ}%en{option flags}
68+AFLAGS = -mcpu=arm7tdmi -mthumb-interwork
69+CFLAGS = -mcpu=arm7tdmi -mthumb-interwork
70+LNFLAGS = -mcpu=arm7tdmi -mthumb-interwork -nostartfiles -Wl,-Map,$(TARGET).map,-T$(LINK_SCRIPT)
71+
72+
73+# %jp{コンパイラ依存の設定読込み}%en{compiler dependent definitions}
74+include $(KERNEL_MAKINC_DIR)/$(ARCH_CC)_d.inc
75+
76+# %jp{実行ファイル生成用設定読込み}%en{definitions for exection file}
77+include $(KERNEL_MAKINC_DIR)/makexe_d.inc
78+
79+
80+# %jp{出力ファイル名}%en{output files}
81+TARGET_EXE = $(TARGET).$(EXT_EXE)
82+TARGET_MOT = $(TARGET).$(EXT_MOT)
83+TARGET_HEX = $(TARGET).$(EXT_HEX)
84+TARGET_BIN = $(TARGET).$(EXT_BIN)
85+
86+
87+
88+
89+# --------------------------------------
90+# %jp{ソースファイル}%en{source files}
91+# --------------------------------------
92+
93+# %jp{アセンブラファイルの追加}%en{assembry sources}
94+ASRCS += ./vectors.S
95+ASRCS += ./crt0.S
96+
97+
98+# %jp{C言語ファイルの追加}%en{C sources}
99+CSRCS += ../kernel_cfg.c
100+CSRCS += ../main.c
101+CSRCS += ../sample.c
102+CSRCS += ../ostimer.c
103+CSRCS += ../uart.c
104+
105+
106+
107+
108+# --------------------------------------
109+# %jp{ルール定義}%en{rules}
110+# --------------------------------------
111+
112+# %jp{ALL}%en{all}
113+.PHONY : all
114+all: kernel_make makeexe_all $(TARGET_EXE) $(TARGET_MOT) $(TARGET_HEX) $(TARGET_BIN)
115+
116+# %jp{クリーン}%en{clean}
117+.PHONY : clean
118+clean: makeexe_clean
119+ rm -f $(TARGET_EXE) $(TARGET_EXE) $(OBJS) ../kernel_cfg.c ../kernel_id.h
120+
121+# %jp{依存関係更新}%en{depend}
122+.PHONY : depend
123+depend: makeexe_depend
124+
125+# %jp{ソース一括コピー}%en{source files copy}
126+.PHONY : srccpy
127+srccpy: makeexe_srccpy
128+
129+# %jp{カーネルごとクリーン}%en{mostlyclean}
130+.PHONY : mostlyclean
131+mostlyclean: clean kernel_clean
132+
133+
134+# %jp{コンフィギュレータ実行}%en{configurator}
135+../kernel_cfg.c ../kernel_id.h: ../system.cfg $(KERNEL_CFGRTR)
136+ cpp -E ../system.cfg ../system.i
137+ $(KERNEL_CFGRTR) ../system.i -c ../kernel_cfg.c -i ../kernel_id.h
138+
139+
140+# %jp{実行ファイル生成用設定読込み}%en{rules for exection file}
141+include $(KERNEL_MAKINC_DIR)/makexe_r.inc
142+
143+# %jp{コンパイラ依存のルール定義読込み}%en{rules for compiler}
144+include $(KERNEL_MAKINC_DIR)/$(ARCH_CC)_r.inc
145+
146+
147+
148+
149+# --------------------------------------
150+# %jp{依存関係}%en{dependency}
151+# --------------------------------------
152+
153+$(OBJS_DIR)/sample.$(EXT_OBJ) : ../kernel_id.h
154+
155+
156+
157+# end of file
158+
--- /dev/null
+++ b/test/twai_sem/lpc2000/gcc/link.x
@@ -0,0 +1,54 @@
1+OUTPUT_ARCH(arm)
2+ENTRY(_reset_handler)
3+
4+MEMORY
5+{
6+ vector : o = 0x00000000, l = 0x00000040
7+ rom : o = 0x00000040, l = 0x0000ffc0
8+ ram : o = 0x40000000, l = 0x00004000
9+}
10+
11+SECTIONS
12+{
13+ .vector :
14+ {
15+ ___vector = . ;
16+ */vectors.o(.text)
17+ FILL(0xff)
18+ ___vector_end = . ;
19+ } > vector
20+ .text :
21+ {
22+ ___text = . ;
23+ *(.text)
24+ *(.strings)
25+ *(.rodata*)
26+ *(.glue*)
27+ ___text_end = . ;
28+ } > rom
29+ .tors :
30+ {
31+ . = ALIGN(4);
32+ ___ctors = . ;
33+ *(.ctors)
34+ ___ctors_end = . ;
35+ ___dtors = . ;
36+ *(.dtors)
37+ ___dtors_end = . ;
38+ } > rom
39+ data : AT (ADDR(.tors) + SIZEOF(.tors))
40+ {
41+ ___data_rom = ADDR(.tors) + SIZEOF(.tors);
42+ ___data = . ;
43+ *(.data)
44+ ___data_end = . ;
45+ } > ram
46+ .bss :
47+ {
48+ ___bss = . ;
49+ *(.bss)
50+ *(COMMON)
51+ ___bss_end = . ;
52+ } >ram
53+}
54+
--- /dev/null
+++ b/test/twai_sem/lpc2000/gcc/linkext.x
@@ -0,0 +1,54 @@
1+OUTPUT_ARCH(arm)
2+ENTRY(_reset_handler)
3+
4+MEMORY
5+{
6+ vector : o = 0x80000000, l = 0x00000040
7+ rom : o = 0x80000040, l = 0x0000ffc0
8+ ram : o = 0x80010000, l = 0x00002000
9+}
10+
11+SECTIONS
12+{
13+ .vector :
14+ {
15+ ___vector = . ;
16+ */vectors.o(.text)
17+ FILL(0xff)
18+ ___vector_end = . ;
19+ } > vector
20+ .text :
21+ {
22+ ___text = . ;
23+ *(.text)
24+ *(.strings)
25+ *(.rodata*)
26+ *(.glue*)
27+ ___text_end = . ;
28+ } > rom
29+ .tors :
30+ {
31+ . = ALIGN(4);
32+ ___ctors = . ;
33+ *(.ctors)
34+ ___ctors_end = . ;
35+ ___dtors = . ;
36+ *(.dtors)
37+ ___dtors_end = . ;
38+ } > rom
39+ data : AT (ADDR(.tors) + SIZEOF(.tors))
40+ {
41+ ___data_rom = ADDR(.tors) + SIZEOF(.tors);
42+ ___data = . ;
43+ *(.data)
44+ ___data_end = . ;
45+ } > ram
46+ .bss :
47+ {
48+ ___bss = . ;
49+ *(.bss)
50+ *(COMMON)
51+ ___bss_end = . ;
52+ } >ram
53+}
54+
--- /dev/null
+++ b/test/twai_sem/lpc2000/gcc/vectors.S
@@ -0,0 +1,55 @@
1+/* ------------------------------------------------------------------------ */
2+/* Hyper Operating System V4 サンプルプログラム */
3+/* ベクタテーブル */
4+/* */
5+/* Copyright (C) 1998-2007 by Project HOS */
6+/* http://sourceforge.jp/projects/hos/ */
7+/* ------------------------------------------------------------------------ */
8+
9+
10+ /* --- 外部定数宣言 */
11+ .global _reset_handler
12+ .global _kernel_und_hdr
13+ .global _kernel_swi_hdr
14+ .global _kernel_pre_hdr
15+ .global _kernel_abt_hdr
16+ .global _kernel_irq_hdr
17+ .global _kernel_fiq_hdr
18+
19+
20+ .text
21+ .align 2
22+
23+/* --------------------------------------- */
24+/* ベクタ定義 */
25+/* --------------------------------------- */
26+ ldr pc, adr_rst_hdr
27+ ldr pc, adr_und_hdr
28+ ldr pc, adr_swi_hdr
29+ ldr pc, adr_pre_hdr
30+ ldr pc, adr_abt_hdr
31+ nop
32+ ldr pc, adr_irq_hdr
33+ ldr pc, adr_fiq_hdr
34+
35+
36+adr_rst_hdr:
37+ .long _reset_handler
38+adr_und_hdr:
39+ .long _kernel_und_hdr
40+adr_swi_hdr:
41+ .long _kernel_swi_hdr
42+adr_pre_hdr:
43+ .long _kernel_pre_hdr
44+adr_abt_hdr:
45+ .long _kernel_abt_hdr
46+adr_irq_hdr:
47+ .long _kernel_irq_hdr
48+adr_fiq_hdr:
49+ .long _kernel_fiq_hdr
50+
51+
52+ .end
53+
54+
55+/* end of file */
--- /dev/null
+++ b/test/twai_sem/lpc2000/main.c
@@ -0,0 +1,27 @@
1+/**
2+ * Sample program for Hyper Operating System V4 Advance
3+ *
4+ * @file main.c
5+ * @brief %jp{メイン関数}%en{main}
6+ *
7+ * Copyright (C) 1998-2006 by Project HOS
8+ * http://sourceforge.jp/projects/hos/
9+ */
10+
11+
12+#include "kernel.h"
13+
14+
15+/** %jp{メイン関数} */
16+int main()
17+{
18+
19+ /* %jp{カーネルの動作開始} */
20+ vsta_knl();
21+
22+ return 0;
23+}
24+
25+
26+
27+/* end of file */
--- /dev/null
+++ b/test/twai_sem/lpc2000/ostimer.c
@@ -0,0 +1,72 @@
1+/**
2+ * Sample program for Hyper Operating System V4 Advance
3+ *
4+ * @file ostimer.c
5+ * @brief %jp{OSタイマ}%en{OS timer}
6+ *
7+ * Copyright (C) 1998-2006 by Project HOS
8+ * http://sourceforge.jp/projects/hos/
9+ */
10+
11+
12+#include "kernel.h"
13+#include "ostimer.h"
14+
15+
16+#define T0IR ((volatile UW *)0xe0004000)
17+#define T0TCR ((volatile UW *)0xe0004004)
18+#define T0TC ((volatile UW *)0xe0004008)
19+#define T0PR ((volatile UW *)0xe000400c)
20+#define T0PC ((volatile UW *)0xe0004010)
21+#define T0MCR ((volatile UW *)0xe0004014)
22+#define T0MR0 ((volatile UW *)0xe0004018)
23+#define T0MR1 ((volatile UW *)0xe000401c)
24+#define T0MR2 ((volatile UW *)0xe0004020)
25+#define T0MR3 ((volatile UW *)0xe0004024)
26+#define T0CCR ((volatile UW *)0xe0004028)
27+#define T0CR0 ((volatile UW *)0xe000402c)
28+#define T0CR1 ((volatile UW *)0xe0004030)
29+#define T0CR2 ((volatile UW *)0xe0004034)
30+#define T0CR3 ((volatile UW *)0xe0004038)
31+#define T0EMR ((volatile UW *)0xe000403c)
32+
33+
34+#define INTNO_TIMER0 4
35+
36+
37+static void OsTimer_Isr(VP_INT exinf); /**< %jp{タイマ割込みサービスルーチン} */
38+
39+
40+/** %jp{OS用タイマ初期化ルーチン} */
41+void OsTimer_Initialize(VP_INT exinf)
42+{
43+ T_CISR cisr;
44+
45+ /* %jp{割り込みサービスルーチン生成} */
46+ cisr.isratr = TA_HLNG;
47+ cisr.exinf = 0;
48+ cisr.intno = INTNO_TIMER0;
49+ cisr.isr = (FP)OsTimer_Isr;
50+ acre_isr(&cisr);
51+ ena_int(INTNO_TIMER0);
52+
53+ /* %jp{タイマ動作開始} */
54+ *T0MR0 = 142000 / 4;
55+ *T0MCR = 0x0003;
56+ *T0TCR = 1;
57+
58+}
59+
60+
61+/** %jp{タイマ割り込みハンドラ} */
62+void OsTimer_Isr(VP_INT exinf)
63+{
64+ /* %jp{割り込み要因クリア} */
65+ *T0IR= 1;
66+
67+ /* %jp{タイムティック供給} */
68+ isig_tim();
69+}
70+
71+
72+/* end of file */
--- /dev/null
+++ b/test/twai_sem/lpc2000/ostimer.h
@@ -0,0 +1,31 @@
1+/**
2+ * Sample program for Hyper Operating System V4 Advance
3+ *
4+ * @file ostimer.c
5+ * @brief %jp{OSタイマ}%en{OS timer}
6+ *
7+ * Copyright (C) 1998-2006 by Project HOS
8+ * http://sourceforge.jp/projects/hos/
9+ */
10+
11+
12+#ifndef __ostimer_h__
13+#define __ostimer_h__
14+
15+
16+#ifdef __cplusplus
17+extern "C" {
18+#endif
19+
20+/** %jp{OS用タイマ初期化ルーチン} */
21+void OsTimer_Initialize(VP_INT exinf);
22+
23+#ifdef __cplusplus
24+}
25+#endif
26+
27+
28+#endif /* __ostimer_h__ */
29+
30+
31+/* end of file */
--- /dev/null
+++ b/test/twai_sem/lpc2000/sample.c
@@ -0,0 +1,92 @@
1+/**
2+ * Sample program for Hyper Operating System V4 Advance
3+ *
4+ * @file sample.c
5+ * @brief %jp{サンプルプログラム}%en{Sample program}
6+ *
7+ * Copyright (C) 1998-2006 by Project HOS
8+ * http://sourceforge.jp/projects/hos/
9+ */
10+
11+#include <stdlib.h>
12+#include <string.h>
13+#include "kernel.h"
14+#include "kernel_id.h"
15+#include "uart.h"
16+
17+
18+
19+/** %jp{初期化ハンドラ} */
20+void Sample_Initialize(VP_INT exinf)
21+{
22+ /* %jp{UART初期化} */
23+ Uart_Initialize();
24+
25+ /* %jp{タスク起動} */
26+ act_tsk(TSKID_WAIT);
27+ act_tsk(TSKID_SIGNAL);
28+}
29+
30+
31+/** %jp{乱数取得} */
32+int GetRand(void)
33+{
34+ int r;
35+
36+ wai_sem(SEMID_RAND);
37+ r = rand();
38+ sig_sem(SEMID_RAND);
39+
40+ return r;
41+}
42+
43+
44+
45+/** %jp{待ちタスク} */
46+void Sample_WaitTask(VP_INT exinf)
47+{
48+ TMO tmo;
49+ ER ercd;
50+
51+ for ( ; ; )
52+ {
53+ /* 待ち時間を決める */
54+ tmo = GetRand() % 5;
55+
56+ /* 待つ */
57+ ercd = twai_sem(SEMID_TEST, tmo);
58+ switch ( ercd )
59+ {
60+ case E_OK:
61+ Uart_PutString("OK\n");
62+ break;
63+
64+ case E_TMOUT:
65+ Uart_PutString("TMOUT\n");
66+ break;
67+
68+ default:
69+ Uart_PutString("error!\n");
70+ for ( ; ; ) ;
71+ }
72+ }
73+}
74+
75+
76+/** %jp{sig_semタスク} */
77+void Sample_SignalTask(VP_INT exinf)
78+{
79+ RELTIM tim;
80+
81+ for ( ; ; )
82+ {
83+ tim = GetRand() % 5;
84+ dly_tsk(tim);
85+
86+ sig_sem(SEMID_TEST);
87+ }
88+}
89+
90+
91+
92+/* end of file */
--- /dev/null
+++ b/test/twai_sem/lpc2000/sample.h
@@ -0,0 +1,34 @@
1+/**
2+ * Sample program for Hyper Operating System V4 Advance
3+ *
4+ * @file sample.c
5+ * @brief %jp{サンプルプログラム}%en{Sample program}
6+ *
7+ * Copyright (C) 1998-2006 by Project HOS
8+ * http://sourceforge.jp/projects/hos/
9+ */
10+
11+
12+
13+#ifndef __sample_h__
14+#define __sample_h__
15+
16+
17+#ifdef __cplusplus
18+extern "C" {
19+#endif
20+
21+void Sample_Initialize(VP_INT exinf);
22+void Sample_WaitTask(VP_INT exinf);
23+void Sample_SignalTask(VP_INT exinf);
24+void Sample_Print(VP_INT exinf);
25+
26+#ifdef __cplusplus
27+}
28+#endif
29+
30+
31+#endif /* __sample_h__ */
32+
33+
34+/* end of file */
--- /dev/null
+++ b/test/twai_sem/lpc2000/system.cfg
@@ -0,0 +1,37 @@
1+/**
2+ * Sample program for Hyper Operating System V4 Advance
3+ *
4+ * @file system.cfg
5+ * @brief %jp{サンプルのコンフィギュレーション}
6+ *
7+ * Copyright (C) 1998-2006 by Project HOS
8+ * http://sourceforge.jp/projects/hos/
9+ */
10+
11+
12+/* %jp{カーネル独自の設定}%en{kernel} */
13+KERNEL_HEP_MEM(256, NULL);
14+KERNEL_SYS_STK(256, NULL);
15+KERNEL_INT_STK(512, NULL);
16+KERNEL_MAX_TSKID(5);
17+KERNEL_MAX_SEMID(6);
18+KERNEL_MAX_FLGID(2);
19+KERNEL_MAX_MBXID(2);
20+KERNEL_MAX_MPFID(2);
21+KERNEL_MAX_ISRID(4);
22+
23+
24+/* %jp{OSタイマの設定}%en{OS timer} */
25+INCLUDE("\"ostimer.h\"");
26+ATT_INI({TA_HLNG, 0, OsTimer_Initialize});
27+
28+/* %jp{サンプル}%en{Sample program} */
29+INCLUDE("\"sample.h\"");
30+ATT_INI({TA_HLNG, 0, Sample_Initialize});
31+CRE_TSK(TSKID_WAIT, {TA_HLNG, 2, Sample_WaitTask, 2, 512, NULL});
32+CRE_TSK(TSKID_SIGNAL, {TA_HLNG, 2, Sample_SignalTask, 2, 512, NULL});
33+CRE_SEM(SEMID_TEST, {TA_TFIFO, 1, 1});
34+CRE_SEM(SEMID_RAND, {TA_TFIFO, 1, 1});
35+
36+
37+/* end of file */
--- /dev/null
+++ b/test/twai_sem/lpc2000/uart.c
@@ -0,0 +1,94 @@
1+/**
2+ * Sample program for Hyper Operating System V4 Advance
3+ *
4+ * @file uart.c
5+ * @brief %jp{UARTへの出力}%en{UART device driver}
6+ *
7+ * Copyright (C) 1998-2006 by Project HOS
8+ * http://sourceforge.jp/projects/hos/
9+ */
10+
11+
12+#include "kernel.h"
13+
14+#define PINSEL0 ((volatile UW *)0xe002c000)
15+
16+#define U0RBR ((volatile UB *)0xe000c000)
17+#define U0THR ((volatile UB *)0xe000c000)
18+#define U0LCR ((volatile UB *)0xe000c00c)
19+#define U0LSR ((volatile UB *)0xe000c014)
20+#define U0DLL ((volatile UB *)0xe000c000)
21+#define U0DLM ((volatile UB *)0xe000c004)
22+
23+
24+#define VPB_CLK (14700000/4)
25+#define UART_BPS 38400
26+
27+
28+/* %jp{UARTの初期化} */
29+void Uart_Initialize(void)
30+{
31+ *PINSEL0 = (*PINSEL0 & 0xfffffff0) | 0x05;
32+
33+ *U0LCR = 0x80;
34+ *U0DLL = (VPB_CLK / 16.0) / UART_BPS + 0.5;
35+ *U0DLM = 0x00;
36+ *U0LCR = 0x03;
37+}
38+
39+
40+/* %jp{1文字出力} */
41+void Uart_PutChar(int c)
42+{
43+ while ( !(*U0LSR & 0x20) )
44+ ;
45+
46+ *U0THR = c;
47+}
48+
49+
50+/* %jp{文字列出力} */
51+void Uart_PutString(const char *text)
52+{
53+ while ( *text != '\0' )
54+ {
55+ if ( *text == '\n' )
56+ {
57+ Uart_PutChar('\r');
58+ Uart_PutChar('\n');
59+ }
60+ else
61+ {
62+ Uart_PutChar(*text);
63+ }
64+
65+ text++;
66+ }
67+}
68+
69+
70+char Uart_hex2asc(int a)
71+{
72+ if ( a < 10 )
73+ {
74+ return '0' + a;
75+ }
76+ return 'a' + a - 10;
77+}
78+
79+
80+void Uart_PutHexByte(char c)
81+{
82+ Uart_PutChar(Uart_hex2asc((c >> 4) & 0xf));
83+ Uart_PutChar(Uart_hex2asc((c >> 0) & 0xf));
84+}
85+
86+void Uart_PutHexWord(int i)
87+{
88+ Uart_PutHexByte((i >> 8) & 0xff);
89+ Uart_PutHexByte((i >> 0) & 0xff);
90+}
91+
92+
93+
94+/* end of file */
--- /dev/null
+++ b/test/twai_sem/lpc2000/uart.h
@@ -0,0 +1,35 @@
1+/**
2+ * Sample program for Hyper Operating System V4 Advance
3+ *
4+ * @file uart.h
5+ * @brief %jp{UARTへの出力}%en{UART device driver}
6+ *
7+ * Copyright (C) 1998-2006 by Project HOS
8+ * http://sourceforge.jp/projects/hos/
9+ */
10+
11+
12+#ifndef __ostimer_h__
13+#define __ostimer_h__
14+
15+
16+#ifdef __cplusplus
17+extern "C" {
18+#endif
19+
20+void Uart_Initialize(void); /* %jp{UART の初期化} */
21+void Uart_PutChar(int c); /* %jp{1文字出力} */
22+void Uart_PutString(const char *text); /* %jp{文字列出力} */
23+
24+void Uart_PutHexByte(char c);
25+void Uart_PutHexWord(int i);
26+
27+#ifdef __cplusplus
28+}
29+#endif
30+
31+
32+#endif /* __ostimer_h__ */
33+
34+
35+/* end of file */