OSDN Git Service

b68d718f41fb4ff17380b942b2fac1559f6d27f3
[hos/hos-v4a.git] / aplfw / sample / arm / ez_arm7 / boot.c
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-2008 by Project HOS
8  * http://sourceforge.jp/projects/hos/
9  */
10
11
12 #include <stdio.h>
13 #include <stdlib.h>
14 #include <string.h>
15 #include "kernel.h"
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"
33 #include "boot.h"
34 #include "ostimer.h"
35
36
37 long    g_SystemHeap[64 * 1024 / sizeof(long)];
38
39
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)
46
47
48 int Boot_Process(VPARAM Param);
49
50
51 void Boot_Task(VP_INT exinf)
52 {
53         T_SYSTEM_INITIALIZE_INF SysInf;
54         
55         
56         /*************************/
57         /*    固有初期設定       */
58         /*************************/
59         
60         /* PLL設定 */
61 #if 0
62         *REG_PLLCFG   = ((0x1 << 5) | (0x3 << 0));      /* M=4, P=2 (Fosc=14.7MHz, Fcco=235.2MHz, cclk=58.8MHz) */
63         *REG_PLLCON  |= 0x01;
64         *REG_PLLFEED  = 0xaa;
65         *REG_PLLFEED  = 0x55;
66         while ( !(*REG_PLLSTAT & 0x0400) )
67                 ;
68         *REG_PLLCON  |= 0x02;
69         *REG_PLLFEED  = 0xaa;
70         *REG_PLLFEED  = 0x55;
71 #endif
72         
73         /* Pin設定 */
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));        */
77         
78         
79         /*************************/
80         /*       初期化          */
81         /*************************/
82         
83         /* システム初期化 */
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);
94 }
95
96
97 /* ブートプロセス */
98 int Boot_Process(VPARAM Param)
99 {
100         T_PROCESS_CREATE_INF    ProcInf;
101         HANDLE                                  hProcess;
102         HANDLE                                  hDriver;
103         HANDLE                                  hTty;
104         HANDLE                                  hCon;
105         
106         
107         /*************************/
108         /*   デバイスドライバ    */
109         /*************************/
110
111         /* タイマ初期化 */        
112         OsTimer_Initialize();
113         
114         /* 16550デバドラ生成 (/dev/com0 に登録) */
115         hDriver = Pc16550Drv_Create((void *)0xe000c000, 2, 6, 14700000/4, 64);
116         File_AddDevice("com0", hDriver);
117
118         /* シリアルを開く */
119         hTty = File_Open("/dev/com0", FILE_OPEN_READ | FILE_OPEN_WRITE);
120         
121         /* シリアル上にコンソールを生成( /dev/con0 に登録) */
122         hDriver = Vt100Drv_Create(hTty);
123         File_AddDevice("con0", hDriver);
124         
125         /* コンソールを開く */
126         hCon = File_Open("/dev/con0", FILE_OPEN_READ | FILE_OPEN_WRITE);
127         
128         
129         /*************************/
130         /*     標準入出力設定    */
131         /*************************/
132         
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);
139         
140         
141         /*************************/
142         /*     コマンド登録      */
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);
153         
154         
155         /*************************/
156         /*    起動メッセージ     */
157         /*************************/
158         StdIo_PutString(
159                         "\n\n"
160                         "================================================================\n"
161                         " Hyper Operating System  Application Flamework\n"
162                         "\n"
163                         "                          Copyright (C) 1998-2008 by Project HOS\n"
164                         "                          http://sourceforge.jp/projects/hos/\n"
165                         "================================================================\n"
166                         "\n");
167         
168
169         /*************************/
170         /*      シェル起動       */
171         /*************************/
172
173         /* プロセスの生成*/
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);                /* 標準エラー出力 */
186         for ( ; ; )
187         {
188                 hProcess = Process_CreateEx(&ProcInf);
189                 Process_WaitExit(hProcess);
190                 Process_Delete(hProcess);
191         }
192 }
193
194
195
196 /* end of file */