2 * Sample program for Hyper Operating System V4 Advance
5 * @brief %jp{サンプルプログラム}%en{Sample program}
7 * Copyright (C) 1998-2008 by Project HOS
8 * http://sourceforge.jp/projects/hos/
16 #include "kernel_id.h"
17 #include "system/system/system.h"
18 #include "system/sysapi/sysapi.h"
19 #include "system/file/console.h"
20 #include "system/process/process.h"
21 #include "system/command/command.h"
22 #include "driver/serial/pc16550/pc16550drv.h"
23 #include "driver/console/vt100/vt100drv.h"
24 #include "application//syscmd/shell/shell.h"
25 #include "application//syscmd/commandlist/commandlist.h"
26 #include "application//syscmd/processlist/processlist.h"
27 #include "application/utility/timecmd/timecmd.h"
28 #include "application/utility/memdump/memdump.h"
29 #include "application/utility/memwrite/memwrite.h"
30 #include "application/utility/memtest/memtest.h"
31 #include "application/utility/keytest/keytest.h"
32 #include "application/example/hello/hello.h"
37 long g_SystemHeap[64 * 1024 / sizeof(long)];
40 #define REG_PLLCON ((volatile UB *)0xe01fc080)
41 #define REG_PLLCFG ((volatile UB *)0xe01fc084)
42 #define REG_PLLSTAT ((volatile UH *)0xe01fc088)
43 #define REG_PLLFEED ((volatile UB *)0xe01fc08c)
44 #define REG_PINSEL0 ((volatile UW *)0xe002c000)
45 #define REG_BCFG0 ((volatile UW *)0xffe00000)
48 int Boot_Process(VPARAM Param);
51 void Boot_Task(VP_INT exinf)
53 T_SYSTEM_INITIALIZE_INF SysInf;
56 /*************************/
58 /*************************/
62 *REG_PLLCFG = ((0x1 << 5) | (0x3 << 0)); /* M=4, P=2 (Fosc=14.7MHz, Fcco=235.2MHz, cclk=58.8MHz) */
66 while ( !(*REG_PLLSTAT & 0x0400) )
74 *REG_PINSEL0 = (*REG_PINSEL0 & 0xfffffff0) | 0x05;
75 *REG_BCFG0 = ((0x1 << 28) | (0x03 << 11) | (0x03 << 5) | (0x03 << 0));
76 /* *REG_BCFG0 = ((0x1 << 28) | (0x0f << 11) | (0x0f << 5) | (0x0f << 0)); */
79 /*************************/
81 /*************************/
84 memset(&SysInf, 0, sizeof(SysInf));
85 SysInf.pSysMemBase = g_SystemHeap;
86 SysInf.SysMemSize = sizeof(g_SystemHeap);
87 SysInf.SysMemAlign = 8;
88 SysInf.pIoMemBase = NULL;
89 SysInf.SystemStackSize = 1024;
90 SysInf.pfncBoot = Boot_Process;
91 SysInf.BootParam = (VPARAM)0;
92 SysInf.BootStackSize = 1024;
93 System_Initialize(&SysInf);
98 int Boot_Process(VPARAM Param)
100 T_PROCESS_CREATE_INF ProcInf;
107 /*************************/
109 /*************************/
112 OsTimer_Initialize();
114 /* 16550デバドラ生成 (/dev/com0 に登録) */
115 hDriver = Pc16550Drv_Create((void *)0xe000c000, 2, 6, 14700000/4, 64);
116 File_AddDevice("com0", hDriver);
119 hTty = File_Open("/dev/com0", FILE_OPEN_READ | FILE_OPEN_WRITE);
121 /* シリアル上にコンソールを生成( /dev/con0 に登録) */
122 hDriver = Vt100Drv_Create(hTty);
123 File_AddDevice("con0", hDriver);
126 hCon = File_Open("/dev/con0", FILE_OPEN_READ | FILE_OPEN_WRITE);
129 /*************************/
131 /*************************/
133 Process_SetTerminal(HANDLE_NULL, hTty);
134 Process_SetConIn(HANDLE_NULL, hCon);
135 Process_SetConOut(HANDLE_NULL, hCon);
136 Process_SetStdIn(HANDLE_NULL, hCon);
137 Process_SetStdOut(HANDLE_NULL, hCon);
138 Process_SetStdErr(HANDLE_NULL, hCon);
141 /*************************/
143 /*************************/
144 Command_AddCommand("sh", Shell_Main);
145 Command_AddCommand("ps", ProcessList_Main);
146 Command_AddCommand("help", CommandList_Main);
147 Command_AddCommand("time", TimeCmd_Main);
148 Command_AddCommand("memdump", MemDump_Main);
149 Command_AddCommand("memwrite", MemWrite_Main);
150 Command_AddCommand("memtest", MemTest_Main);
151 Command_AddCommand("keytest", KeyTest_Main);
152 Command_AddCommand("hello", Hello_Main);
155 /*************************/
157 /*************************/
160 "================================================================\n"
161 " Hyper Operating System Application Flamework\n"
163 " Copyright (C) 1998-2008 by Project HOS\n"
164 " http://sourceforge.jp/projects/hos/\n"
165 "================================================================\n"
169 /*************************/
171 /*************************/
174 ProcInf.pszCommandLine = "sh -i"; /* 実行コマンド */
175 ProcInf.pszCurrentDir = ""; /* 起動ディレクトリ */
176 ProcInf.pfncEntry = NULL; /* 起動アドレス */
177 ProcInf.Param = 0; /* ユーザーパラメータ */
178 ProcInf.StackSize = 2048; /* スタックサイズ */
179 ProcInf.Priority = PROCESS_PRIORITY_NORMAL; /* プロセス優先度 */
180 ProcInf.hTerminal = Process_GetTerminal(HANDLE_NULL); /* ターミナル */
181 ProcInf.hConIn = Process_GetConIn(HANDLE_NULL); /* コンソール入力 */
182 ProcInf.hConOut = Process_GetConOut(HANDLE_NULL); /* コンソール出力 */
183 ProcInf.hStdIn = Process_GetStdIn(HANDLE_NULL); /* 標準入力 */
184 ProcInf.hStdOut = Process_GetStdOut(HANDLE_NULL); /* 標準出力 */
185 ProcInf.hStdErr = Process_GetStdErr(HANDLE_NULL); /* 標準エラー出力 */
188 hProcess = Process_CreateEx(&ProcInf);
189 Process_WaitExit(hProcess);
190 Process_Delete(hProcess);