.INCLUDE hardware.inc
//=============================================================
//C段中必须包含如下函数,如果没有书写,就在每行前加//注释掉,同
//时必须注释掉对应的中断子程序中的CALL语句
//.EXTERNAL _FIQ_call_F_1024;
//.EXTERNAL _IRQ0_call_F_1024;
//.EXTERNAL _FIQ_call_TMA;
//.EXTERNAL _IRQ1_call_TMA;
//.EXTERNAL _FIQ_call_TMB;
//.EXTERNAL _IRQ2_call_TMB;
//.EXTERNAL _IRQ3_call_EXT2;
//.EXTERNAL _IRQ3_call_EXT1;
//.EXTERNAL _IRQ3_call_KEY;
//.EXTERNAL _IRQ4_call_1KHz;
//.EXTERNAL _IRQ4_call_2KHz;
//.EXTERNAL _IRQ4_call_4KHz;
.EXTERNAL _irq5_call_2hz;
.EXTERNAL _irq5_call_4hz;
//.EXTERNAL _IRQ6_call_TMB1;
//.EXTERNAL _IRQ6_call_TMB2;
//=============================================================
.EXTERNAL _Clear_WatchDog;
//=============================================================
.TEXT
.PUBLIC _FIQ;
.PUBLIC _IRQ0;
.PUBLIC _IRQ1;
.PUBLIC _IRQ2;
.PUBLIC _IRQ3;
.PUBLIC _IRQ4;
.PUBLIC _IRQ5;
.PUBLIC _IRQ6;
//=============================================================
_FIQ:
PUSH r1,r4 TO [sp]; // 现场保护
PUSH BP TO [SP];
CALL _Clear_WatchDog; // 清看门狗
r1 = ASM_FIQ_TMA; // 中断源 _FIQ_TMA 定时器A, 快速中断
TEST r1,[ASM_Port_INT_Ctrl]; // 测试r1,[P_INT_Ctrl]
JNE _FIQ_TMA; // 进入_FIQ_TMA 定时器A
r1 = ASM_FIQ_TMB; // 中断源 _FIQ_TMB 定时器B, 快速中断
TEST r1,[ASM_Port_INT_Ctrl]; // 测试r1,[P_INT_Ctrl]
JNE _FIQ_TMB; // 进入_FIQ_TMB 定时器B
_FIQ_F_1024:
r1 = ASM_FIQ_F_1024; // 中断源 ASM_FIQ_F_1024, 快速中断
[ASM_Port_INT_Clear] = r1; // ASM_FIQ_F_1024清除中断标志
//C段中有书写,并需要时,去掉下行的//注释,否则不要动
//call _FIQ_call_F_1024;
JMP _FIQ_OVER;
//==========================================================================
_FIQ_TMA:
[ASM_Port_INT_Clear] = r1;
//C段中有书写,并需要时,去掉下行的//注释,否则不要动
//call _FIQ_call_TMA;
JMP _FIQ_OVER;
//==========================================================================
_FIQ_TMB:
[ASM_Port_INT_Clear] = r1;
//C段中有书写,并需要时,去掉下行的//注释,否则不要动
//call _FIQ_call_TMB;
//==========================================================================
_FIQ_OVER:
POP BP FROM [SP];
POP r1,r4 FROM [sp];
RETI;
//==========================================================================
//==========================================================================
_IRQ0:
PUSH r1,r4 TO [sp];
PUSH BP TO [SP];
CALL _Clear_WatchDog; // 清看门狗
r1 =ASM_IRQ0_F_1024;
[ASM_Port_INT_Clear] = r1;
//C段中有书写,并需要时,去掉下行的//注释,否则不要动
//call _IRQ0_call_F_1024;
POP BP FROM [SP];
POP r1,r4 FROM [sp]; // 恢复现场
RETI;
//==========================================================================
//==========================================================================
_IRQ1:
PUSH r1,r4 TO [sp];
PUSH BP TO [SP];
CALL _Clear_WatchDog; // 清看门狗
r1 =ASM_IRQ1_TMA;
[ASM_Port_INT_Clear] = r1;
//C段中有书写,并需要时,去掉下行的//注释,否则不要动
//call _IRQ1_call_TMA;
POP BP FROM [SP];
POP r1,r4 FROM [sp]; // 恢复现场
RETI;
//==========================================================================
//==========================================================================
_IRQ2:
PUSH r1,r4 TO [sp];
PUSH BP TO [SP];
CALL _Clear_WatchDog; // 清看门狗
r1 =ASM_IRQ2_TMB;
[ASM_Port_INT_Clear] = r1;
//C段中有书写,并需要时,去掉下行的//注释,否则不要动
//call _IRQ2_call_TMB;
POP BP FROM [SP];
POP r1,r4 FROM [sp]; // 恢复现场
RETI;
//==========================================================================
//==========================================================================
_IRQ3:
PUSH r1,r4 TO [sp];
PUSH BP TO [SP];
CALL _Clear_WatchDog; // 清看门狗
r1 =ASM_IRQ3_EXT1;
TEST r1,[ASM_Port_INT_Ctrl];
JNE _IRQ3_EXT1;
r1 =ASM_IRQ3_EXT2;
TEST r1,[ASM_Port_INT_Ctrl];
JNE _IRQ3_EXT2;
_IRQ3_KEY:
r1 = ASM_IRQ3_KEY;
[ASM_Port_INT_Clear] = r1;
//C段中有书写,并需要时,去掉下行的//注释,否则不要动
//call _IRQ3_call_KEY;
JMP _IRQ3_OVER;
//==========================================================================
_IRQ3_EXT1:
[ASM_Port_INT_Clear] = r1;
//C段中有书写,并需要时,去掉下行的//注释,否则不要动
//call _IRQ3_call_EXT1;
JMP _IRQ3_OVER;
//==========================================================================
_IRQ3_EXT2:
[ASM_Port_INT_Clear] = r1;
//C段中有书写,并需要时,去掉下行的//注释,否则不要动
//call _IRQ3_call_EXT2;
//==========================================================================
_IRQ3_OVER:
POP BP FROM [SP];
POP r1,r4 FROM [sp]; // 恢复现场
RETI;
//==========================================================================
//==========================================================================
_IRQ4:
PUSH r1,r4 TO [sp];
PUSH BP TO [SP];
CALL _Clear_WatchDog; // 清看门狗
r1 =ASM_IRQ4_4KHz;
TEST r1,[ASM_Port_INT_Ctrl];
JNE _IRQ4_4KHz;
r1 =ASM_IRQ4_2KHz;
TEST r1,[ASM_Port_INT_Ctrl];
JNE _IRQ4_2KHz;
_IRQ4_1KHz:
r1 = ASM_IRQ4_1KHz;
[ASM_Port_INT_Clear] = r1;
//C段中有书写,并需要时,去掉下行的//注释,否则不要动
//call _IRQ4_call_1KHz;
JMP _IRQ4_OVER;
//==========================================================================
_IRQ4_2KHz:
[ASM_Port_INT_Clear] = r1;
//C段中有书写,并需要时,去掉下行的//注释,否则不要动
//call _IRQ4_call_2KHz;
JMP _IRQ4_OVER;
//==========================================================================
_IRQ4_4KHz:
[ASM_Port_INT_Clear] = r1;
//C段中有书写,并需要时,去掉下行的//注释,否则不要动
//call _IRQ4_call_4KHz;
//==========================================================================
_IRQ4_OVER:
POP BP FROM [SP];
POP r1,r4 FROM [sp]; // 恢复现场
RETI;
//==========================================================================
//==========================================================================
_IRQ5:
PUSH r1,r4 TO [sp];
PUSH BP TO [SP];
CALL _Clear_WatchDog; // 清看门狗
r1 =ASM_IRQ5_4Hz;
TEST r1,[ASM_Port_INT_Ctrl];
JNE _IRQ5_4Hz;
_IRQ5_2Hz:
r1 = ASM_IRQ5_2Hz;
[ASM_Port_INT_Clear] = r1;
//C段中有书写,并需要时,去掉下行的//注释,否则不要动
call _irq5_call_2hz;
jmp _IRQ5_over;
//==========================================================================
_IRQ5_4Hz:
[ASM_Port_INT_Clear] = r1;
//C段中有书写,并需要时,去掉下行的//注释,否则不要动
call _irq5_call_4hz;
//==========================================================================
_IRQ5_over:
POP BP FROM [SP];
POP r1,r4 FROM [SP]; // 恢复现场
RETI;
//==========================================================================
//==========================================================================
_IRQ6:
PUSH r1,r4 TO [sp];
PUSH BP TO [SP];
CALL _Clear_WatchDog; // 清看门狗
r1 =ASM_IRQ6_TMB1;
TEST r1,[ASM_Port_INT_Ctrl];
JNE _IRQ6_TMB1;
_IRQ6_TMB2:
r1 = ASM_IRQ6_TMB2;
[ASM_Port_INT_Clear] = r1;
//C段中有书写,并需要时,去掉下行的//注释,否则不要动
//call _IRQ6_call_TMB2;
JMP _IRQ6_over;
//==========================================================================
_IRQ6_TMB1:
[ASM_Port_INT_Clear] = r1;
//C段中有书写,并需要时,去掉下行的//注释,否则不要动
//call _IRQ6_call_TMB1;
//==========================================================================
_IRQ6_over:
POP BP FROM [SP];
POP r1,r4 FROM [sp]; // 恢复现场
RETI;
//==========================================================================
//==========================================================================
|