📄 sys_start.c
字号:
/* * TOPPERS/JSP Kernel * Toyohashi Open Platform for Embedded Real-Time Systems/ * Just Standard Profile Kernel * * Copyright (C) 2000 by Embedded and Real-Time Systems Laboratory * Toyohashi Univ. of Technology, JAPAN * * Copyright (C) 2004 by SEIKO EPSON Corp, JAPAN * * 惧淡螟侯涪荚は·笆布の (1)×(4) の掘凤か·Free Software Foundation * によって给山されている GNU General Public License の Version 2 に淡 * 揭されている掘凤を塔たす眷圭に嘎り·塑ソフトウェア∈塑ソフトウェア * を猖恃したものを崔むˉ笆布票じ∷を蝗脱ˇ剩澜ˇ猖恃ˇ浩芹邵∈笆布· * 网脱と钙ぶ∷することを痰浸で钓满するˉ * (1) 塑ソフトウェアをソ〖スコ〖ドの妨で网脱する眷圭には·惧淡の螟侯 * 涪山绩·この网脱掘凤および布淡の痰瘦沮惮年が·そのままの妨でソ〖 * スコ〖ド面に崔まれていることˉ * (2) 塑ソフトウェアを·ライブラリ妨及など·戮のソフトウェア倡券に蝗 * 脱できる妨で浩芹邵する眷圭には·浩芹邵に燃うドキュメント∈网脱 * 荚マニュアルなど∷に·惧淡の螟侯涪山绩·この网脱掘凤および布淡 * の痰瘦沮惮年を非很することˉ * (3) 塑ソフトウェアを·怠达に寥み哈むなど·戮のソフトウェア倡券に蝗 * 脱できない妨で浩芹邵する眷圭には·肌のいずれかの掘凤を塔たすこ * とˉ * (a) 浩芹邵に燃うドキュメント∈网脱荚マニュアルなど∷に·惧淡の螟 * 侯涪山绩·この网脱掘凤および布淡の痰瘦沮惮年を非很することˉ * (b) 浩芹邵の妨轮を·侍に年める数恕によって·TOPPERSプロジェクトに * 鼠桂することˉ * (4) 塑ソフトウェアの网脱により木儡弄または粗儡弄に栏じるいかなる禄 * 巢からも·惧淡螟侯涪荚およびTOPPERSプロジェクトを倘勒することˉ * * 塑ソフトウェアは·痰瘦沮で捏丁されているものであるˉ惧淡螟侯涪荚お * よびTOPPERSプロジェクトは·塑ソフトウェアに簇して·その努脱材墙拉も * 崔めて·いかなる瘦沮も乖わないˉまた·塑ソフトウェアの网脱により木 * 儡弄または粗儡弄に栏じたいかなる禄巢に簇しても·その勒扦を砷わないˉ * *//* * カ〖ネル脱のスタ〖トアップモジュ〖ル(S1C33脱) */#include "jsp_kernel.h"#include "sys_config.h"#include "cpu_config.h"/* * 嘲婶簇眶の徊救 */extern void init_lib(void);extern void init_sys(void);extern void INT_ENTRY(timer_handler)(void);extern void INT_ENTRY(sio_in_handler)(void);extern void INT_ENTRY(sio_out_handler)(void);/* * プロトタイプ离咐 */void start(void);static void undef_handler(void);static void hardware_init_hook(void);static void software_init_hook(void);/* * ベクタ〖テ〖ブル */VP tps_VectorTable[] = { /* offset number */ (VP) start, /* 00 Reset */ (VP) undef_handler, /* 01 */ (VP) undef_handler, /* 02 */ (VP) undef_handler, /* 03 */ (VP) undef_handler, /* 04 Zero division */ (VP) undef_handler, /* 05 */ (VP) undef_handler, /* 06 Address error exception */ (VP) undef_handler, /* 07 debug */ (VP) undef_handler, /* 08 NMI */ (VP) undef_handler, /* 09 */ (VP) undef_handler, /* 10 */ (VP) undef_handler, /* 11 */ (VP) undef_handler, /* 12 Software exception 0 */ (VP) undef_handler, /* 13 Software exception 1 */ (VP) undef_handler, /* 14 Software exception 2 */ (VP) undef_handler, /* 15 Software exception 3 */ (VP) undef_handler, /* 16 (00) */ (VP) undef_handler, /* 17 (01) */ (VP) undef_handler, /* 18 (02) */ (VP) undef_handler, /* 19 (03) */ (VP) undef_handler, /* 20 (04) */ (VP) undef_handler, /* 21 (05) */ (VP) undef_handler, /* 22 (06) */ (VP) undef_handler, /* 23 (07) */ (VP) undef_handler, /* 24 (08) */ (VP) undef_handler, /* 25 (09) */ (VP) undef_handler, /* 26 (10) */ (VP) undef_handler, /* 27 (11) */ (VP) undef_handler, /* 28 (12) */ (VP) undef_handler, /* 29 (13) */ (VP) undef_handler, /* 30 (14) */ (VP) undef_handler, /* 31 (15) */ (VP) undef_handler, /* 32 (16) */ (VP) undef_handler, /* 33 (17) */ (VP) INT_ENTRY(timer_handler), /* 34 (18) 16 bit programable timer 1-b */ (VP) undef_handler, /* 35 (19) */ (VP) undef_handler, /* 36 (20) */ (VP) undef_handler, /* 37 (21) */ (VP) undef_handler, /* 38 (22) */ (VP) undef_handler, /* 39 (23) */ (VP) undef_handler, /* 40 (24) */ (VP) undef_handler, /* 41 (25) */ (VP) undef_handler, /* 42 (26) */ (VP) undef_handler, /* 43 (27) */ (VP) undef_handler, /* 44 (28) */ (VP) undef_handler, /* 45 (29) */ (VP) undef_handler, /* 46 (30) */ (VP) undef_handler, /* 47 (31) */ (VP) undef_handler, /* 48 (32) */ (VP) undef_handler, /* 49 (33) */ (VP) undef_handler, /* 50 (34) */ (VP) undef_handler, /* 51 (35) */ (VP) undef_handler, /* 52 (36) */ (VP) undef_handler, /* 53 (37) */ (VP) undef_handler, /* 54 (38) */ (VP) undef_handler, /* 55 (39) */ (VP) undef_handler, /* 56 (40) Serial interface Ch.0 (error) */ (VP) INT_ENTRY(sio_in_handler), /* 57 (41) Serial interface Ch.0 (rx) */ (VP) INT_ENTRY(sio_out_handler),/* 58 (42) Serial interface Ch.0 (tx) */ (VP) undef_handler, /* 59 (43) */ (VP) undef_handler, /* 60 (44) */ (VP) undef_handler, /* 61 (45) */ (VP) undef_handler, /* 62 (46) */ (VP) undef_handler, /* 63 (47) */ (VP) undef_handler, /* 64 (48) */ (VP) undef_handler, /* 65 (49) */ (VP) undef_handler, /* 66 (50) */ (VP) undef_handler, /* 67 (51) */ (VP) undef_handler, /* 68 (52) */ (VP) undef_handler, /* 69 (53) */ (VP) undef_handler, /* 70 (54) */ (VP) undef_handler /* 71 (55) */};/* * ブ〖トル〖チン */void start(void){ /* * デフォルトデ〖タエリアアドレスを肋年する */ Asm("xld.w %r15, __dp"); /* * 润タスクコンテストのスタックをSTACKTOPに介袋步する * STACKTOPは、sys_config.hで年盗 */ set_sp(STACKTOP); /* * PSRを介袋步し、充り哈みを敦贿する */ set_psr(0x00000000); /* * hardware_init_hook を钙び叫す。(0でない眷圭) * * ハ〖ドウェア巴赂に涩妥な介袋步借妄がある眷圭は· * hardware_init_hook という簇眶を脱罢すればよいˉ * 恶挛弄にはROM步の狠、RAMを蝗脱材墙にするための * バスコントロ〖ラの介袋步霹を乖う。 * sys_config.c 柒で hardware_init_hook を年盗しているˉ */ if (hardware_init_hook != (VP) 0) { hardware_init_hook(); } /* * dataセクションを介袋步する∈ROM步滦炳∷ˉ */ memcpy(VECTOR_START, IVECTOR_START, (UW)IVECTOR_END - (UW)IVECTOR_START); memcpy(DATA_START, IDATA_START, (UW)IDATA_END - (UW)IDATA_START); /* * bssセクションを0クリアする。 */ memset(BSS_START, 0x00, BSS_END - BSS_START); /* * software_init_hook を钙び叫す∈0 でない眷圭∷ * * ソフトウェア茨董∈泼にライブラリ∷に巴赂して涩妥な介袋步借 * 妄がある眷圭は·software_init_hook という簇眶を脱罢すれば * よいˉ */ if (software_init_hook != (VP) 0) { software_init_hook(); } /* * カ〖ネルを弹瓢する */ Asm("xjp kernel_start"); do { Asm("halt"); } while (TRUE);}/* * ダミ〖ル〖チン */static void undef_handler(void){ while(1){ ; }}/* * システム巴赂の介袋步借妄 */static void hardware_init_hook(void){ (*(s1c33Bcu_t *) S1C33_BCU_BASE).bTtbrProt = (IOREG)0x59; (*(s1c33Bcu_t *) S1C33_BCU_BASE).ulTtbr = (LIOREG)tps_VectorTable; (*(s1c33Bcu_t *) S1C33_BCU_BASE).uwBus = 0x0008; (*(s1c33Bcu_t *) S1C33_BCU_BASE).uwDram = 0x0c00; return;}/* * ソフトウェア巴赂の介袋步借妄 */static void software_init_hook(void){ init_lib(); init_sys();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -