📄 isr.asm
字号:
//============================================================
// 文件名称: isr.asm
// 实现功能: 中断服务函数
// 维护记录: 2006/9/20 v1.0
//============================================================
.INCLUDE SPCE061A.inc
.EXTERNAL _giADC_DataSave
.EXTERNAL _G_ADC_flag
.EXTERNAL _fOut
.EXTERNAL F_LED_Show
.EXTERNAL _uiBlink
.IRAM
.PUBLIC G_Sum
.VAR G_Sum = 2
.TEXT
.PUBLIC _FIQ,_IRQ0,_IRQ1,_IRQ2,_IRQ3,_IRQ4,_IRQ5,_IRQ6,_IRQ7,_BREAK
//======================================================
// 函数名称: IRQ2()
// 汇编调用: _IRQ2
// 实现功能: 利用IR2_TMB进行加热时间控制.
// 入口参数: 无
// 出口参数: 无
// 破坏寄存器: r1~r4
//======================================================
_IRQ2:
push r1,r4 to [sp]
r1 = [_fOut]
r1 -= 1
[_fOut] = r1
jnz Exit //加热时间到?
r1 = [P_IOA_Buffer] //是,关闭加热器
r1 &= 0xff7f
[P_IOA_Buffer] = r1
Exit:
r1 = C_IRQ2_TMB
[P_INT_Clear]=r1
pop r1,r4 FROM [sp]
reti
//======================================================
// 函数名称: IRQ5()
// 汇编调用: _IRQ5
// 实现功能: 利用2Hz中断定时1秒,进行温度采样.
// 入口参数: 无
// 出口参数: 无
// 破坏寄存器: r1~r4
//======================================================
_IRQ5:
push r1,r4 TO [sp]
r1 = 0x0008
test r1,[P_INT_Ctrl]
jnz L_4Hz // 开Timer A FIQ
r1 = 0x0004
[P_INT_Clear] = r1 //清中断
r1 = [G_Sum]
r1 = r1 - 1
[G_Sum] = r1
jz ADC_Value
pop r1,r4 FROM [sp]
reti
ADC_Value:
r1 = 0
L_AD:
r2 = [P_ADC_MUX_Ctrl] //读寄存器[P_ADC_MUX_Ctrl]的B15位
test r2,0x8000 //判断是否转换完毕
jz L_AD //否,继续转换
r3 = [P_ADC_MUX_Data] //是,则读出[P_ADC_MUX_DATA]转换结果
r3 = r3 lsr 4
r3 = r3 lsr 2
r2 = r1 + _giADC_DataSave
[r2] = r3
r1= r1 + 1
cmp r1,18
jne L_AD
r1 = 1
[_G_ADC_flag] = r1
r1 = 2 //采样间隔控制
[G_Sum] = r1
jmp exit_Int
L_4Hz:
r2 = [_uiBlink] //TMB1
r1 = [P_IOB_Dir]
r1 ^= r2
[P_IOB_Dir] = r1
r1 = 0x0008
[P_INT_Clear] = r1 //清中断
exit_Int:
pop r1,r4 FROM [sp]
reti
//======================================================
// 函数名称: IRQ6()
// 汇编调用: _IRQ6
// 实现功能: 利用IRQ6_TMB2进行显示刷新.
// 入口参数: 无
// 出口参数: 无
// 破坏寄存器: r1~r4
//======================================================
_IRQ6:
push r1,r4 to [sp]
r1 = 0x0001
test r1,[P_INT_Ctrl]
jnz _IRQ6_TMB2
r1 = 0x0002
[P_INT_Clear]=r1
jmp exit
_IRQ6_TMB2:
r1 = 0x0001
[P_INT_Clear]=r1
call F_LED_Show
exit:
pop r1,r4 FROM [sp]
reti
//======================================================
// 以下中断没有用到
//======================================================
_FIQ:
reti
_IRQ0:
reti
_IRQ1:
reti
_IRQ3:
reti
_IRQ4:
reti
_IRQ7:
reti
_BREAK:
reti
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -