📄 isr.asm
字号:
//============================================================
// 文件名称:isr.asm
// 实现功能:采用FIQ_TMA(8K)中断实现语音数据队列的填充
// 日期: 2005/6/16
//============================================================
.TEXT
.INCLUDE spce.inc //包含IO、Timer、AD、DA等的设置
.INCLUDE a2000.inc
.INCLUDE Resource.inc
.EXTERNAL _GetKey
.EXTERNAL _ScreenAegis
.EXTERNAL _flag;
.DEFINE TIMERA_CLKA_2 0x002D;
.DEFINE TIMERA_CLKB_1 0x0030;
.DEFINE RUN_TIMERA 0x2000;
.DEFINE TIMER_DATA_FOR_2HZ 0xFF37;
//======================================================================================
//voice function:to call the F_FIQ_Service_SACM_A2000 play voice
//edit by hongyan
//2005.4.01
//======================================================================================
.public _FIQ;
_FIQ:
PUSH R1,R4 to [sp];
R1 = 0x2000;
test R1,[P_INT_Ctrl];
jnz L_FIQ_TimerA;
R1 = 0x0800;
test R1,[P_INT_Ctrl];
jnz L_FIQ_TimerB;
//------------------------------------------------------------------
// hook PWM FIQ subroutine here and define it to be external
//------------------------------------------------------------------
L_FIQ_PWM:
R1 = C_FIQ_PWM;
[P_INT_Clear] = R1;
POP R1,R4 from[sp];
reti;
//------------------------------------------------------------------
// hook Timer A FIQ subroutine here and define it to be external
// SACM-A2000 Timer A FIQ service
//------------------------------------------------------------------
L_FIQ_TimerA:
[P_INT_Clear] = R1;
call F_FIQ_Service_SACM_A2000;
pop R1,R4 from [sp];
reti;
//------------------------------------------------------------------
// hook Timer B FIQ subroutine here and define it to be external
//------------------------------------------------------------------
L_FIQ_TimerB:
[P_INT_Clear]=R1;
pop R1,R4 from [sp];
RETI;
//======================================================================
// 汇编格式: _SP_INT_IRQ6
// C格式: F_SP_INT_IRQ6();
// 实现功能: 初始化中断IRQ6
// 入口参数: 无
// 出口参数: 无
// 破坏寄存器:r1
//======================================================================
.PUBLIC _SP_INT_IRQ6; //8hz
.PUBLIC F_SP_INT_IRQ6; //8hz
_SP_INT_IRQ6: .PROC
F_SP_INT_IRQ6:
r1 = 0x0000;
[P_TimeBase_Setup]=r1 //8hz
r1 = [P_INT_Ctrl_New];
r1 = r1 |0x0002; //开中断IRQ6
[P_INT_Ctrl_New]= r1
irq on;
RETF;
.ENDP
//===================================================================================
// 汇编格式:_IRQ6
// C格式: void IRQ6(void)
// 实现功能:利用2Hz中断定时1秒
// 出口参数: 无
// 破坏寄存器:无
//===================================================================================
.PUBLIC _IRQ6;
_IRQ6:
PUSH r1,r4 to [sp];
r1 = 0x0002;
TEST r1,[P_INT_Ctrl];
JNZ _IRQ6_TMB1;
// r1=0x0002;
r1=0x0001;
[P_INT_Clear]=r1;
POP r1,r4 FROM [sp];
RETI;
_IRQ6_TMB1:
[P_INT_Clear]=r1;
call _GetKey;
POP r1,r4 FROM [sp];
RETI;
//======================================================================
// 汇编格式: _turn_off_timeA
// C格式: turn_off_timeA();
// 实现功能: 计时设置
// 入口参数: 无
// 出口参数: 无
// 破坏寄存器:r1
//======================================================================
.PUBLIC _turn_off_timeA;
_turn_off_timeA:.PROC
r1 = [P_INT_Ctrl_New];
r1 &= 0xffef;
[P_INT_Ctrl_New] = r1;
RETF;
.ENDP
.PUBLIC _SP_INT_TIMEA
_SP_INT_TIMEA:
R1 = TIMER_DATA_FOR_2HZ;
[P_TimerA_Data] = R1;
R1 = TIMERA_CLKA_2;
[P_TimerA_Ctrl] = R1;
R1 = [P_INT_Ctrl_New];
R1 |= 0x0010
[P_INT_Ctrl_New] = R1
IRQ ON
RETI
//===================================================================================
// 汇编格式: _IRQ4
// C格式: void IRQ6(void)
// 实现功能:
// 出口参数: 无
// 破坏寄存器:无
//===================================================================================
.PUBLIC _IRQ4;
_IRQ4:
PUSH R1,R4 TO [SP]
R1 = 0x0040;
[P_INT_Clear] = R1;
R1 = [_flag]
R1 = R1 - 1;
[_flag] = R1
exit:POP R1,R4 FROM [SP];
RETI
//========================================================================================
// End of isr.asm
//========================================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -