📄 cpu_config.c
字号:
/* * TOPPERS/JSP Kernel * Toyohashi Open Platform for Embedded Real-Time Systems/ * Just Standard Profile Kernel * * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory * Toyohashi Univ. of Technology, JAPAN * Copyright (C) 2000-2003 by Industrial Technology Institute, * Miyagi Prefectural Government, JAPAN * * 惧淡螟侯涪荚は·笆布の (1)×(4) の掘凤か·Free Software Foundation * によって给山されている GNU General Public License の Version 2 に淡 * 揭されている掘凤を塔たす眷圭に嘎り·塑ソフトウェア∈塑ソフトウェア * を猖恃したものを崔むˉ笆布票じ∷を蝗脱ˇ剩澜ˇ猖恃ˇ浩芹邵∈笆布· * 网脱と钙ぶ∷することを痰浸で钓满するˉ * (1) 塑ソフトウェアをソ〖スコ〖ドの妨で网脱する眷圭には·惧淡の螟侯 * 涪山绩·この网脱掘凤および布淡の痰瘦沮惮年が·そのままの妨でソ〖 * スコ〖ド面に崔まれていることˉ * (2) 塑ソフトウェアを·ライブラリ妨及など·戮のソフトウェア倡券に蝗 * 脱できる妨で浩芹邵する眷圭には·浩芹邵に燃うドキュメント∈网脱 * 荚マニュアルなど∷に·惧淡の螟侯涪山绩·この网脱掘凤および布淡 * の痰瘦沮惮年を非很することˉ * (3) 塑ソフトウェアを·怠达に寥み哈むなど·戮のソフトウェア倡券に蝗 * 脱できない妨で浩芹邵する眷圭には·肌のいずれかの掘凤を塔たすこ * とˉ * (a) 浩芹邵に燃うドキュメント∈网脱荚マニュアルなど∷に·惧淡の螟 * 侯涪山绩·この网脱掘凤および布淡の痰瘦沮惮年を非很することˉ * (b) 浩芹邵の妨轮を·侍に年める数恕によって·TOPPERSプロジェクトに * 鼠桂することˉ * (4) 塑ソフトウェアの网脱により木儡弄または粗儡弄に栏じるいかなる禄 * 巢からも·惧淡螟侯涪荚およびTOPPERSプロジェクトを倘勒することˉ * * 塑ソフトウェアは·痰瘦沮で捏丁されているものであるˉ惧淡螟侯涪荚お * よびTOPPERSプロジェクトは·塑ソフトウェアに簇して·その努脱材墙拉も * 崔めて·いかなる瘦沮も乖わないˉまた·塑ソフトウェアの网脱により木 * 儡弄または粗儡弄に栏じたいかなる禄巢に簇しても·その勒扦を砷わないˉ *//* * プロセッサ巴赂モジュ〖ル∈MIPS3脱∷ */#include "jsp_kernel.h"#include "check.h"#include "task.h"/* * 充哈みハンドラ】充哈みマスクの导击テ〖ブル */INT_TABLE int_table[ TMAX_ALL_INTNO ];/* * 毋嘲ハンドラの导击テ〖ブル */FP exc_table[ TMAX_CORE_EXCNO ];/* * プロセッサ巴赂の介袋步 */void cpu_initialize() { int i; /* 充哈みハンドラ】充哈みマスクの导击テ〖ブル介袋步 */ for( i = 0; i < TMAX_ALL_INTNO; i++ ) { define_inh( i, (FP) &cpu_experr ); } /* 毋嘲ベクタの导击テ〖ブル介袋步 */ for( i = 0; i < TMAX_CORE_EXCNO; i++ ) { define_exc( i, (FP) &cpu_experr ); }}/* * プロセッサ巴赂の姜位借妄 */void cpu_terminate() {}/* * 腮警箕粗略ち */void sil_dly_nse(UINT dlytim) { /* $2 : v0, $3 : v1 */ Asm(" move $2, %0" :: "r"(dlytim) ); Asm(" li $3, %0" :: "g"(SIL_DLY_TIM1) ); Asm(" sub $2, $2, $3"); /* v0 -= v1 (dlytim -= SIL_DLY_TIM1) */ Asm(" blez $2, sil_dly_nse_2"); /* v0 <= 0 ならリタ〖ン */ Asm(" li $3, %0" :: "g"(SIL_DLY_TIM2) ); Asm("sil_dly_nse_1:"); Asm(" sub $2, $2, $3"); /* v0 -= v1 (dlytim -= SIL_DLY_TIM2) */ Asm(" bgtz $2, sil_dly_nse_1"); /* v0 > 0 ならル〖プ */ Asm("sil_dly_nse_2:");}#ifdef SUPPORT_CHG_IPM/* * 充哈みマスクの恃构 * * 充哈みマスクは、タスクディスパッチによって、糠しく悸乖觉轮になったタスクに * 苞き费がれる。そのため、タスクが悸乖面に、侍のタスクによって充哈みマスクが * 恃构される眷圭がある。JSPカ〖ネルでは、充哈みマスクの恃构はタスク毋嘲借妄 * ル〖チンによっても弹こるが、これによって胺いが岂しくなる觉斗は警ないと蛔わ * れる。充哈みマスクの猛によってタスクディスパッチを敦贿したい眷圭には、 * dis_dsp を驶脱すればよい。 * MIPS3タ〖ゲットでは、MIPS3コアの充哈みマスクだけでなく、充哈みコントロ〖ラ * の充哈みコントロ〖ラも胺っているので庙罢。 */SYSCALL ER chg_ipm(IPM ipm) { ER ercd; LOG_CHG_IPM_ENTER(ipm); CHECK_TSKCTX_UNL(); CHECK_IPM(ipm); t_lock_cpu(); cpu_set_ipm( ipm.core ); /* MIPS3コアの充哈みマスクの肋年 */ icu_set_ipm( &(ipm.icu) ); /* 嘲婶充哈みコントロ〖ラの充哈みマスク の肋年 */ ercd = E_OK; t_unlock_cpu(); exit: LOG_CHG_IPM_LEAVE(ercd); return(ercd);}/* * 充哈みマスクの徊救 */SYSCALL ER get_ipm(IPM *p_ipm) { ER ercd; LOG_GET_IPM_ENTER(p_ipm); CHECK_TSKCTX_UNL(); t_lock_cpu(); p_ipm->core = cpu_get_ipm(); /* MIPS3コアの充哈みマスク徊救 */ icu_get_ipm(&(p_ipm->icu)); /* 嘲婶充哈みコントロ〖ラの充哈みマスク の徊救 */ ercd = E_OK; t_unlock_cpu(); exit: LOG_GET_IPM_LEAVE(ercd, *p_ipm); return(ercd);}#endif /* SUPPORT_CHG_IPM *//*============================================================================*//* 鼎奶ドキュメントにはない、迫极の婶尸 *//* * ハンドラが判峡されていない充哈みˇ毋嘲が券栏すると钙び叫される */void cpu_experr( EXCSTACK *sp, UW SR, UW CR) { syslog_0(LOG_EMERG, "Interrupt/Exception error occurs."); syslog_1(LOG_EMERG, "PC(EPC;CP0_r14) = 0x%08x", sp->CP0_EPC); syslog_2(LOG_EMERG, "SR(Status;CP0_r12) = 0x%08x CR(Cause;CP0_r13) = 0x%08x", SR, CR); /* SRでも、sp->CP0_Statusでも材 */ syslog_3(LOG_EMERG, "at(r1 ) = %08x v0(r2 ) = %08x v1(r3 ) = %08x", sp->at, sp->v0, sp->v1); syslog_4(LOG_EMERG, "a0(r4 ) = %08x a1(r5 ) = %08x a2(r6 ) = %08x a3(r7 ) = %08x", sp->a0, sp->a1, sp->a2, sp->a3); syslog_4(LOG_EMERG, "t0(r8 ) = %08x t1(r9 ) = %08x t2(r10) = %08x t3(r11) = %08x", sp->t0, sp->t1, sp->t2, sp->t3); syslog_4(LOG_EMERG, "t4(r12) = %08x t5(r13) = %08x t6(r14) = %08x t7(r15) = %08x", sp->t4, sp->t5, sp->t6, sp->t7); syslog_2(LOG_EMERG, "t8(r24) = %08x t9(r25) = %08x", sp->t8, sp->t9); syslog_2(LOG_EMERG, "HI = %08x LO = %08x", sp->hi, sp->lo); syslog_4(LOG_EMERG, "gp(r28) = %08x sp(r29) = %08x fp(r30) = %08x ra(r31) = %08x", sp->gp, sp->sp, sp->fp, sp->ra); while(1);}/* * メモリブロック拎侯ライブラリ∈リンクスクリプト柒で蝗脱∷ * (ItIsからの萎脱) * * 簇眶の慌屯は·ANSI C ライブラリの慌屯と票じˉ筛洁ライブラリのものを * 蝗った数が跟唯が紊い材墙拉があるˉ */VP _dummy_memcpy(VP dest, VP src, UINT len) { VB *d = dest; VB *s = src; while (len-- > 0) { *d++ = *s++; } return(dest);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -