⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sys_support.s

📁 符合日本著名的ITRON规范的开源操作系统。 TOPPERS/JSP内核就是TOPPERS工程按μITRON4.0研发的第一个 软件
💻 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 + -