📄 cpu_support.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 + -