📄 isr.asm
字号:
.INCLUDE hardware.inc // INCLUDE io information
.INCLUDE A2000.inc
.DEFINE C_IRQ_1024Hz 0x0010; //1024Hz IRQ4
.DEFINE C_IRQ_2048Hz 0x0020; //2048 IRQ4
.DEFINE C_IRQ_4096Hz 0x0040; //4096 IRQ4
.TEXT
.PUBLIC _FIQ;
.PUBLIC _IRQ5;
.EXTERNAL _G_TimeCount;
.EXTERNAL _G_SecTime;
.EXTERNAL _Clear_WatchDog;
//============================================================================================
//函数: FIQ()
//语法:void FIQ(void)
//描述:FIQ中服务断函数
//参数:无
//返回:无
//===============================================================================================
_FIQ:
PUSH r1,r4 TO [sp];
CALL _Clear_WatchDog;
r1 = C_FIQ_TMA; //
TEST r1,[P_INT_Ctrl]; //
JNE L_FIQ_TimerA; // 进入Timer A FIQ
r1 = C_FIQ_TMB; //
TEST r1,[P_INT_Ctrl]; //
JNE L_FIQ_TimerB; // 进入Timer B FIQ
L_FIQ_PWM: // 进入PWM FIQ
r1 = C_FIQ_PWM;
[P_INT_Clear] = r1;
POP r1,r4 FROM [sp];
RETI;
L_FIQ_TimerA:
CALL _Clear_WatchDog;
r1 = [_G_TimeCount]; //中断计数变量加1,即每0.25秒计数加1
r1 += 1
[_G_TimeCount] = r1;
r1 =[_G_SecTime];
r1 += 1;
[_G_SecTime] = r1;
call F_FIQ_Service_SACM_A2000;
CALL _Clear_WatchDog;
r1 = C_FIQ_TMA;
[P_INT_Clear] = r1; //清中断
POP r1,r4 FROM [sp];
RETI;
L_FIQ_TimerB:
[P_INT_Clear] = r1;
POP r1,r4 FROM [sp];
RETI;
//============================================================================================
//函数: IRQ5()
//语法:void IRQ5(void)
//描述:FIQ中服务断函数
//参数:无
//返回:无
//============================================================================================
_IRQ5: //定时0.5秒的中断程序
PUSH r1,r4 TO [sp];
r1 =0x0008;
TEST r1,[P_INT_Ctrl];
JNZ L_4Hz; // 开Timer A FIQ
r1 = 0x0004;
[P_INT_Clear] = r1; //清中断
L_Loop0:
r1 = 1;
[_G_TimeCount] = r1;
r1 = [_G_SecTime];
r1 += 1;
[_G_SecTime] = r1;
POP r1,r4 FROM [sp];
RETI;
L_4Hz:
r1 = 0x0008;
[P_INT_Clear] = r1; //清中断
POP r1,r4 FROM [sp];
RETI;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -