📄 isr.src
字号:
; .\isr.SRC generated from: isr.c
; COMPILER INVOKED BY:
; C:\Keil\C51\BIN\C51.EXE isr.c DEBUG OBJECTEXTEND SRC(.\isr.SRC)
$NOMOD51
NAME ISR
P0 DATA 080H
P1 DATA 090H
P2 DATA 0A0H
P3 DATA 0B0H
T0 BIT 0B0H.4
AC BIT 0D0H.6
MCU_D12CS BIT 090H.6
T1 BIT 0B0H.5
EA BIT 0A8H.7
IE DATA 0A8H
RD BIT 0B0H.7
ES BIT 0A8H.4
IP DATA 0B8H
RI BIT 098H.0
INT0 BIT 0B0H.2
CY BIT 0D0H.7
TI BIT 098H.1
INT1 BIT 0B0H.3
PS BIT 0B8H.4
SP DATA 081H
OV BIT 0D0H.2
WR BIT 0B0H.6
SBUF DATA 099H
PCON DATA 087H
SCON DATA 098H
TMOD DATA 089H
TCON DATA 088H
MCU_A0 BIT 090H.4
D12SUSPD BIT 0B0H.3
IE0 BIT 088H.1
IE1 BIT 088H.3
B DATA 0F0H
ACC DATA 0E0H
ET0 BIT 0A8H.1
ET1 BIT 0A8H.3
TF0 BIT 088H.5
TF1 BIT 088H.7
MCU_LED0 BIT 090H.2
RB8 BIT 098H.2
TH0 DATA 08CH
MCU_LED1 BIT 090H.3
EX0 BIT 0A8H.0
IT0 BIT 088H.0
TH1 DATA 08DH
TB8 BIT 098H.3
EX1 BIT 0A8H.2
IT1 BIT 088H.2
P BIT 0D0H.0
SM0 BIT 098H.7
TL0 DATA 08AH
SM1 BIT 098H.6
TL1 DATA 08BH
SM2 BIT 098H.5
PT0 BIT 0B8H.1
PT1 BIT 0B8H.3
RS0 BIT 0D0H.3
TR0 BIT 088H.4
RS1 BIT 0D0H.4
TR1 BIT 088H.6
PX0 BIT 0B8H.0
PX1 BIT 0B8H.2
DPH DATA 083H
DPL DATA 082H
REN BIT 098H.4
MCU_D12RST BIT 090H.7
MCU_SWM0 BIT 090H.0
RXD BIT 0B0H.0
MCU_SWM1 BIT 090H.1
TXD BIT 0B0H.1
F0 BIT 0D0H.5
PSW DATA 0D0H
?PR?timer_isr?ISR SEGMENT CODE
?PR?usb_isr?ISR SEGMENT CODE
?PR?fn_usb_isr?ISR SEGMENT CODE
?DT?fn_usb_isr?ISR SEGMENT DATA OVERLAYABLE
?PR?bus_reset?ISR SEGMENT CODE
?PR?ProcessCtrlOutEP?ISR SEGMENT CODE
?PR?ProcessCtrlInEP?ISR SEGMENT CODE
?DT?ProcessCtrlInEP?ISR SEGMENT DATA OVERLAYABLE
?C_INITSEG SEGMENT CODE
?DT?ISR SEGMENT DATA
?ID?ISR SEGMENT IDATA
EXTRN CODE (stall_ep0)
EXTRN CODE (_D12_ReadLastTransactionStatus)
EXTRN CODE (_D12_AcknowledgeEndpoint)
EXTRN CODE (D12_ReadInterruptRegister)
EXTRN CODE (_D12_ReadEndpoint)
EXTRN DATA (?_D12_ReadEndpoint?BYTE)
EXTRN CODE (_D12_WriteEndpoint)
EXTRN DATA (?_D12_WriteEndpoint?BYTE)
EXTRN DATA (bEPPflags)
EXTRN DATA (ControlData)
PUBLIC GenEpBuf
PUBLIC ClockTicks
PUBLIC ProcessCtrlInEP
PUBLIC ProcessCtrlOutEP
PUBLIC bus_reset
PUBLIC fn_usb_isr
PUBLIC usb_isr
PUBLIC timer_isr
RSEG ?DT?fn_usb_isr?ISR
?fn_usb_isr?BYTE:
ORG 2
len?240: DS 1
ORG 0
i_st?241: DS 2
RSEG ?DT?ProcessCtrlInEP?ISR
?ProcessCtrlInEP?BYTE:
i?544: DS 2
RSEG ?DT?ISR
ClockTicks: DS 4
RSEG ?ID?ISR
GenEpBuf: DS 16
RSEG ?C_INITSEG
DB 004H
DB ClockTicks
DB 000H,000H,000H,000H ; long
; /*
; //*************************************************************************
; //
; // BASBA P R O P R I E T A R Y
; //
; // COPYRIGHT (c) 2003 BY BASBA USA.
; // -- ALL RIGHTS RESERVED --
; //
; // File Name: isr.c
; // Purpose: Handles the interrupt generated by PDIUSBD12. It retrieve
; // data from PDIUSBD12's internal FIFO to CPU memory, and
; // setup proper event flags to inform mainloop for processing
; // Author: Shuming Yu
; // Created: 10 May 2003
; // Modified:
; // Revision: 1.0
; //
; //*************************************************************************
; */
;
; #include <reg51.h> /* special function register declarations */
;
; #include "d12hal.h"
; #include "cmds.h"
; #include "mainloop.h"
; #include "usbStruc.h"
;
; #define INTERRUPT_INT0_Overflow 0
; #define INTERRUPT_Timer_0_Overflow 1
;
; void bus_reset(void);
;
; void ProcessCtrlInEP(void);
; void ProcessCtrlOutEP(void);
;
; //*************************************************************************
; // Public static data
; //*************************************************************************
;
; extern EPPFLAGS bEPPflags; /* USB event flags */
; extern CONTROL_XFER ControlData; /* Control endpoint TX/RX buffers */
;
; /* ISR static vars */
; //unsigned char idata GenEpBuf[EP1_PACKET_SIZE];
; unsigned char idata GenEpBuf[EP0_PACKET_SIZE];
; //IO_REQUEST idata ioRequest;
;
; unsigned long ClockTicks = 0;
;
CSEG AT 0000BH
LJMP timer_isr
; timer_isr() interrupt INTERRUPT_Timer_0_Overflow
RSEG ?PR?timer_isr?ISR
USING 0
timer_isr:
PUSH ACC
PUSH PSW
MOV PSW,#00H
PUSH AR7
USING 0
; SOURCE LINE # 50
; {
; DISABLE;
; SOURCE LINE # 52
CLR EA
; ClockTicks++;
; SOURCE LINE # 53
MOV A,ClockTicks+03H
ADD A,#01H
MOV ClockTicks+03H,A
CLR A
ADDC A,ClockTicks+02H
MOV ClockTicks+02H,A
CLR A
ADDC A,ClockTicks+01H
MOV ClockTicks+01H,A
CLR A
ADDC A,ClockTicks
MOV ClockTicks,A
; bEPPflags.bits.timer = 1;
; SOURCE LINE # 54
MOV R7,bEPPflags
MOV A,R7
ORL A,#01H
MOV bEPPflags,A
; ENABLE;
; SOURCE LINE # 55
SETB EA
; }
; SOURCE LINE # 56
POP AR7
POP PSW
POP ACC
RETI
; END OF timer_isr
CSEG AT 00003H
LJMP usb_isr
;
; usb_isr() interrupt INTERRUPT_INT0_Overflow
RSEG ?PR?usb_isr?ISR
USING 0
usb_isr:
PUSH ACC
PUSH B
PUSH DPH
PUSH DPL
PUSH PSW
MOV PSW,#00H
PUSH AR0
PUSH AR1
PUSH AR2
PUSH AR3
PUSH AR4
PUSH AR5
PUSH AR6
PUSH AR7
USING 0
; SOURCE LINE # 58
; {
; DISABLE;
; SOURCE LINE # 60
CLR EA
; fn_usb_isr();
; SOURCE LINE # 61
LCALL fn_usb_isr
; ENABLE;
; SOURCE LINE # 62
SETB EA
; }
; SOURCE LINE # 63
POP AR7
POP AR6
POP AR5
POP AR4
POP AR3
POP AR2
POP AR1
POP AR0
POP PSW
POP DPL
POP DPH
POP B
POP ACC
RETI
; END OF usb_isr
;
; /* Interrupt service subroutine */
; void fn_usb_isr()
RSEG ?PR?fn_usb_isr?ISR
fn_usb_isr:
USING 0
; SOURCE LINE # 66
; {
; SOURCE LINE # 67
; unsigned int i_st;
;
; bEPPflags.bits.in_isr = 1;
; SOURCE LINE # 70
MOV R7,bEPPflags
MOV A,R7
ORL A,#020H
MOV bEPPflags,A
;
; i_st = D12_ReadInterruptRegister();
; SOURCE LINE # 72
LCALL D12_ReadInterruptRegister
MOV i_st?241,R6
MOV i_st?241+01H,R7
;
; if(i_st != 0) {
; SOURCE LINE # 74
MOV A,i_st?241+01H
ORL A,i_st?241
JZ ?C0003
; if(i_st & D12_INT_BUSRESET) {
; SOURCE LINE # 75
MOV A,i_st?241+01H
JNB ACC.6,?C0004
; bus_reset();
; SOURCE LINE # 76
LCALL bus_reset
; bEPPflags.bits.bus_reset = 1;
; SOURCE LINE # 77
MOV R7,bEPPflags
MOV A,R7
ORL A,#02H
MOV bEPPflags,A
; }
; SOURCE LINE # 78
?C0004:
; if(i_st & D12_INT_EOT)
; SOURCE LINE # 79
?C0005:
; ;
; if(i_st & D12_INT_SUSPENDCHANGE)
; SOURCE LINE # 81
MOV A,i_st?241+01H
JNB ACC.7,?C0006
; bEPPflags.bits.suspend = 1;
; SOURCE LINE # 82
MOV R7,bEPPflags
MOV A,R7
ORL A,#04H
MOV bEPPflags,A
?C0006:
;
; if(i_st & D12_INT_ENDP0IN)
; SOURCE LINE # 84
MOV A,i_st?241+01H
JNB ACC.1,?C0007
; /* Control Endpoint IN Interrupt */
; ProcessCtrlInEP();
; SOURCE LINE # 86
LCALL ProcessCtrlInEP
?C0007:
; if(i_st & D12_INT_ENDP0OUT)
; SOURCE LINE # 87
MOV A,i_st?241+01H
JNB ACC.0,?C0008
; /* Control Endpoint OUT Interrupt */
; ProcessCtrlOutEP();
; SOURCE LINE # 89
LCALL ProcessCtrlOutEP
?C0008:
; if(i_st & D12_INT_ENDP1IN) {
; SOURCE LINE # 90
MOV A,i_st?241+01H
JNB ACC.3,?C0009
; /* Endpoint 1 IN Interrupt (generic input) */
; D12_ReadLastTransactionStatus(3); /* Clear interrupt flag */
; SOURCE LINE # 92
MOV R7,#03H
LCALL _D12_ReadLastTransactionStatus
; /* send data back to host */
; bEPPflags.bits.ep1_sxdone = 1; //host request to send data
; SOURCE LINE # 94
MOV R7,bEPPflags+01H
MOV A,R7
ORL A,#08H
MOV bEPPflags+01H,A
; }
; SOURCE LINE # 95
?C0009:
; if(i_st & D12_INT_ENDP1OUT)
; SOURCE LINE # 96
MOV A,i_st?241+01H
JNB ACC.2,?C0003
; { /* Endpoint 1 OUT Interrupt (generic output) */
; SOURCE LINE # 97
; unsigned char len;
;
; D12_ReadLastTransactionStatus(2); /* Clear interrupt flag */
; SOURCE LINE # 100
MOV R7,#02H
LCALL _D12_ReadLastTransactionStatus
; len = D12_ReadEndpoint(2, GenEpBuf, sizeof(GenEpBuf));
; SOURCE LINE # 101
MOV R3,#00H
MOV R2,#HIGH (GenEpBuf)
MOV R1,#LOW (GenEpBuf)
MOV ?_D12_ReadEndpoint?BYTE+04H,#010H
MOV R7,#02H
LCALL _D12_ReadEndpoint
MOV len?240,R7
; if(len != 0)
; SOURCE LINE # 102
MOV A,len?240
JZ ?C0003
; bEPPflags.bits.ep1_rxdone = 1;
; SOURCE LINE # 103
MOV R7,bEPPflags+01H
MOV A,R7
ORL A,#04H
MOV bEPPflags+01H,A
; }
; SOURCE LINE # 104
; //if(i_st & D12_INT_ENDP2IN)
; // main_txdone();
; //if(i_st & D12_INT_ENDP2OUT)
; // main_rxdone();
; }
; SOURCE LINE # 109
?C0003:
;
; bEPPflags.bits.in_isr = 0;
; SOURCE LINE # 111
MOV R7,bEPPflags
MOV A,R7
ANL A,#0DFH
MOV bEPPflags,A
; }
; SOURCE LINE # 112
RET
; END OF fn_usb_isr
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -