00001 /* 00002 * TOPPERS/ASP Kernel 00003 * Toyohashi Open Platform for Embedded Real-Time Systems/ 00004 * Advanced 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-2008 by Embedded and Real-Time Systems Laboratory 00009 * Graduate School of Information Science, Nagoya Univ., JAPAN 00010 * 00011 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ 00012 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 00013 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 00014 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 00015 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 00016 * スコード中に含まれていること. 00017 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 00018 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 00019 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 00020 * の無保証規定を掲載すること. 00021 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 00022 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 00023 * と. 00024 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 00025 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 00026 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 00027 * 報告すること. 00028 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 00029 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 00030 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 00031 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 00032 * 免責すること. 00033 * 00034 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 00035 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 00036 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 00037 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 00038 * の責任を負わない. 00039 * 00040 * @(#) $Id: prc_config.c 759 2008-03-07 23:01:20Z hiro $ 00041 */ 00042 00043 /* 00044 * プロセッサ依存モジュール(M68040用) 00045 */ 00046 00047 #include "kernel_impl.h" 00048 #include "check.h" 00049 #include "task.h" 00050 00051 /* 00052 * CPUロックフラグ実現のための変数 00053 */ 00054 volatile bool_t lock_flag; /* CPUロックフラグの値を保持する変数 */ 00055 volatile uint16_t saved_iipm; /* 割込み優先度マスクを保存する変数 */ 00056 00057 /* 00058 * プロセッサ依存の初期化 00059 */ 00060 void 00061 prc_initialize(void) 00062 { 00063 /* 00064 * CPUロックフラグ実現のための変数の初期化 00065 */ 00066 lock_flag = true; 00067 saved_iipm = IIPM_ENAALL; 00068 00069 /* 00070 * 例外ベクタテーブルの初期化 00071 */ 00072 #ifdef EXCVT_KERNEL 00073 memcpy(EXCVT_KERNEL, EXCVT_ORIG, EXCVT_LEN); 00074 set_vbr(EXCVT_KERNEL); 00075 #endif /* EXCVT_KERNEL */ 00076 } 00077 00078 /* 00079 * プロセッサ依存の終了処理 00080 */ 00081 void 00082 prc_terminate(void) 00083 { 00084 #ifdef EXCVT_KERNEL 00085 set_vbr(EXCVT_ORIG); 00086 #endif /* EXCVT_KERNEL */ 00087 } 00088 00089 /* 00090 * CPU例外の発生状況のログ出力 00091 * 00092 * CPU例外ハンドラの中から,CPU例外情報ポインタ(p_excinf)を引数とし 00093 * て呼び出すことで,CPU例外の発生状況をシステムログに出力する. 00094 */ 00095 #ifdef SUPPORT_XLOG_SYS 00096 00097 void 00098 xlog_sys(void *p_excinf) 00099 { 00100 char *excsp = (char *) p_excinf; 00101 uint_t format; 00102 00103 syslog_0(LOG_ERROR, "CPU Exception Information:"); 00104 syslog_4(LOG_ERROR, "SR = %04x (M = %d, S = %d, IPM = %d)", 00105 *((uint16_t *) excsp), 00106 (*((uint16_t *) excsp) & 0x1000U) >> 12, 00107 (*((uint16_t *) excsp) & 0x2000U) >> 13, 00108 (*((uint16_t *) excsp) & 0x0700U) >> 8); 00109 syslog_1(LOG_ERROR, "PC = %08x", *((uint32_t *)(excsp + 2))); 00110 format = (*((uint16_t *)(excsp + 6)) & 0xf000U) >> 12; 00111 syslog_2(LOG_ERROR, "Format = %d, Vector Offset = %03x", 00112 format, (*((uint16_t *)(excsp + 6)) & 0x0fffU)); 00113 if (format >= 2U) { 00114 syslog_1(LOG_ERROR, "ADR = %08x", *((uint32_t *)(excsp + 8))); 00115 } 00116 } 00117 00118 #endif /* SUPPORT_XLOG_SYS */
Copyright © 2008 by Kijineko Inc.