📄 cpu_config.h
字号:
/* * 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_config.h,v 1.4 2002/04/14 11:36:50 hiro Exp $ *//* * プロセッサ巴赂モジュ〖ル∈H8脱∷ */#ifndef _CPU_CONFIG_H_#define _CPU_CONFIG_H_/* * カ〖ネルの柒婶急侍叹のリネ〖ム */#ifndef OMIT_RENAME#define activate_r _kernel_activate_r#define ret_int _kernel_ret_int#define ret_exc _kernel_ret_exc#define task_intmask _kernel_task_intmask#define int_intmask _kernel_int_intmask#ifdef LABEL_ASM#define _activate_r __kernel_activate_r#define _ret_int __kernel_ret_int#define _ret_exc __kernel_ret_exc#define _task_intmask __kernel_task_intmask#define _int_intmask __kernel_int_intmask#endif /* LABEL_ASM */#endif /* OMIT_RENAME *//* * プロセッサの泼检炭吾のインライン簇眶年盗 */#ifndef _MACRO_ONLY#include "cpu_insn.h"#endif /* _MACRO_ONLY */#ifndef _MACRO_ONLY/* * タスクコンテキストブロックの年盗 */typedef struct task_context_block { VP sp; /* スタックポインタ */ FP pc; /* プログラムカウンタ */} CTXB;/* * 充哈みマスク拎侯ライブラリ *//* * 附哼の充哈みマスクの粕叫し */Inline UBcurrent_intmask(){ return(current_ccr() & H8INT_MASK_ALL);}/* * 充哈みマスクの肋年 */Inline voidset_intmask(UB intmask){ set_ccr((current_ccr() & ~H8INT_MASK_ALL) | intmask);}/* * 充哈みネストカウンタ */extern UW intnest;/* * コンテキスト徊救 * * 充哈みネストカウンタを粕み叫した木稿に充哈みが券栏しても、提ったと * きにはコンテキストも傅に提っている */Inline BOOLsense_context(){ return(intnest > 0);}Inline BOOLi_sense_lock(){ return(FALSE);}Inline BOOLsense_lock(){ return(current_ccr() & H8INT_MASK_ALL);}#define t_sense_lock sense_lock/* * CPUロックとその豺近∈タスクコンテキスト脱∷ */Inline voidt_lock_cpu(){ disint();}Inline voidt_unlock_cpu(){ enaint();}/* * CPUロックとその豺近∈润タスクコンテキスト脱∷ */extern UB int_intmask; /* 润タスクコンテキストでの充哈みマスク */Inline voidi_lock_cpu(){ UB intmask; /* * 办箕恃眶 intmask を蝗っているのは·current_intmask()を钙ん * だ木稿に充哈みが券栏し·弹瓢された充哈みハンドラ柒で * int_intmask が恃构される材墙拉があるためであるˉ */ intmask = current_intmask(); disint(); int_intmask = intmask;}Inline voidi_unlock_cpu(){ set_intmask(int_intmask);}/* * タスクディスパッチャ *//* * 呵光庭黎界疤タスクへのディスパッチ∈cpu_support.S∷ * * dispatch は·タスクコンテキストから钙び叫されたサ〖ビスコ〖ル借妄 * 柒で·CPUロック觉轮で钙び叫さなければならないˉ */extern void dispatch(void);/* * 附哼のコンテキストを嘉ててディスパッチ∈cpu_support.S∷ * * exit_and_dispatch は·CPUロック觉轮で钙び叫さなければならないˉ */extern void exit_and_dispatch(void);/* * * 充哈みハンドラの肋年 * * ベクトル戎规 inhno の充哈みハンドラの弹瓢戎孟を inthdr に肋年するˉ * */Inline voiddefine_inh(INHNO inhno, FP inthdr){}/* * CPU毋嘲ハンドラの肋年 */Inline voiddefine_exc(EXCNO excno, FP exchdr){}/* * 充哈みハンドラの叫掐庚借妄 * *//* * 充哈みハンドラの叫掐庚借妄の栏喇マクロ * ∈肩に掐庚借妄∷ * * reqflg をチェックする涟に充哈みを敦贿しないと·reqflg をチェック稿 * に弹瓢された充哈みハンドラ柒でディスパッチが妥滇された眷圭に·ディ * スパッチされないˉ * * *//* C咐胳ル〖チンの簇眶叹から掐庚借妄のラベルを栏喇 */#define INT_ENTRY(inthdr) inthdr##_entry#define EXC_ENTRY(exchdr) exchdr##_entry/* * 充哈みハンドラの掐庚借妄 * * H8では、充哈みとCPU毋嘲の胺いが票じなので、 * 掐庚借妄のマクロも鼎奶に年盗している * * entry¨掐庚借妄のラベル * inthdr¨C咐胳ル〖チンの黎片アドレス * */#define _INTHDR_ENTRY(entry, inthdr) \asm(".text \n"\" .align 2 \n"\" .global _"#entry" \n"\"_"#entry ": \n"\ /* 涩妥呵井嘎のレジスタをスタックに略闰 */ \" push.l er0 \n"\" push.l er1 \n"\ /* 充哈みネストカウンタのチェック */ \" mov.l @_intnest, er0 \n"\" mov.l er0, er1 \n"\ /* 充哈みネストカウンタを +1 */ \" inc.l #1, er0 \n"\" mov.l er0, @_intnest \n"\ /* 充哈み券栏箕のコンテキストを冉年 */ \" or.l er1, er1 \n"\ /* 驴脚充哈みならジャンプ */ \" bne _interrupt_from_int_"#inthdr" \n"\ /* 改侍ハ〖ドウェア充り哈み敦贿 */ \" jsr @_"#inthdr"_disable_int \n"\ /* スタック掐れ仑え傅の */ \ /* タスクスタックポインタを瘦赂 */ \" mov.l sp, er0 \n"\ /* 充哈みスタックに磊り仑え */ \" mov.l #"str_STACKTOP", sp \n"\ /* 充り哈み钓材 */ \" andc #"str_H8INT_ENA_ALL", ccr \n"\ /* 荒りのレジスタを瘦赂 */ \" mov.l er2, @-er0 \n"\" mov.l er3, @-er0 \n"\" mov.l er4, @-er0 \n"\" mov.l er5, @-er0 \n"\" mov.l er6, @-er0 \n"\" push.l er0 \n"\" jsr @_"#inthdr" \n"\ /* 充り哈み敦贿 */ \" orc #"str_H8INT_DIS_ALL", ccr \n"\ /* 改侍ハ〖ドウェア充り哈み钓材 */ \" jsr @_"#inthdr"_enable_int \n"\ /* 充哈みネストカウンタを-1 */ \" mov.l @_intnest, er0 \n"\" dec.l #1, er0 \n"\" mov.l er0, @_intnest \n"\ /* スタック磊仑え */ \" mov.l @sp, sp \n"\ /* reqflgのチェック */ \" mov.l @__kernel_reqflg, er0 \n"\ /* reqflgがFALSEならret_to_task_intに若ぶ */ \" or.l er0, er0 \n"\" beq _ret_to_task_int_"#inthdr" \n"\ /* reqflgをクリア */ \" sub.l er0, er0 \n"\" mov.l er0, @__kernel_reqflg \n"\ /* ret_intへジャンプ */ \" jmp @_kernel_ret_int \n"\ \ \/* 驴脚充哈みの借妄 */ \/* 充哈み券栏箕のコンテキストを冉侍稿、充り哈み敦贿 */ \/* の觉轮でここに若んでくる */ \/* ∈充哈みネストカウンタのインクリメントは貉んでいる∷ */ \ \"_interrupt_from_int_"#inthdr": \n"\ /* 改侍ハ〖ドウェア充り哈み敦贿 */ \" jsr @_"#inthdr"_disable_int \n"\ /* 充り哈み钓材 */ \" andc #"str_H8INT_ENA_ALL", ccr \n"\ /* 荒りのレジスタを瘦赂 */ \" push.l er2 \n"\" push.l er3 \n"\" push.l er4 \n"\" push.l er5 \n"\" push.l er6 \n"\" jsr @_"#inthdr" \n"\ /* 充り哈み敦贿 */ \" orc #"str_H8INT_DIS_ALL", ccr \n"\ /* 改侍ハ〖ドウェア充り哈み钓材 */ \" jsr @_"#inthdr"_enable_int \n"\ /* 充哈みネストカウンタを -1 */ \" mov.l @_intnest, er0 \n"\" dec.l #1, er0 \n"\" mov.l er0, @_intnest \n"\ \ \/* reqflgがFALSEの眷圭の借妄 */ \ \"_ret_to_task_int_"#inthdr": \n" \" pop.l er6 \n" /* レジスタ牲傅 */ \" pop.l er5 \n" \" pop.l er4 \n" \" pop.l er3 \n" \" pop.l er2 \n" \" pop.l er1 \n" \" pop.l er0 \n" \" rte \n" /* 充哈み傅に提る */ \)/* _INTHDR_ENTRY()マクロ ここまで *//* * 充哈みハンドラの叫掐庚借妄の栏喇マクロ * */#define INTHDR_ENTRY(inthdr) \ extern void inthdr##_entry(void); \ _INTHDR_ENTRY(inthdr##_entry, inthdr)/* * CPU毋嘲ハンドラの叫掐庚借妄の栏喇マクロ */#define EXCHDR_ENTRY(exchdr) INTHDR_ENTRY(exchdr)/* * CPU毋嘲の券栏した箕のシステム觉轮の徊救 *//* * CPU毋嘲の券栏した箕のコンテキスト冉年 */Inline BOOLexc_sense_context(VP p_excinf){ /* 1と孺秤するのは、附哼悸乖面のCPU毋嘲の尸 */ /* 充哈みネストカウンタがインクリメントされているため */ return(intnest > 1);}/* * CPU毋嘲の券栏した箕のCPUロック觉轮の徊救 */Inline BOOLexc_sense_lock(VP p_excinf){ return(*((UW *)p_excinf) & (H8INT_MASK_ALL << 24));}/* * プロセッサ巴赂の介袋步 */extern void cpu_initialize(void);/* * プロセッサ巴赂の姜位箕借妄 */extern void cpu_terminate(void);/* * 踏年盗充哈み券栏箕のエラ〖叫蜗箕のスタック菇陇の年盗 */typedef struct exc_stack { VW er0; VW er1; VW er2; VW er3; VW er4; VW er5; VW er6; VW pc; /* プログラムˇカウンタ */} EXCSTACK;/* * 踏年盗充哈み券栏箕のエラ〖叫蜗 (cpu_config.c, cpu_support.S) */extern void cpu_experr(EXCSTACK *);/* * タ〖ゲットシステムの矢机叫蜗 * * システムの你レベルの矢机叫蜗ル〖チンˉROMモニタ钙叫しで悸附するこ * とを鳞年しているˉ */extern void cpu_putc(char c);#endif /* _MACRO_ONLY_ */#endif /* _CPU_CONFIG_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -