📄 isr.asm
字号:
.include hardware.inc
.include S480.inc
.include Resource.inc
.define RUN_1KHz_TimeBase_INT 0x0010
.define P_INT_Ctrl_New 0x702d
.ram
.public _TimeCounter
.var _TimeCounter
.text
.public _FIQ;
_FIQ:
PUSH R1,R4 to [sp];
R1 = 0x0001; //清狗
[P_Watchdog_Clear] = R1;
R1 = 0x2000;
test R1,[P_INT_Ctrl];
jnz L_FIQ_TimerA;
R1 = 0x0800;
test R1,[P_INT_Ctrl];
jnz L_FIQ_TimerB;
L_FIQ_PWM: //以下两个中断均用于语音
R1 = C_FIQ_PWM;
[P_INT_Clear] = R1;
POP R1,R4 from[sp];
reti;
L_FIQ_TimerA:
[P_INT_Clear] = R1;
call F_FIQ_Service_SACM_S480;
pop R1,R4 from [sp];
RETI; //.......end
L_FIQ_TimerB:
[P_INT_Clear] = R1;
pop R1,R4 from [sp];
RETI;
.public _IRQ4
_IRQ4:
PUSH R1,R5 to [SP]
R1=0x0010
TEST R1,[P_INT_Ctrl] //是否为1KHz中断
JNZ IRQ4_1K //1KHz中断
R1=0x0020
TEST R1,[P_INT_Ctrl] //是否为2KHz中断
JNZ IRQ4_2K //2KHz中断
IRQ4_4K:
R1=0x0040
[P_INT_Clear]=R1
POP R1,R5 FROM [SP]
RETI
IRQ4_2K:
R1=0x0020
[P_INT_Clear]=R1
POP R1,R5 FROM [SP]
RETI
IRQ4_1K:
R1=[_TimeCounter]
JZ Back
R1-=1
[_TimeCounter]=R1
Back: R1=0x0010
[P_INT_Clear]=R1
POP R1,R5 FROM [SP]
RETI
.code
.public _InitIsr
_InitIsr: .proc
R1=0
[_TimeCounter]=R1
R1=RUN_1KHz_TimeBase_INT //开放1KHz中断
R2=[P_INT_Ctrl_New] //....2004.7.26 张新强修改 原来这两行没有
R1=R1|R2 //理由:原先的程序会把用户在调用它之前的中断设置改变的
[P_INT_Ctrl]= R1
int IRQ
RETF
.endp
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -