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

📄 cpu_support.s

📁 嵌入式系统开发 TOPPERS and JSP Kernel Release 1.3 TOPPERS = Toyohashi Open Platform for Embedded Real-Tim
💻 S
字号:
/* *  TOPPERS/JSP Kernel *      Toyohashi Open Platform for Embedded Real-Time Systems/ *      Just Standard Profile Kernel *  *  Copyright (C) 2000,2001 by Embedded and Real-Time Systems Laboratory *                              Toyohashi Univ. of Technology, JAPAN *  Copyright (C) 2001 by Industrial Technology Institute, *                              Miyagi Prefectural Government, JAPAN *  Copyright (C) 2001,2002 by Dep. of Computer Science and Engineering *                   Tomakomai National College of Technology, JAPAN *  *  惧淡螟侯涪荚は·Free Software Foundation によって给山されている  *  GNU General Public License の Version 2 に淡揭されている掘凤か·笆 *  布の(1)×(4)の掘凤を塔たす眷圭に嘎り·塑ソフトウェア∈塑ソフトウェ *  アを猖恃したものを崔むˉ笆布票じ∷を蝗脱ˇ剩澜ˇ猖恃ˇ浩芹邵∈笆布· *  网脱と钙ぶ∷することを痰浸で钓满するˉ *  (1) 塑ソフトウェアをソ〖スコ〖ドの妨で网脱する眷圭には·惧淡の螟侯 *      涪山绩·この网脱掘凤および布淡の痰瘦沮惮年が·そのままの妨でソ〖 *      スコ〖ド面に崔まれていることˉ *  (2) 塑ソフトウェアを浩网脱材墙なバイナリコ〖ド∈リロケ〖タブルオブ *      ジェクトファイルやライブラリなど∷の妨で网脱する眷圭には·网脱 *      に燃うドキュメント∈网脱荚マニュアルなど∷に·惧淡の螟侯涪山绩· *      この网脱掘凤および布淡の痰瘦沮惮年を非很することˉ *  (3) 塑ソフトウェアを浩网脱稍材墙なバイナリコ〖ドの妨または怠达に寥 *      み哈んだ妨で网脱する眷圭には·肌のいずれかの掘凤を塔たすことˉ *    (a) 网脱に燃うドキュメント∈网脱荚マニュアルなど∷に·惧淡の螟侯 *        涪山绩·この网脱掘凤および布淡の痰瘦沮惮年を非很することˉ *    (b) 网脱の妨轮を·侍に年める数恕によって·惧淡螟侯涪荚に鼠桂する *        ことˉ *  (4) 塑ソフトウェアの网脱により木儡弄または粗儡弄に栏じるいかなる禄 *      巢からも·惧淡螟侯涪荚を倘勒することˉ *  *  塑ソフトウェアは·痰瘦沮で捏丁されているものであるˉ惧淡螟侯涪荚は· *  塑ソフトウェアに簇して·その努脱材墙拉も崔めて·いかなる瘦沮も乖わ *  ないˉまた·塑ソフトウェアの网脱により木儡弄または粗儡弄に栏じたい *  かなる禄巢に簇しても·その勒扦を砷わないˉ *  *  @(#) $Id: cpu_support.S,v 1.5 2002/04/14 11:36:50 hiro Exp $ */#define _MACRO_ONLY#include "jsp_kernel.h"#include "offset.h"#include "sys_config.h"#include "cpu_config.h"	.h8300h	.text	.align 2/* *  タスクディスパッチャ * *     _dispatch は、充哈み嘲ネストカウンタ = 0,充哈み敦贿觉轮 *    で钙び叫さなければならないˉ_exit_and_dispatch も·充哈みネスト *    カウンタ = 0ˇ充哈み敦贿觉轮で钙び叫すのが付搂であるが·カ〖ネル *    弹瓢箕に滦炳するため·充哈みネストカウンタ = 1で钙び叫した眷圭に *    も滦炳しているˉ */	.global _dispatch_dispatch:	push.l	er6			/*  er2×6を瘦赂			*/	push.l	er5	push.l	er4	push.l	er3	push.l	er2	mov.l	@_runtsk, er0		/* er0 <- runtsk		*/	mov.l	sp, @(TCB_sp, er0)	/* タスクスタックポインタを瘦赂	*/	mov.l	#dispatch_r, er1	/* 悸乖浩倡戎孟			*/	mov.l	er1, @(TCB_pc, er0)	bra     dispatcher_1dispatch_r:	pop.l	er2			/*  er2×6を牲傅			*/	pop.l	er3	pop.l	er4	pop.l	er5	pop.l	er6	mov.l	@_runtsk, er0	mov.b	@(TCB_enatex, er0), r1l	/* runtsk->enatex のチェック	*/	btst	#TCB_enatex_bit, r1l	beq	dispatch_r_1	mov.l	@(TCB_texptn, er0), er1	/* runtsk->texptn のチェック	*/	beq	dispatch_r_1	jmp	@_call_texrtndispatch_r_1:	rts	.global	_exit_and_dispatch_exit_and_dispatch:	orc	#H8INT_DIS_ALL, ccr	/* 充り哈み敦贿			*/	sub.l	er0, er0		/* 充哈みネストカウンタをクリア	*/	mov.l	er0, @_intnestdispatcher_1:	/*	 * ここには充り哈み敦贿で丸ること	 */	mov.l	@_schedtsk, er0		/* er0 <- schedtsk		*/	or.l	er0, er0		/* schedtsk があるか々		*/	beq	dispatcher_2		/* 痰ければジャンプ		*/	mov.l	er0, @_runtsk		/* schedtskをruntskに		*/	mov.l	@(TCB_sp, er0), sp	mov.l	@(TCB_pc, er0), er0	/* 悸乖浩倡戎孟を牲耽		*/	jmp	@er0dispatcher_2:	/*	 *  ここで充哈みモ〖ドに磊り垂えるのは·ここで券栏する充哈み借妄	 *  にどのスタックを蝗うかという啼玛の豺疯と·充哈みハンドラ柒で	 *  のタスクディスパッチの松贿という企つの罢蹋があるˉ	 */	    			/* スタックを充り哈みスタックに磊仑え	*/	mov.l	#STACKTOP, sp				/*  充哈みネストカウンタを1にする		*/	sub.l	er0, er0	inc.l	#1, er0	mov.l	er0, @_intnest	andc	#H8INT_ENA_ALL, ccr	/* 充り哈み钓材			*/	sleep				/* 充哈み略ち			*/	orc	#H8INT_DIS_ALL, ccr	/* 充り哈み敦贿			*/	sub.l	er0, er0		/* 充哈みネストカウンタをクリア	*/	mov.l	er0, @_intnest	bra	dispatcher_1/* *  充哈みハンドラ叫庚借妄 * * 提り黎がタスクでreqflgがセットされている眷圭のみここにくる。 * 充哈みネストカウンタ = 0,充哈み敦贿觉轮,スクラッチレジスタを * 瘦赂した觉轮で钙び叫すこと。 * */	.globl ret_intret_int:	mov.l	@_enadsp, er0		/* enadspのチェック		*/	or.l	er0, er0	/* ディスパッチ敦贿ならret_int_rへ	*/	beq	ret_int_r	mov.l	@_runtsk, er0		/* er0 <- runtsk		*/	mov.l	@_schedtsk, er1		/* er1 <- schedtsk		*/	cmp.l	er0, er1		/* runtsk と schedtsk を孺秤	*/	beq	ret_int_r		/* 票じならret_int_rへ		*/					/* タスクスタックポインタを瘦赂	*/	mov.l	sp, @(TCB_sp, e0)	mov.l	#ret_int_r, er1  	/* 悸乖浩倡戎孟			*/	mov.l	er1, @(TCB_pc, er0)	bra	dispatcher_1/* *  充哈みの叫庚でディスパッチャからここに提ってくる */ret_int_r:	mov.l	@_runtsk, er0	mov.b	@(TCB_enatex, er0), r1l	/* runtsk->enatex のチェック	*/	btst	#TCB_enatex_bit, r1l	beq	ret_int_r_1	mov.l	@(TCB_texptn, er0), er1	/* runtsk->texptn のチェック	*/	beq	ret_int_r_1	jsr	@_call_texrtn		/* タスク毋嘲借妄ル〖チン弹瓢	*/ret_int_r_1:	pop.l	er6			/* レジスタを牲耽		*/	pop.l	er5	pop.l	er4	pop.l	er3	pop.l	er2	pop.l	er1	pop.l	er0	rte/* *  no_reg_exception() *  CPU毋嘲として判峡されていない毋嘲が券栏すると钙び叫される。 *  毋嘲が券栏した箕爬のPC,ER0×7を叫蜗してカ〖ネル *  を匿贿する。 */	.globl _no_reg_exception_no_reg_exception:	push.l	er6		/*  ER0×6を瘦赂				*/	push.l	er5	push.l	er4	push.l	er3	push.l	er2	push.l	er1	push.l	er0	mov.l	sp, er0		/*  苞眶肋年				*/				/*  SP は -32 で、券栏箕爬の猛		*/	jsr	@_cpu_experr	/*  cpu_experr()の钙び叫し		*//* *  タスク弹瓢借妄 */	.globl _activate_r_activate_r:	mov.l	#_ext_tsk, er2	push.l	er2	mov.l	@_runtsk, er2	mov.l	@(TCB_tinib, er2), er2	mov.l	@(TINIB_task, er2), er1	/*  タスク弹瓢戎孟		*/					/*  橙磨攫鼠∈タスクへの苞眶∷	*/	mov.l	@(TINIB_exinf, er2), er0	andc	#H8INT_ENA_ALL, ccr	/*  充哈み钓材			*/	jmp	@er1/* *  ハ〖ドウェア充り哈み钓材 *//* * タイマ -- 部もしない。 */	.globl _timer_handler_enable_int_timer_handler_enable_int:	rts/* * SCI -- 充哈み庭黎レジスタの庭黎刨を惧げる。 */#if NUM_PORT == 1	.globl _serial_in_handler_enable_int	.globl _serial_out_handler_enable_int_serial_in_handler_enable_int:_serial_out_handler_enable_int:	mov.b	@SYSTEM_SCI_IPR, r0l	bset	#SYSTEM_SCI_IP_BIT, r0l	mov.b	r0l, @SYSTEM_SCI_IPR	rts#else	/* of #if NUM_PORT == 1 */	.globl _serial_in_handler_enable_int	.globl _serial_out_handler_enable_int_serial_in_handler_enable_int:_serial_out_handler_enable_int:	mov.b	@USER_SCI_IPR, r0l	bset	#USER_SCI_IP_BIT, r0l	mov.b	r0l, @USER_SCI_IPR	mov.b	@SYSTEM_SCI_IPR, r0l	bset	#SYSTEM_SCI_IP_BIT, r0l	mov.b	r0l, @SYSTEM_SCI_IPR	rts#endif	/* of #if NUM_PORT == 1 *//* *  ハ〖ドウェア充り哈み敦贿 *//* *  タイマ -- Compare Match フラグをクリア〖する。 */	.globl _timer_handler_disable_int_timer_handler_disable_int:	mov.l	#SYSTEM_TIMER_IFR, er0	bclr	#SYSTEM_TIMER_IF_BIT, @er0	rts/* * SCI -- 充哈み庭黎レジスタの庭黎刨を布げる。 */#if NUM_PORT == 1	.globl _serial_in_handler_disable_int	.globl _serial_out_handler_disable_int_serial_in_handler_disable_int:_serial_out_handler_disable_int:	mov.b	@SYSTEM_SCI_IPR, r0l	bclr	#SYSTEM_SCI_IP_BIT, r0l	mov.b	r0l, @SYSTEM_SCI_IPR	rts#else	/* of #if NUM_PORT == 1 */	.globl _serial_in_handler_disable_int	.globl _serial_out_handler_disable_int_serial_in_handler_disable_int:_serial_out_handler_disable_int:	mov.b	@USER_SCI_IPR, r0l	bclr	#USER_SCI_IP_BIT, r0l	mov.b	r0l, @USER_SCI_IPR	mov.b	@SYSTEM_SCI_IPR, r0l	bclr	#SYSTEM_SCI_IP_BIT, r0l	mov.b	r0l, @SYSTEM_SCI_IPR	rts#endif	/* of #if NUM_PORT == 1 */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -