📄 sys_support.s
字号:
/* * 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プロジェクトは·塑ソフトウェアに簇して·その努脱材墙拉も * 崔めて·いかなる瘦沮も乖わないˉまた·塑ソフトウェアの网脱により木 * 儡弄または粗儡弄に栏じたいかなる禄巢に簇しても·その勒扦を砷わないˉ */#define _MACRO_ONLY#include "jsp_kernel.h"#include "offset.h" /* INT_TABLE_intmaskのために涩妥 */ .set noreorder .align 2/* * タ〖ゲットハ〖ドウェア巴赂する介袋步借妄 */#ifndef GDB_STUB .section .reset .global hardware_init_hookhardware_init_hook: /* * キャッシュの介袋步 */ mtc0 zero, TagLo mtc0 zero, TagHi li t0, 0x80003fe0 li t1, 0x80000000loop_I_cache_clear: cache Index_Store_Tag_I, +0(t0) cache Index_Store_Tag_I, +1(t0) bne t0, t1, loop_I_cache_clear addiu t0, t0, -I_CACHE_LINE_SIZE li t0, 0x80003fe0 li t1, 0x80000000loop_D_cache_clear: cache Index_Store_Tag_D, +0(t0) cache Index_Store_Tag_D, +1(t0) bne t0, t1, loop_D_cache_clear addiu t0, t0, -D_CACHE_LINE_SIZE /* * TLBの介袋步 */ mtc0 zero, PageMask mtc0 zero, EntryLo0 mtc0 zero, EntryLo1 li t0, TMAX_TLB li t1, 0xA8000000 /* kseg1 の面のDRAMの疥を蝗脱 */loop_TLB_clear: mtc0 t0, Index mtc0 t1, EntryHi addiu t0, t0, -1 addiu t1, t1, TLB_VPN2 /* 1ペ〖ジが4kバイトで、2ペ〖ジ尸を マッピングするため */ tlbwi bgez t0, loop_TLB_clear nop /* * ボ〖ドの介袋步 */ /* SDRAM コントロ〖ラの介袋步 */ li t0, 0x00 sb t0, 0xb8006000 /* SRAMC_SWAIT */ li t0, 0x02 sb t0, 0xb8005000 /* DRAMC_RCD */ li t0, 0x02 sb t0, 0xb8005010 /* DRAMC_RP */ li t0, 0x05 sb t0, 0xb8005020 /* DRAMC_RC */ li t0, 0x06 sb t0, 0xb8005030 /* DRAMC_RRC */ li t0, 0x04 sb t0, 0xb8005040 /* DRAMC_RAS */ li t0, 0x02 sb t0, 0xb8005050 /* DRAMC_LAT */ li t0, 0x02 sb t0, 0xb8005060 /* DRAMC_RSC */ li t0, 0x01 sb t0, 0xb8005070 /* DRAMC_AP */ li t0, 0x00 sb t0, 0xb8004000 /* DRAM_INIT */ /* DRAMリフレッシュ脱タイマの介袋步 */ li t0, 0xb4 sb t0, 0xb9005030 /* PCNTL */ li t0, 0x1f sb t0, 0xb9005020 /* PCNT2 */ li t0, 0x00 sb t0, 0xb9005020 /* PCNT2 */ /* SRAMの介袋步 */ /* SRAMの链挝拌に滦して、办刨今き哈みを乖う借妄が涩妥 */ la t0, 0xa0000000 li t1, 0x00100000-4loop_sram_clear: add t2, t1, t0 sw zero, (t2) bgez t1, loop_sram_clear addiu t1, t1, -4 /* 充り哈みコントロ〖ラの肋年 */ sb zero, 0xb9000000 /* PIC_INT0M〃链充哈みのマスク */ sb zero, 0xb9000010 /* PIC_INT1M〃链充哈みのマスク */ sb zero, 0xb9000020 /* PIC_INTR 〃充哈み妥滇のクリア */ li t0, 0x01 /* 充哈み俐は室数のみ蝗う */ sb t0, 0xb9000030 /* PIC_INTEN */ /*----------*/ j ra /* 钙び叫し傅へリタ〖ン */ nop#endif /* GDB_STUB *//*============================================================================*//* 充哈み借妄に簇する、充哈み妥傍の冉们尸呆借妄のシステム巴赂婶 */ .align 2 .section .text .global proc_interrupt_sys .global int_table /* 充哈みハンドラの导击ベクタテ〖ブル cpu_config.h, cpu_config.cで年盗 */ /* 钙び叫されたとき、 */ /* a1にステ〖タスレジスタ */ /* a2に付傍レジスタ */ /* の猛が掐っている */proc_interrupt_sys: and t2, a2, a1 /* 充哈み妥滇ビットにマスクをかける */ andi t3, t2, Cause_IP0 /* IP0ビット艰り叫し */ bne t3, zero, proc_IP0 andi t4, t2, Cause_IP1 /* IP1ビット艰り叫し */ bne t4, zero, proc_IP1 andi t5, t2, Cause_IP2 /* IP2ビット艰り叫し */ bne t5, zero, proc_IP2 andi t6, t2, Cause_IP3 /* IP3ビット艰り叫し */ bne t6, zero, proc_IP3 andi t7, t2, Cause_IP4 /* IP4ビット艰り叫し */ bne t7, zero, proc_IP4 andi t8, t2, Cause_IP5 /* IP5ビット艰り叫し */ bne t8, zero, proc_IP5 andi t9, t2, Cause_IP6 /* IP6ビット艰り叫し */ bne t9, zero, proc_IP6 nop /* なんらかの付傍で尸呆できない眷圭 */ j join_interrupt_and_exception nop/* MIPS3コアレベルで尸呆したレベルでの借妄 *//* 充哈み妥傍戎规をt0に掐れて *//* 充哈み妥滇クリアのための年眶をt1に掐れて *//* set_ICU_IPMへ若ぶ */proc_IP7: /* 充哈み妥傍IP7∈タイマ∷の眷圭 */ xori t1, zero, Cause_IP7 j set_ICU_IPM ori t0, zero, INTNO_IP7proc_IP0: /* 充哈み妥傍IP0∈ソフトウェア充哈み0∷の眷圭 */ xori t1, zero, Cause_IP0 j set_ICU_IPM ori t0, zero, INTNO_IP0proc_IP1: /* 充哈み妥傍IP1∈ソフトウェア充哈み1∷の眷圭 */ xori t1, zero, Cause_IP1 j set_ICU_IPM ori t0, zero, INTNO_IP1proc_IP2: /* 充哈み妥傍IP2の眷圭 */ /* 充哈みコントロ〖ラ巴赂の年盗があれば、そちらを悸乖する */#ifdef PROC_INT0 PROC_INT0 /* システム巴赂婶で年盗するマクロ */ xori t1, zero, Cause_IP2 j set_ICU_IPM nop#else /* PROC_INT0 */ xori t1, zero, Cause_IP2 j set_ICU_IPM ori t0, zero, INTNO_IP2#endif /* PROC_INT0 */proc_IP3: /* 充哈み妥傍IP3の眷圭 */ /* 充哈みコントロ〖ラ巴赂の年盗があれば、そちらを悸乖する */#ifdef PROC_INT1 PROC_INT1 /* システム巴赂婶で年盗するマクロ */ xori t1, zero, Cause_IP3 j set_ICU_IPM nop#else /* PROC_INT1 */ xori t1, zero, Cause_IP3 j set_ICU_IPM ori t0, zero, INTNO_IP3#endif /* PROC_INT1 */proc_IP4: /* 充哈み妥傍IP4の眷圭 */ /* 充哈みコントロ〖ラ巴赂の年盗があれば、そちらを悸乖する */#ifdef PROC_INT2 PROC_INT2 /* システム巴赂婶で年盗するマクロ */ xori t1, zero, Cause_IP4 j set_ICU_IPM nop#else /* PROC_INT2 */ xori t1, zero, Cause_IP4 j set_ICU_IPM ori t0, zero, INTNO_IP4#endif /* PROC_INT2 */proc_IP5: /* 充哈み妥傍IP5の眷圭 */ /* 充哈みコントロ〖ラ巴赂の年盗があれば、そちらを悸乖する */#ifdef PROC_INT3 PROC_INT3 /* システム巴赂婶で年盗するマクロ */ xori t1, zero, Cause_IP5 j set_ICU_IPM nop#else /* PROC_INT3 */ xori t1, zero, Cause_IP5 j set_ICU_IPM ori t0, zero, INTNO_IP5#endif /* PROC_INT3 */proc_IP6: /* 充哈み妥傍IP6の眷圭 */ /* 充哈みコントロ〖ラ巴赂の年盗があれば、そちらを悸乖する */#ifdef PROC_INT4 PROC_INT4 /* システム巴赂婶で年盗するマクロ */ xori t1, zero, Cause_IP6#else /* PROC_INT4 */ xori t1, zero, Cause_IP6 ori t0, zero, INTNO_IP6#endif /* PROC_INT4 *//* 充哈みコントロ〖ラ巴赂のマスク肋年 */set_ICU_IPM:#ifdef SET_ICU_IPM SET_ICU_IPM /* 充哈みマスクを肋年するマクロ */ /* 悸刘を乖うときには、布淡にてt0、t1は网脱するの */ /* で撬蝉しないように、庙罢しなければならない。 */#endif /* SET_ICU_IPM *//* * 付傍レジスタIPビットに瘦积されている称硷充哈みの充哈み妥滇をクリアする。 * t1には、充哈み妥滇ビットを瓤啪したものが掐っている。 */ mfc0 t8, Cause and t8, t8, t1 mtc0 t8, Cause/* ステ〖タスレジスタのマスク肋年とC咐胳ル〖チン钙び叫し *//* t0に充哈み妥傍戎规が肋年された觉轮でここに丸る */ la t3, int_table /* 导击ベクタアドレス */ sll t4, t0, 3 /* 充哈み妥傍戎规を8擒 TNT_TABLE房は、 ハンドラのアドレス(4バイト) ≤MIPS3コアの充哈みマスク(4バイト) の、圭纷8バイト。 */ add t5, t3, t4 /* ベクタアドレスを换叫 */ lw t6, INT_TABLE_intmask(t5) /* IPM(充哈み钓材ビット)粕み叫し。 充哈みマスク笆嘲の猛は、 IEビットはセット EXLビットはリセット 觉轮になっている。*/ lw t7, (t5) /* C咐胳ル〖チン黎片アドレス粕み叫し */ jalr ra, t7 /* C咐胳ル〖チン钙び叫し */ mtc0 t6, Status /* 充哈み钓材〃ステ〖タスレジスタのマスク肋年*/ mfc0 t0, Status ori t0, t0, SR_EXL /* 充哈み敦贿〃IEビットの猛は瘦积しなければなら ないのでEXLビットを脱いる。*/ mtc0 t0, Status /* CP0ハザ〖ドのための箕粗苍ぎ */#ifdef NOP_FOR_CP0_HAZARD NOP_FOR_CP0_HAZARD#endif /* NOP_FOR_CP0_HAZARD */ j join_interrupt_and_exception nop
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -