📄 pic_icu.h
字号:
/* * 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プロジェクトは·塑ソフトウェアに簇して·その努脱材墙拉も * 崔めて·いかなる瘦沮も乖わないˉまた·塑ソフトウェアの网脱により木 * 儡弄または粗儡弄に栏じたいかなる禄巢に簇しても·その勒扦を砷わないˉ */#ifndef _PIC_ICU_H_#define _PIC_ICU_H_#ifndef _MACRO_ONLY#include <sil.h>#endif /* _MACRO_ONLY */#include <rte_vr5500_cb.h> /* ICU_BASE_ADDR *//* * 充哈みコントロ〖ラ(Programable Interrupt Controler)簇犯の年盗 *//* 充哈み戎规の年盗∈0-7はmips3.hで蝗脱。8笆惯を回年する。∷ */#define INTNO_TIMER0 8 /* タイマ0 */#define INTNO_SERIAL0 9 /* シリアル0 */#define INTNO_GBUS 10 /* GBUS-INT0- */#define INTNO_BUS_ERR 11 /* BUS_ERROR */#define INTNO_TIMER1 12 /* タイマ1 */#define INTNO_SERIAL1 13 /* シリアル1 */#define INTNO_PARALEL 14 /* パラレル */#define INTNO_DMAC 15 /* DMAC_INTREQ- *//* 充哈みコントロ〖ラが瓷妄する充哈みの塑眶 */#define TMAX_ICU_INTNO 8u/* 充哈みコントロ〖ラのレジスタのアドレス年盗 *//* 笆布のxxx_offsetは、アセンブラで蝗う。 */#define INT0M_offset 0x00#define INT1M_offset 0x10#define INTR_offset 0x20#define INTEN_offset 0x30#define ICU_INT0M INT0M_offset#define ICU_INT1M INT1M_offset#define ICU_INTR INTR_offset#define ICU_INTEN INTEN_offset/* 充哈み妥傍ビットパタ〖ン (布淡、アセンブラ婶尸でも网脱している。) */#define TIMER0 BIT0#define SERIAL0 BIT1#define GBUS BIT2#define BUS_ERR BIT3#define TIMER1 BIT4#define SERIAL1 BIT5#define PARALEL BIT6#define DMAC BIT7/* ICU柒のレジスタアクセス脱の簇眶 */#define icu_reb( addr ) sil_reb_mem( (VP)(ICU_BASE_ADDR + addr) )#define icu_wrb( addr, val ) sil_wrb_mem( (VP)(ICU_BASE_ADDR + addr), val )#define icu_orb( mem, val ) icu_wrb( mem, icu_reb( mem ) | val )#define icu_andb( mem, val ) icu_wrb( mem, icu_reb( mem ) & val )/* * 充哈みコントロ〖ラの充哈みマスク簇犯 *//* 菇陇挛ICU_IPM柒のオフセットを滇めるためのマクロ∈makeoffset.cで脱いる∷ なお、このマクロで年盗した猛は、泼に网脱していない。*/#define OFFSET_DEF_ICU_IPM OFFSET_DEF(ICU_IPM, int1m)/* 充哈みコントロ〖ラに肋年材墙な充哈みマスクビットパタ〖ン∈呵光猛∷*/#define MAX_ICU_IPM 0xff/* 充哈みコントロ〖ラに肋年する充哈みマスクのチェック */#define CHECK_ICU_IPM(ipm) \ CHECK_PAR( 0 < (ipm.int0m) && (ipm.int0m) <= MAX_ICU_IPM ); \ CHECK_PAR( 0 < (ipm.int1m) && (ipm.int1m) <= MAX_ICU_IPM )#ifndef _MACRO_ONLY/* 充哈みコントロ〖ラに滦する充哈みマスクの导击テ〖ブル */extern ICU_IPM icu_intmask_table[];/* 充哈みコントロ〖ラのintmaskテ〖ブルの肋年 */Inline void icu_set_ilv(INTNO intno, ICU_IPM *ipm) { /* CHECK_ICU_IPM(ipm) は、惧疤ル〖チンで悸乖貉み */ icu_intmask_table[intno].int0m = ipm->int0m; icu_intmask_table[intno].int1m = ipm->int1m;}/* 充り哈みコントロ〖ラのマスク肋年 */Inline void icu_set_ipm(ICU_IPM *ipm) { /* CHECK_ICU_IPM(ipm) は、惧疤ル〖チンで悸乖貉み */ icu_wrb( (VP) ICU_INT0M, ipm->int0m ); icu_wrb( (VP) ICU_INT1M, ipm->int1m );}/* 充り哈みコントロ〖ラのマスク艰评 */Inline void icu_get_ipm(ICU_IPM *ipm) { ipm->int0m = icu_reb( (VP) ICU_INT0M ); ipm->int1m = icu_reb( (VP) ICU_INT1M );}#endif /* _MACRO_ONLY *//*============================================================================*//* アセンブラ借妄簇犯 *//* 充哈み钓材ビットの略闰と牲傅 *//* 充哈みコントロ〖ラICUのIPMをスタックに瘦赂 *//* ワ〖ド董肠の簇犯で、塑丸は1バイトのマスクではあるけれども、 ワ〖ド董肠のために2バイト帽疤で胺う涩妥がある。 */#define PUSH_ICU_IPM \ li t1, ICU_BASE_ADDR; \ addi sp, sp, -2*2; \ lb t3, INT0M_offset(t1); /* t3 = INT0M */ \ lb t4, INT1M_offset(t1); /* t4 = INT1M */ \ sh t3, (sp); \ sh t4, 2(sp)/* 充哈みコントロ〖ラICUのIPMをスタックから牲傅 */#define POP_ICU_IPM \ li t1, ICU_BASE_ADDR; \ lh t3, (sp); \ lh t4, 2(sp); \ sb t3, INT0M_offset(t1); /* INT0M = t3 */ \ sb t4, INT1M_offset(t1); /* INT1M = t4 */ \ addi sp, sp, 2*2/* 充哈みコントロ〖ラICUのIPMを肋年 *//* t0に充哈み妥傍戎规が掐った觉轮で钙ばれる *//* t0の柒推を蝉してはいけない *//* t1に充哈み妥滇クリアの年眶が掐っているので撬蝉してはならない。 */#define SET_ICU_IPM \ la t4, icu_intmask_table; /* デ〖タテ〖ブルの黎片アドレス */ \ sll t2, t0, 1; /* オフセット♂充哈み妥傍戎规∵2擒 \ (マスクは、2バイト) */ \ li t3, ICU_BASE_ADDR; \ add t4, t4, t2; /* 黎片アドレス≤オフセット */ \ lh t5, (t4); /* t5 = INT0M:INT1M */ \ /* 庙罢¨リトルエンディアン巴赂 */ \ sb t5, INT0M_offset(t3); /* INT0M=t5の布疤1バイト */ \ srl t6, t5, 8; \ sb t6, INT1M_offset(t3); /* INT1M=t5の惧疤1バイト *//* デバイス叹から改侍借妄を鸥倡するマクロ *//* 充哈み妥傍をt0に掐れて proc_END に若ぶ */#define MAKE_PROC(device) \proc_##device: \ li t0, INTNO_##device; \ j proc_END; \ nop;/* 充哈み妥傍の冉侍 *//* 充哈みコントロ〖ラはMIPS3コアのInt0に儡鲁されている *//* マスクのチェック*/#define PROC_INT0 \ li t2, ICU_BASE_ADDR; \ lb t3, INTR_offset(t2); \ lb t4, INT0M_offset(t2); \ and t5, t3, t4; /* INT0M とマスク */ \ beq t5, zero, proc_END; \ nop; \ \proc_BIT0: \ andi t4, t3, TIMER0; \ beq t4, zero, proc_BIT1; \ nop; \MAKE_PROC(TIMER0) \ \proc_BIT1: \ andi t4, t3, SERIAL0; \ beq t4, zero, proc_BIT2; \ nop; \MAKE_PROC(SERIAL0) \ \proc_BIT2: \ andi t4, t3, GBUS; \ beq t4, zero, proc_BIT3; \ nop; \MAKE_PROC(GBUS) \ \proc_BIT3: \ andi t4, t3, BUS_ERR; \ beq t4, zero, proc_BIT4; \ nop; \MAKE_PROC(BUS_ERR) \ \proc_BIT4: \ andi t4, t3, TIMER1; \ beq t4, zero, proc_BIT5; \ nop; \MAKE_PROC(TIMER1) \ \proc_BIT5: \ andi t4, t3, SERIAL1; \ beq t4, zero, proc_BIT6; \ nop; \MAKE_PROC(SERIAL1) \ \proc_BIT6: \ andi t4, t3, PARALEL; \ beq t4, zero, proc_BIT7; \ nop; \MAKE_PROC(PARALEL) \ \proc_BIT7: \ andi t4, t3, DMAC; \ beq t4, zero, proc_END; \ nop; \MAKE_PROC(DMAC) \ \proc_END:#endif /* _PIC_ICU_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -