📄 fiq.asm
字号:
//*********************************************************//
//函数:FIQ()
//语法:void FIQ(void)
//描述:快速请求中断;
// 入口地址:_FIQ
// 功能:调用语音解码并播放API
//参数:无
//返回:无
//*********************************************************//
.INCLUDE a2000.inc;
.INCLUDE hardware.inc
.PUBLIC _FIQ,_IRQ3, _IRQ5, _IRQ6
.EXTERNAL _TimeCount; // 触发计时
.EXTERNAL Per500msSet //2Hz中断,每次500ms时钟
.EXTERNAL _TimeChangeCount; //计时
.EXTERNAL _Clear_WatchDog;
.TEXT
_FIQ:
push r1,r5 to [sp]
r1 = 0x0800
r1&=[P_INT_Ctrl]
jnz FIQ_is_TimB
r1 = 0x2000
r1&=[P_INT_Ctrl]
jnz FIQ_is_TimA
r1 = 0x8000
r1&=[P_INT_Ctrl]
jnz FIQ_is_PWM
FIQ_is_PWM:
[P_INT_Clear] = r1
pop r1,r5 from [sp];
reti;
FIQ_is_TimA:
call F_FIQ_Service_SACM_A2000;
r1 = 0x2000
[P_INT_Clear] = r1
pop r1,r5 from [sp];
reti;
FIQ_is_TimB:
r1=0x0800;
[P_INT_Clear] = r1;
pop r1,r5 from [sp];
reti;
_IRQ3:
push r1,r5 to [sp]
r1 = 0x0380; //按键唤醒
[P_INT_Clear] = r1;
pop r1,r5 from [sp];
reti;
//--------2Hz and 4Hz------//
_IRQ5:
push r1,r5 to [sp]
r1 = 0x0008;
test r1,[P_INT_Ctrl];
jnz L_IRQ5_4Hz;
L_IRQ5_2Hz:
call _Clear_WatchDog;
r1 = 0xFFFF; //万年历时间///////////////////
[Per500msSet] = r1;
r1 = [_TimeCount]; //计时
r1 += 1;
[_TimeCount] = r1;
r1=0x0004
[P_INT_Clear] = r1;
pop r1,r5 from [sp];
reti;
L_IRQ5_4Hz:
[P_INT_Clear] = r1;
pop r1,r5 from [sp];
reti;
//-------- 256Hz RTC --------//
_IRQ6:
push r1,r5 to [sp]
r1=0x0001
test r1,[P_INT_Ctrl]
jnz IRQ6_TMB2
IRQ6_TMB1:
r1=0x0002
[P_INT_Clear]=r1
pop r1,r5 from [sp];
reti;
IRQ6_TMB2:
r1=[_TimeChangeCount]
r1+=1
[_TimeChangeCount]=r1
r1=0x0001
[P_INT_Clear]=r1
pop r1,r5 from [sp];
reti;
.END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -