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

📄 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-2002 by Embedded and Real-Time Systems Laboratory *                              Toyohashi Univ. 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.4 2002/04/10 11:17:16 takayuki Exp $ *//* *	プロセッサ巴赂モジュ〖ル アセンブリ咐胳婶∈V850/V850E脱∷ */#define	_MACRO_ONLY#include "v850asm.inc"#include "jsp_kernel.h"#include "offset.h"/* *  タスクディスパッチャ */Function	__kernel_dispatch		/*		 * コンテキストの锣闰 		 *  30 20 21 22 23 24 25 26 27 28 29 31		 */	Push	ep		/* 瘦赂滦据レジスタの瘦赂 */	addi	-44, sp, sp	mov		sp, ep	sst.w	r20, 40[ep]	sst.w	r21, 36[ep]	sst.w	r22, 32[ep]	sst.w	r23, 28[ep]	sst.w	r24, 24[ep]	sst.w	r25, 20[ep]	sst.w	r26, 16[ep]	sst.w	r27, 12[ep]	sst.w	r28, 8[ep]	sst.w	r29, 4[ep]	sst.w	r31, 0[ep]			/* スタックと肌の弹瓢戎孟を瘦赂 */	Lea		__kernel_runtsk, ep	sld.w	0[ep], ep	sst.w	sp, TCB_sp[ep]	Lea		dispatch_r, r10	sst.w	r10, TCB_pc[ep]	stsr	psw, r10	sst.w	r10, TCB_psw[ep]		/*		 * 肌のタスクの洁洒 __kernel_exit_and_dispatch		 *		 *  泼にexit盖铜の借妄はしてないので 动扩ディスパッチにも蝗ってる		 */Label __kernel_exit_and_dispatch		/* 充哈みスタックの锣闰 */	cmp		r2, r0	bnz		1f	mov		r3, r2		/* 肌に弹瓢すべきタスクの粕み叫し */1:	Lea		__kernel_schedtsk, r10	ld.w	0[r10], r10	cmp		r10,r0	bne		1f		/* 肌に弹瓢すべきタスクがない */	mov		r2, r3	Lea		0x07802000, r6	not		r0, r7	st.b	r7, 0[r6]	ei	nop	di	jr		1b1:		/* runtsk = schedtsk; */	Lea		__kernel_runtsk, r11	st.w	r10, 0[r11]	mov		r10, r6	Lea		__kernel_tcb_table, r7	sub		r7, r6	shr		5, r6	Lea		0x07802000, r7	st.b	r6, 0[r7]		/* スタックと肌の弹瓢戎孟を牲耽 */	mov		r10, ep	sld.w	TCB_pc[ep], r31	sld.w	TCB_sp[ep], r3	sld.w	TCB_psw[ep], r10	ldsr	r10, psw	jmp		r31		/* ディスパッチャの牲耽ル〖チン */Label dispatch_r		/* タスク毋嘲 */	jarl	__kernel_calltex, r31			/* 锣闰したコンテキストの牲耽 */	mov		sp, ep	sld.w	 40[ep],r20	sld.w	 36[ep],r21	sld.w	 32[ep],r22	sld.w	 28[ep],r23	sld.w	 24[ep],r24	sld.w	 20[ep],r25	sld.w	 16[ep],r26	sld.w	 12[ep],r27	sld.w	 8[ep],r28	sld.w	 4[ep],r29	sld.w	 0[ep],r31	addi	44, sp, sp	Pop		ep	jmp		r31/* *  タスク弹瓢箕借妄 */Function __kernel_activate_r	Lea		__kernel_runtsk,	ep	ld.w	0[ep], ep	ld.w	TCB_tinib[ep], ep	ld.w	TINIB_exinf[ep], r6	ld.w	TINIB_task[ep], r10	Lea		_ext_tsk, r31		ei	jmp		r10/* *  充哈みハンドラ】CPU毋嘲ハンドラ叫庚借妄 * *  ret_int は充哈みモ〖ドˇ充哈み敦贿觉轮で·ret_exc はマスタモ〖ドˇ *  充哈み敦贿觉轮で钙び叫さなければならないˉまた ret_exc は·スクラッ *  チレジスタを瘦赂した觉轮で钙び叫すことˉ */.extern _InterruptHandlerEntry.extern __kernel_runtsk.extern __kernel_calltex/* * 充哈みハンドラ * *  ハンドラ弹瓢涟に手笛猛呈羌レジスタとスクラッチレジスタを锣闰するˉ *  充哈みハンドラ柒でタスクスイッチが券栏したときのみ链てのレジスタ *  を锣闰するˉ * * それぞれ觉斗に炳じて肌のような借妄を乖う * ˇハンドラがない眷圭 *    侯度拌侯喇 -> ハンドラ粕叫 -> 侯度拌撬逮 * * ˇハンドラがあり、驴脚充哈みである眷圭 *    侯度拌侯喇 -> ハンドラ粕叫 -> レジスタA凡锣闰 -> ハンドラ弹瓢 *     -> レジスタA凡牲耽 -> 侯度拌撬逮 * * ˇハンドラがあり、タスクから充哈みがかかり、ハンドラ柒で磊仑がない眷圭 *    侯度拌侯喇 -> ハンドラ粕叫 -> レジスタA凡锣闰 -> スタック磊仑 *     -> ハンドラ弹瓢 -> タスク毋嘲弹瓢 -> レジスタA凡锣闰 *     -> 侯度拌撬逮 * * ˇハンドラがあり、タスクから充哈みがかかり、ハンドラ柒で磊仑がある眷圭 *    侯度拌侯喇 -> ハンドラ粕叫 -> レジスタA凡锣闰 -> スタック磊仑 *     -> ハンドラ弹瓢 -> レジスタB凡锣闰 -> ディスパッチャ *     -> レジスタB凡牲耽 -> タスク毋嘲弹瓢 -> レジスタA凡锣闰 *     -> 侯度拌撬逮 * * 锣闰レジスタ呈羌界进 (アドレス惧疤から界) *  R10 R11                             (A:侯度拌/リタ〖ン脱レジスタ) *  R12 R13 R14 R15 R16 R17 R18 R19     (A:スクラッチレジスタ) *  R6 R7 R8 R9 R10                     (A:苞眶脱レジスタ) *  EIPC EIPSW                          (A:充哈み箕PC, PSW) *  SP[附哼猛]                          (A:スタックポインタ) *  R30 R20 R21 R22 R23 R24 R26 R27     (B:その戮锣闰滦据) *  R28 R1  R4  R5  R6  R7  R8  R9 */	.data	.align 4__intcount:	.long 0	Function vector_handler		/* 侯度挝拌の侯喇 */	add		-8,   sp	st.w	r10, 4[sp]	st.w	r11, 0[sp]		/*		 * ハンドラ弹瓢戎孟の粕み叫し		 *    R10 : ハンドラの戎孟		 */	stsr	ecr, r10	shr		2, r10	add		-4, r10	Lea		_InterruptHandlerEntry, r11	add		r10, r11	ld.w	0[r11], r10		/* ハンドラが痰ければ篓姜位 */	cmp		0,r10	bne		1f	stsr	ecr, r6	jarl	_unhandled_interrpt_handler, r31	be		end_handler//	be		end_handler//	be		unregisted_interrupt_raised1:	/*	 * レジスタ锣闰 	 *	 * 呈羌界进 : (10 11) ^ 12..19 6..9 31 eipc eipsw | (sp)	 */	mov		r30, r11		/* epを蝗いたいのでちょっと锣闰 */	addi	-60, r3, r30	mov		r30, r3			/* スタックに瓤鼻 */	sst.w	r12, 56[ep]	sst.w	r13, 52[ep]	sst.w	r14, 48[ep]	sst.w	r15, 44[ep]	sst.w	r16, 40[ep]	sst.w	r17, 36[ep]	sst.w	r18, 32[ep]	sst.w	r19, 28[ep]	sst.w	r6,  24[ep]	sst.w	r7,  20[ep]	sst.w	r8,  16[ep]	sst.w	r9,  12[ep]	sst.w	r31,  8[ep]	stsr	eipc, r6		/* 驴脚充哈み滦忽 */	sst.w	r6 , 4[ep]	stsr	eipsw, r6	sst.w	r6 ,0[ep]	mov		r11, r30		/* ep牲耽 */		/*		 * コンテキストチェックとスタック磊り仑え		 */		/* スタックチェック */	Lea		_end, r11	cmp		r11, r3	bnh		1f			/* 驴脚充哈み */	st.w	r3, -4[r3]	add		-4, r3	jr		2f1:		/* タスクコンテキスト惧での充哈み */		/* 附哼のスタック疤弥を充り哈みスタック惧に瘦赂 */	st.w	r3, -4[r2]		/* スタック磊り仑え */	addi	-4,r2, r32:		/*		 * ハンドラ弹瓢		 */	Lea		ret_int, r31	ei	jmp		r10	/*	 * 充り哈みからの牲耽借妄	 */Label	ret_int	di		/* スタックの牲耽 */	ld.w	0[r3],sp		/* どこへ若んでくのかチェック */	Lea		_end, r10	cmp		r10, r3	bh		recover_from_int		/* 		 * タスクへ若んでく眷圭ならreqflgをチェック		 * 妥滇があれば链レジスタを瘦赂してタスクディスパッチャへ		 */	Lea		__kernel_reqflg, r10	ld.w	0[r10], r11	cmp		r0, r11	bnz		getting_ready_for_contextswitchrecover_from_int_with_tskctx:		/* タスクに若んでいく涟にタスク毋嘲 */	jarl	__kernel_calltex, r31recover_from_int:	/*	 * レジスタ牲耽 	 *	 * 呈羌界进 : (10 11) 12..19 6..9 31 eipc eipsw ^ | (sp)	 */	mov		r30, r11		/* epを蝗いたいのでちょっと锣闰 */	mov		r3,  r30	sld.w	4[ep],r10	ldsr	r10, eipc	sld.w	0[ep],r10	ldsr	r10, eipsw	sld.w	56[ep], r12	sld.w	52[ep], r13	sld.w	48[ep], r14	sld.w	44[ep], r15	sld.w	40[ep], r16	sld.w	36[ep], r17	sld.w	32[ep], r18	sld.w	28[ep], r19	sld.w	24[ep], r6	sld.w	20[ep], r7	sld.w	16[ep], r8	sld.w	12[ep], r9	sld.w	 8[ep], r31	addi	60, r30, r3	mov		r11, r30end_handler:	/*	 * 侯度挝拌の牲耽	 *	 * 呈羌界进 : 10 11 ^ (12..19 6..9 31 eipc eipsw | sp)	 */	add		8, sp	ld.w	-4[sp], r10	ld.w	-8[sp], r11		reti	/*	 * タスクスイッチ券栏に燃う链レジスタ锣闰	 *	 * 呈羌界进 : (10 11 12..19 6..9 31 eipc eipsw | sp) ^ 	 *            30 20..29 1 4..9	 */getting_ready_for_contextswitch:		/* reqflg = 0 */	st.w	r0, 0[r10]		st.w	ep, -4[sp]		/*epを蝗いたいので靠っ黎に锣闰 */	addi	-68, sp, ep	sst.w	r20, 64[ep]	sst.w	r21, 60[ep]	sst.w	r22, 56[ep]	sst.w	r23, 52[ep]	sst.w	r24, 48[ep]	sst.w	r25, 44[ep]	sst.w	r26, 40[ep]	sst.w	r27, 36[ep]	sst.w	r28, 32[ep]	sst.w	r29, 28[ep]	sst.w	 r1, 24[ep]	sst.w	 r4, 20[ep]	sst.w	 r5, 16[ep]	sst.w	 r6, 12[ep]	sst.w	 r7,  8[ep]	sst.w	 r8,  4[ep]	sst.w	 r9,  0[ep]	mov		ep, sp		/* TCBの面咳を饯赖して牲耽攫鼠を肋年 */	Lea		__kernel_runtsk, ep	sld.w	0[ep], ep				/* ep = _kernel_runtsk */		sst.w	r3, TCB_sp[ep]	Lea		recover_from_contextswitch, r10	sst.w	r10, TCB_pc[ep]	stsr	psw, r10	sst.w	r10, TCB_psw[ep]			/* タスクディスパッチャへ */	Lea		__kernel_exit_and_dispatch, r10	ldsr	r10, eipc	reti	/*	 * 充哈み忙叫箕コンテキストスイッチの牲耽ル〖チン	 *	 * 呈羌界进 : (10 11 12..19 6..9 31 eipc eipsw | sp 	 *             30 20..29 1 4..9) ^	 */recover_from_contextswitch:	di		/* 锣闰したレジスタの办婶牲耽 */	mov		sp, ep	sld.w	64[ep], r20	sld.w	60[ep], r21	sld.w	56[ep], r22	sld.w	52[ep], r23	sld.w	48[ep], r24	sld.w	44[ep], r25	sld.w	40[ep], r26	sld.w	36[ep], r27	sld.w	32[ep], r28	sld.w	28[ep], r29	sld.w	24[ep], r1	sld.w	20[ep], r4	sld.w	16[ep], r5	sld.w	12[ep], r6	sld.w	 8[ep], r7	sld.w	 4[ep], r8	sld.w	 0[ep], r9	addi	68, sp, sp		/* おおもとの牲耽借妄へ若ばす */	jr recover_from_int_with_tskctx/* * CPUロック觉轮の艰评 * *   充哈み敦贿ならCPUロック觉轮 */Function _sense_lock	stsr	psw, r10	shr		5, r10	andi	1, r10, r10	jmp		r31/* * コンテキストモ〖ドの艰评 * *  スタックポインタがRAM挝拌の呵稿萨_end笆惯にあれば润タスクコンテキスト */Function _sense_context	mov		r0, r10	Lea		_end, r11	cmp		r11, r3	bnh		1f	mov		1, r101:	jmp		r31/* * 柒婶メモリコピ〖 *//*Function _memcpy	mov		r6, r9	mov		r6, r10	add		r8, r91:		cmp		r6, r9	ble		1f	ld.b	0[r6], r11	st.b	r11, 0[r7]	add		1, r6	add		1, r7	jr		1b1:	jmp		r31*/

⌨️ 快捷键说明

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