📄 isr_intx_pins.s
字号:
;START_HEADER
;
; dsPIC30F6014 Demo Source File
; (c) Copyright 2005 Microchip Technology, All rights reserved
;
; --------------------------------------------------------------------------
; File Revision History:
; --------------------------------------------------------------------------
;
; $Log: isr_intx_pins.s,v $
; Revision 1.3 2005/04/04 23:43:59 VasukiH
; Updates to comments in file header
;
; Revision 1.2 2005/04/04 23:15:30 VasukiH
; Updates for MPLAB C30 v1.30 compatiblity
;
; Revision 1.1.1.1 2003/08/23 00:38:32 VasukiH
; First import of demo source into CVS Repository
;
;
;
; --------------------------------------------------------------------------
;
; Software and Development Tools Info:
; --------------------------------------------------------------------------
; Tool Version
; --------------------------------------------------------------------------
; MPLAB IDE 7.0
; MPLAB C30 Toolsuite 1.30
; dsPICDEM(TM) Processor Board 1.10
; --------------------------------------------------------------------------
;
; File Notes:
; 1. Each INTx pin ISR execution will set a bit corresponding to the switch
; that was pressed. These bits reside in the "SwitchPress" variable .
; 2. A software delay ~40ms is provided within the ISR to help account
; for any bounce that may occur on the INTx pin.
;
;END_HEADER
.include "p30fxxxx.inc"
.equ BOUNCE_ITERATIONS, 1
;Global Declarations for routines in Program Memory
.global __INT1Interrupt
.global __INT2Interrupt
.global __INT3Interrupt
.global __INT4Interrupt
.global SwitchPress
.section .ndata, data, near
SwitchPress: .hword 0x0000
BounceDelayPeriod: .hword 0xFFFF
BounceDelayTimer: .hword 0x0000
;User code section in Program Memory
.section .text
;..............................................................................
__INT1Interrupt:
push.d w0
push T4CON
bclr T4CON, #TON
mov #BOUNCE_ITERATIONS, w1
delay_loop1:
mov BounceDelayPeriod, w0
mov w0, BounceDelayTimer
test_delay_int1:
dec BounceDelayTimer
cp0 BounceDelayTimer
bra nz, test_delay_int1
dec w1, w1
bra nz, delay_loop1
btsc PORTA, #RA12
bra exit1
clr SwitchPress
bset SwitchPress, #0x1
exit1: bclr IFS1, #INT1IF ;Ensure flag is reset
pop T4CON
pop.d w0
retfie ;Return from Interrupt Service Routine
;..............................................................................
__INT2Interrupt:
push.d w0
push T4CON
bclr T4CON, #TON
mov #BOUNCE_ITERATIONS, w1
delay_loop2:
mov BounceDelayPeriod, w0
mov w0, BounceDelayTimer
test_delay_int2:
dec BounceDelayTimer
cp0 BounceDelayTimer
bra nz, test_delay_int2
dec w1, w1
bra nz, delay_loop2
btsc PORTA, #RA13
bra exit2
clr SwitchPress
bset SwitchPress, #0x2
exit2: bclr IFS1, #INT2IF ;Ensure flag is reset
pop T4CON
pop.d w0
retfie ;Return from Interrupt Service Routine
;..............................................................................
__INT3Interrupt:
push.d w0
push T4CON
bclr T4CON, #TON
mov #BOUNCE_ITERATIONS, w1
delay_loop3:
mov BounceDelayPeriod, w0
mov w0, BounceDelayTimer
test_delay_int3:
dec BounceDelayTimer
cp0 BounceDelayTimer
bra nz, test_delay_int3
dec w1, w1
bra nz, delay_loop3
btsc PORTA, #RA14
bra exit3
clr SwitchPress
bset SwitchPress, #0x3
exit3: bclr IFS2, #INT3IF ;Ensure flag is reset
pop T4CON
pop.d w0
retfie ;Return from Interrupt Service Routine
;..............................................................................
__INT4Interrupt:
push.d w0
push T4CON
bclr T4CON, #TON
mov #BOUNCE_ITERATIONS, w1
delay_loop4:
mov BounceDelayPeriod, w0
mov w0, BounceDelayTimer
test_delay_int4:
dec BounceDelayTimer
cp0 BounceDelayTimer
bra z, test_delay_int4
dec w1, w1
bra nz, delay_loop4
btsc PORTA, #RA15
bra exit4
clr SwitchPress
bset SwitchPress, #0x4
exit4: bclr IFS2, #INT4IF ;Ensure flag is reset
pop T4CON
pop.d w0
retfie ;Return from Interrupt Service Routine
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -