|
|
cpu_config.c説明を見る。00001 /* 00002 * TOPPERS/JSP Kernel 00003 * Toyohashi Open Platform for Embedded Real-Time Systems/ 00004 * Just Standard Profile Kernel 00005 * 00006 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory 00007 * Toyohashi Univ. of Technology, JAPAN 00008 * Copyright (C) 2005 by Embedded and Real-Time Systems Laboratory 00009 * Graduate School of Information Science, Nagoya Univ., JAPAN 00010 * 00011 * 上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation 00012 * によって公表されている GNU General Public License の Version 2 に記 00013 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア 00014 * を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下, 00015 * 利用と呼ぶ)することを無償で許諾する. 00016 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 00017 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 00018 * スコード中に含まれていること. 00019 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 00020 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 00021 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 00022 * の無保証規定を掲載すること. 00023 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 00024 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 00025 * と. 00026 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 00027 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 00028 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 00029 * 報告すること. 00030 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 00031 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 00032 * 00033 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 00034 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 00035 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 00036 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 00037 * 00038 * @(#) $Id: cpu_config.c,v 1.10 2005/11/12 14:57:17 hiro Exp $ 00039 */ 00040 00041 /* 00042 * プロセッサ依存モジュール(M68040用) 00043 */ 00044 00045 #include "jsp_kernel.h" 00046 #include "check.h" 00047 #include "task.h" 00048 00049 /* 00050 * タスクコンテキストでの割込みマスク 00051 */ 00052 #ifdef SUPPORT_CHG_IPM 00053 UH task_intmask; 00054 #endif /* SUPPORT_CHG_IPM */ 00055 00056 /* 00057 * 非タスクコンテキストでの割込みマスク 00058 */ 00059 UH int_intmask; 00060 00061 /* 00062 * プロセッサ依存の初期化 00063 */ 00064 void 00065 cpu_initialize() 00066 { 00067 /* 00068 * タスクコンテキストでの割込みマスクの初期化 00069 */ 00070 #ifdef SUPPORT_CHG_IPM 00071 task_intmask = 0x0000; 00072 #endif /* SUPPORT_CHG_IPM */ 00073 00074 /* 00075 * 例外ベクタテーブルの初期化 00076 */ 00077 #ifdef EXCVT_KERNEL 00078 memcpy(EXCVT_KERNEL, EXCVT_ORIG, EXCVT_LEN); 00079 set_vbr(EXCVT_KERNEL); 00080 #endif /* EXCVT_KERNEL */ 00081 } 00082 00083 /* 00084 * プロセッサ依存の終了処理 00085 */ 00086 void 00087 cpu_terminate() 00088 { 00089 #ifdef EXCVT_KERNEL 00090 set_vbr(EXCVT_ORIG); 00091 #endif /* EXCVT_KERNEL */ 00092 } 00093 00094 #ifdef SUPPORT_CHG_IPM 00095 00096 /* 00097 * 割込みマスクの変更 00098 * 00099 * chg_ipm を使って IPM を 7(NMI 以外のすべての割込みを禁止)に変更 00100 * することはできない.NMI 以外のすべての割込みを禁止したい場合には, 00101 * loc_cpu によりCPUロック状態にすればよい. 00102 * IPM が 0 以外の時にも,タスクディスパッチは保留されない.IPM は, 00103 * タスクディスパッチによって,新しく実行状態になったタスクへ引き継が 00104 * れる.そのため,タスクが実行中に,別のタスクによって IPM が変更さ 00105 * れる場合がある.JSPカーネルでは,IPM の変更はタスク例外処理ルーチ 00106 * ンによっても起こるので,別のタスクによって IPM が変更されることに 00107 * よって,扱いが難しくなる状況は少ないと思われる.IPM の値によってタ 00108 * スクディスパッチを禁止したい場合には,dis_dsp を併用すればよい. 00109 */ 00110 SYSCALL ER 00111 chg_ipm(IPM ipm) 00112 { 00113 ER ercd; 00114 00115 LOG_CHG_IPM_ENTER(ipm); 00116 CHECK_TSKCTX_UNL(); 00117 CHECK_PAR(0 <= ipm && ipm <= 6); 00118 00119 t_lock_cpu(); 00120 task_intmask = (ipm << 8); 00121 ercd = E_OK; 00122 t_unlock_cpu(); 00123 00124 exit: 00125 LOG_CHG_IPM_LEAVE(ercd); 00126 return(ercd); 00127 } 00128 00129 /* 00130 * 割込みマスクの参照 00131 */ 00132 SYSCALL ER 00133 get_ipm(IPM *p_ipm) 00134 { 00135 ER ercd; 00136 00137 LOG_GET_IPM_ENTER(p_ipm); 00138 CHECK_TSKCTX_UNL(); 00139 00140 t_lock_cpu(); 00141 *p_ipm = (task_intmask >> 8); 00142 ercd = E_OK; 00143 t_unlock_cpu(); 00144 00145 exit: 00146 LOG_GET_IPM_LEAVE(ercd, *p_ipm); 00147 return(ercd); 00148 } 00149 00150 #endif /* SUPPORT_CHG_IPM */ 00151 Copyright © 2006 by TAKAGI Nobuhisa. Copyright © 2006 by Kijineko Inc.. このページは Mon Dec 18 17:18:38 2006 に Doxygen によって生成されました。 データ入力からプログラム開発まで!様々なスキルを持ったメンバーが登録しています【@SOHO】 |