📄 vr4131_icu.h
字号:
nop;/* 充哈み妥傍の冉侍 *//* 充哈みコントロ〖ラはMIPS3コアのInt0に儡鲁されているマスクのチェック */#define PROC_INT0 \/* タイマの炳批拉を惧げるため、SYSINT2REGから拇べる */ \ li t1, ICU_BASE_ADDR_asm; \ lh t3, SYSINT2_offset(t1); /* t3 = SYSINT2REG */ \ lh t4, MSYSINT2_offset(t1); /* t4 = MSYSINT2REG */ \ and t5, t3, t4; /* 充哈み妥滇ビットにマスク */ \ beq t5, zero, proc_SYSINT1; \ andi t6, t5, (BIT0 | BIT1 | BIT2 | BIT3 | BIT4 ); \ beq t6, zero, proc_SYSINT2_HIGH_5BIT; \ \/* SYSINT2REG (b0:4) の借妄 */ \ andi t7, t5, ( RTCL2INTR | LEDINTR ); \ beq t7, zero, proc_SYSINT2_BIT3_4; \ andi t8, t5, LEDINTR; \ beq t8, zero, proc_LED; \MAKE_PROC(RTCL2); \MAKE_PROC(LED); \ \proc_SYSINT2_BIT3_4: \ andi t1, t5, TCLKINTR; \ beq t1, zero, proc_FIR; \MAKE_PROC(TCLK); \MAKE_PROC(FIR); \ \/* SYSINT2REG (b5:9) の借妄 */ \proc_SYSINT2_HIGH_5BIT: \ andi t7, t5, (DSIUINTR | PCIINTR); \ beq t7, zero, proc_SYSINT2_BIT7_7; \ andi t2, t5, DSIUINTR; \ beq t2, zero, proc_PCI; \MAKE_PROC(DSIU); \MAKE_PROC(PCI); \ \proc_SYSINT2_BIT7_7: \ andi t3, t5, SCUINTR; \ beq t3, zero, proc_SYSINT2_BIT8_9; \MAKE_PROC(SCU); \ \proc_SYSINT2_BIT8_9: \ andi t4, t5, CSIINTR; \ beq t4, zero, proc_BCU; \MAKE_PROC(CSI); \MAKE_PROC(BCU); \ \/* SYSINT1REGのチェック */ \/* t1にICU_BASE_ADDRが掐った觉轮でここに丸る */ \proc_SYSINT1: \ lh t3, SYSINT1_offset(t1); /* t3 = SYSINT1REG */ \ lh t4, MSYSINT1_offset(t2); /* t4 = MSYSINT1REG */ \ and t5, t3, t4; /* 充哈み妥滇ビットにマスク */ \ andi t6, t5, 0xff; \ beq t6, zero, proc_SYSINT1_HIGH_BYTE; \ \/* SYSINT1REG (布疤バイト) の借妄 */ \ andi t7, t5, (BATINTR | POWERINTR); \ beq t7, zero, proc_SYSINT1_BIT2_3; \ andi t8, t5, BATINTR; \ beq t8, zero, proc_POWER; \MAKE_PROC(BAT); \MAKE_PROC(POWER); \ \proc_SYSINT1_BIT2_3: \ andi t1, t5, ETIMERINTR; \ beq t1, zero, proc_ETIME; \MAKE_PROC(RTCL1); \MAKE_PROC(ETIME); \ \/* SYSINT1REG (惧疤バイト) の借妄 */ \proc_SYSINT1_HIGH_BYTE: \ andi t8, t5, (GIUINTR | SIUINTR); \ beq t8, zero, proc_SYSINT1_BIT11_12; \ andi t9, t5, GIUINTR; \ beq t9, zero, proc_SIU; \MAKE_PROC(GIU); \MAKE_PROC(SIU); \ \proc_SYSINT1_BIT11_12: \ andi t1, t5, SOFTINTR; \ beq t1, zero, proc_CLKRUN; \MAKE_PROC(SOFTINT); \MAKE_PROC(CLKRUN); \ \proc_END:/*============================================================================*//* 充哈み借妄に簇する、充哈み妥傍の冉们尸呆借妄のシステム巴赂婶 */ /* 钙び叫されたとき、 */ /* a1にステ〖タスレジスタ */ /* a2に付傍レジスタ */ /* の猛が掐っている */#define PROC_INTERRUPT_SYS \ and t2, a2, a1; /* 充哈み妥滇ビットにマスクをかける */ \ andi t3, t2, Cause_IP0; /* IP0ビット艰り叫し */ \ bne t3, zero, proc_IP0; \ andi t4, t2, Cause_IP1; /* IP1ビット艰り叫し */ \ bne t4, zero, proc_IP1; \ andi t5, t2, Cause_IP2; /* IP2ビット艰り叫し */ \ bne t5, zero, proc_IP2; \ andi t6, t2, Cause_IP3; /* IP3ビット艰り叫し */ \ bne t6, zero, proc_IP3; \ andi t7, t2, Cause_IP4; /* IP4ビット艰り叫し */ \ bne t7, zero, proc_IP4; \ nop; \ /* VR4131の眷圭、Cause_IP5とCause_IP6は踏儡鲁なので臼维 */ \ /*∈ハ〖ドウェア试p196徊救∷*/ \ \ /* なんらかの付傍で尸呆できない眷圭 */ \ j join_interrupt_and_exception; \ nop; \ \ \/* MIPS3コアレベルで尸呆したレベルでの借妄 */ \/* 充哈み妥傍戎规を t0 に掐れて */ \/* 充哈み妥滇クリアのための年眶を t1 に掐れて */ \/* set_ICU_IPM へ若ぶ */ \proc_IP7: /* 充哈み妥傍IP7∈タイマ∷の眷圭 */ \ xori t1, zero, Cause_IP7; \ j set_ICU_IPM; \ ori t0, zero, INTNO_IP7; \ \proc_IP0: /* 充哈み妥傍IP0∈ソフトウェア充哈み0∷の眷圭 */ \ xori t1, zero, Cause_IP0; \ j set_ICU_IPM; \ ori t0, zero, INTNO_IP0; \ \proc_IP1: /* 充哈み妥傍IP1∈ソフトウェア充哈み1∷の眷圭 */ \ xori t1, zero, Cause_IP1; \ j set_ICU_IPM; \ ori t0, zero, INTNO_IP1; \ \proc_IP2: /* 充哈み妥傍IP2∈Int0∷の眷圭 */ \ /* ≈すべての充哈み∽が奶梦される。*/ \ PROC_INT0; /* 尸呆借妄は vr4131_icu.h でマクロ年盗されている */ \ xori t1, zero, Cause_IP2; \ j set_ICU_IPM; \ nop; \ \proc_IP3: /* 充哈み妥傍IP3∈Int1∷の眷圭 */ \ /* ≈rtc_long1_intr∽∈インタ〖バルタイマ∷が奶梦される。*/ \ xori t1, zero, Cause_IP3; \ j set_ICU_IPM; \ ori t0, zero, INTNO_IP3; \ \proc_IP4: /* 充哈み妥傍IP4∈Int2∷の眷圭 */ \ /* ≈rtc_long2_intr∽∈インタ〖バルタイマ∷が奶梦される。*/ \ xori t1, zero, Cause_IP4; \ j set_ICU_IPM; \ ori t0, zero, INTNO_IP4; \ \/* 充哈みコントロ〖ラ巴赂のマスク肋年 */ \set_ICU_IPM: \ \ SET_ICU_IPM; /* 充哈みマスクを肋年するマクロ */ \ /* 悸刘を乖うときには、布淡にてt0、t1は网脱するの */ \ /* で撬蝉しないように、庙罢しなければならない。 */ \ \/* 付傍レジスタIPビットに瘦积されている称硷充哈みの充哈み妥滇をクリアする。 \ t1には、充哈み妥滇ビットを瓤啪したものが掐っている。 */ \ \ mfc0 t8, Cause; \ and t8, t8, t1; \ mtc0 t8, Cause; \ \/* ステ〖タスレジスタのマスク肋年とC咐胳ル〖チン钙び叫し */ \/* t0に充哈み妥傍戎规が肋年された觉轮でここに丸る */ \ la t3, int_table; /* 导击ベクタアドレス */ \ sll t4, t0, 3; /* 充哈み妥傍戎规を8擒 \ INT_TABLE房は、 \ ハンドラのアドレス(4バイト) \ ≤MIPS3コアの充哈みマスク(4バイト) \ の、圭纷8バイト。 */ \ add t5, t3, t4; /* ベクタアドレスを换叫 */ \ lw t6, INT_TABLE_intmask(t5); \ /* IPM(充哈み钓材ビット)粕み叫し。 \ 充哈みマスク笆嘲の猛は、 \ IEビットはセット \ EXLビットはリセット \ 觉轮になっている。*/ \ lw t7, (t5); /* C咐胳ル〖チン黎片アドレス粕み叫し */ \ \ jalr ra, t7; /* C咐胳ル〖チン钙び叫し */ \ mtc0 t6, Status; /* 充哈み钓材〃ステ〖タスレジスタのマスク肋年*/\ \ mfc0 t0, Status; \ ori t0, t0, SR_EXL; /* 充哈み敦贿〃IEビットの猛は瘦积しなければなら\ ないのでEXLビットを脱いる。*/ \ mtc0 t0, Status; \ \ /* CP0ハザ〖ドのための箕粗苍ぎ */ \ NOP_FOR_CP0_HAZARD;#endif /* _VR4131_ICU_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -