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

📄 pic_icu.h

📁 符合日本著名的ITRON规范的开源操作系统。 TOPPERS/JSP内核就是TOPPERS工程按μITRON4.0研发的第一个 软件
💻 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 + -