📄 fiq.asm
字号:
//*********************************************************//
//函数:FIQ()
//语法:void FIQ(void)
//描述:快速请求中断;
// 入口地址:_FIQ
// 功能:调用语音解码并播放API
//参数:无
//返回:无
//IRQ5_2Hz Time_Count & Calendar_Count
// 由System_Initial()设置并启用
// 功能:1)调用万年历调整程序_Calendar_Counter
// 2)_TimeCount自加1,以在main()中实现校时状态下多少时间无动作则退出的功能
//IRQ4_1KHz LED_Display
// 由System_Initial()设置并启用
// 功能:调用LED显示程序 _Disp_Time
//FIQ_TimA F_FIQ_Service_SACM_A2000
// 由SACM_A2000_Initial()设置并启用
// 功能:调用F_FIQ_Service_SACM_A2000完成D/A转换
//IRQ6_TMB2 TimeChangeCount变量
// 由Start256HzRTC()设置并启用
// 功能:TimeChangeCount自加1,以在main()实现校时状态下增减后多少时间则单项报时的功能
//*********************************************************//
.INCLUDE a2000.inc;
.INCLUDE hardware.inc
.PUBLIC _FIQ, _IRQ4,_IRQ5, _IRQ6
.EXTERNAL _TimeCount; // 触发计时
.EXTERNAL _TimeChangeCount; //计时
.EXTERNAL _LED_Disp //LED显示子程序 在IRQ4_1KHz中断中调用
.EXTERNAL _Calendar_Counter //万年历调整子程序 在IRQ5_2Hz 中断中调用
.TEXT
//-------CALL F_FIQ_Service_SACM_A2000--------//
_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; //完成D/A转换
r1 = 0x2000
[P_INT_Clear] = r1
pop r1,r5 from [sp];
reti;
FIQ_is_TimB:
[P_INT_Clear] = r1;
pop r1,r5 from [sp];
reti;
//--------LED 显示 in 1Hz------//
_IRQ4:
push r1,r5 to [sp]
r1=0x0010
test r1,[P_INT_Ctrl]
jnz IRQ4_1K
r1=0x0020
test r1,[P_INT_Ctrl]
jnz IRQ4_2K
jmp IRQ4_4K
IRQ4_1K:
CALL _LED_Disp; //LED 显示
r1=0x0010;
[P_INT_Clear]=r1
pop r1,r5 from [sp];
reti;
IRQ4_2K:
[P_INT_Clear]=r1
pop r1,r5 from [sp];
reti;
IRQ4_4K:
[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:
r1 = [_TimeCount]; //计时
r1 += 1;
[_TimeCount] = r1;
CALL _Calendar_Counter; //万年历
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:
[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 + -