📄 main.s
字号:
;****************************************************************************
; 文 件 名:EINT3_VECT.C
; 功 能:使用外部中断3进行B1的控制,每当有一次中断时,即取反B1控制口,以便指示中断输入。
; 使用向量中断方式,EINT3下降沿有效。
; 说 明:将跳线器JP2 JP4短接,JP7断开,然后反复按下与释放KEY1。
;***************************************************************************
INCLUDE LPC2294.INC
EXPORT MAIN
VIC_BASE EQU 0xFFFFF000
BEEPCON EQU 0x00000080 ; P0.7引脚控制B1,低电平蜂鸣
AREA EINT1_VECTC,CODE,READONLY
ENTRY
MAIN MSR CPSR_c, #0x5F ; 切换处理器工作模式,并允许IRQ中断
LDR R0,=PINSEL0
MOV R1,#0x00000180
STR R1,[R0] ; 设置管脚连接,P0.20设置为EINT3
LDR R0,=IO0DIR
LDR R1,=BEEPCON
STR R1,[R0] ; 设置BEEP控制口为输出
LDR R0,=MEMMAP
MOV R1,#0x03
STR R1,[R0] ; REMAP操作(若写到片内FLASH,则不需要REMAP)
EINT1_INI LDR R0,=EXTMODE
MOV R1,#0x08
STR R1,[R0] ; 设置EINT3中断为边沿触发模式
LDR R0,=EXTPOLAR
MOV R1,#0x00
STR R1,[R0] ; 设置EINT3中断为下降沿触发
LDR R0,=EXTINT
MOV R1,#0x08
STR R1,[R0] ; 清除EINT3中断标志
LDR R0,=VIC_BASE
MOV R1,#0x00000000
STR R1,[R0,#0x0C] ; 设置所有中断分配为IRQ中断
MOV R1,#0x31
STR R1,[R0,#0x200] ; 分配EINT3中断到向量中断0
LDR R1,=IRQ_EINT3
STR R1,[R0,#0x100] ; 设置中断服务程序地址
MOV R1,#0x00020000
STR R1,[R0,#0x10] ; 使能EINT3中断
WAIT_IRQ B WAIT_IRQ
;******************************************************************************
; 名 称:IRQ_EINT3
; 功 能:EINT3中断服务程序
; 入口参数:无
; 出口参数:无
; 占用资源:R0、R1
;******************************************************************************
IRQ_EINT3
LDR R0,=IO0SET
LDR R1,[R0] ; 读取IO0SET的值
ANDS R1,R1,#BEEPCON
LDREQ R0,=IO0SET ; 设置R0=IO0SET
LDRNE R0,=IO0CLR ; 或设置R0=IO0CLR
MOV R1,#BEEPCON
STR R1,[R0]
LDR R0,=EXTINT
MOV R1,#0x08
STR R1,[R0] ; EXTINT=0x08,清除EINT3中断标志
LDR R0,=VICVectAddr
MOV R1,#0
STR R1,[R0] ; VICVectAddr=0
SUBS PC,LR,#4 ; IRQ中断返回
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -