📄 isr.lst
字号:
C51 COMPILER V7.06 ISR 02/17/2004 14:42:22 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE ISR
OBJECT MODULE PLACED IN Isr.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE Isr.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*
2 //*************************************************************************
3 //
4 // P H I L I P S P R O P R I E T A R Y
5 //
6 // COPYRIGHT (c) 1999 BY PHILIPS SINGAPORE.
7 // -- ALL RIGHTS RESERVED --
8 //
9 // File Name: ISR.C
10 // Author: Hilbert Zhang ZhenYu
11 // Chew Thing Piao
12 // Created: Oct. 1 99
13 // Modified:
14 // Revision: 0.0.
15 //
16 //*************************************************************************
17 //
18 //*************************************************************************
19 */
20 #include <reg51.h> /* special function register declarations */
21 #undef GLOBAL_EXT
22 #include "SysCnfg.h"
23 #include "BasicTyp.h"
24 #include "Common.h"
25 #include "Hal4Sys.h"
26 #include "Hal4d12.h"
27
28 /*
29 //*************************************************************************
30 // Public data
31 //*************************************************************************
32 */
33 // bit Flags
34 STRUC_EXT BITFLAGS bFlags;
35
36 // Timer 0
37 BIT_EXT MCUBF_Timer;
38 INT8_EXT Hal4Sys_ClockTicks;
39
40 // D12 bit flags
41 BIT_EXT D12BF_SetupOverwritten;
42 BIT_EXT D12BF_Configuration;
43
44 // DefaultControlPipe Finate State Machine [One-Hot]
45 INT8_EXT BDATA_SEG DCPFSMstate;
46 BIT_EXT DCPFSM_SetupProc;
47 BIT_EXT DCPFSM_Datain;
48 BIT_EXT DCPFSM_Dataout;
49 BIT_EXT DCPFSM_COhandshake;
50 BIT_EXT DCPFSM_CIhandshake;
51 BIT_EXT DCPFSM_Stall;
52
53 INT8_EXT BDATA_SEG BOTFSMstate;
54 BIT_EXT DCPFSM_CBWProc;
55 BIT_EXT BOTFSM_DataIn;
C51 COMPILER V7.06 ISR 02/17/2004 14:42:22 PAGE 2
56 BIT_EXT BOTFSM_DataOut;
57 BIT_EXT BOTFSM_CSWProc;
58 BIT_EXT BOTFSM_CSW;
59 BIT_EXT BOTFSM_Stall;
60
61 // USB Device Request
62 STRUC_EXT DEVICE_REQUEST DCPDeviceRequest;
63 INT8_EXT UsbReq_Recipient;
64 INT8_EXT UsbReq_Type;
65 INT8_EXT UsbReq_Request;
66 BIT_EXT REQBF_DCPRequest_dir;
67 BIT_EXT REQBF_DCPRequest_EPdir;
68 BIT_EXT REQBF_StallDCPRequest;
69
70 // Default Control Pipe Tansfer DCPXfer
71 INT8_EXT BDATA_SEG Xfer_Space;
72 BIT_EXT DCPXfer_atMCUCODE;
73 BIT_EXT DCPXfer_atMCURAM;
74 BIT_EXT DCPXfer_atEEROM;
75 BIT_EXT DCPXfer_atATA;
76 BIT_EXT DCPXfer_atATASTR;
77
78 INT16_EXT DCPXfer_wResidue;
79 INT8_EXT * DCPXfer_pData;
80
81 /*
82 //*************************************************************************
83 // Private data
84 //*************************************************************************
85 */
86 INT8 BDATA_SEG ISR_eplts ;
87 sbit D12EP0LTS_SUCCESS = ISR_eplts^0; //数据接收/发送成功
88 sbit D12EP0LTS_SETUP = ISR_eplts^5; //setup信息包,1表示成功接收的信息包有一个SETIP标志
89
90 INT16 BDATA_SEG ISR_IR; // bit addressable data(16bits) from $20H->
91
92 sbit D12IS_EOT = ISR_IR^0; // D12 Interrupt Src
93 sbit D12IS_SUSPENDCHANGE= ISR_IR^15; // D12 Interrupt Src
94 sbit D12IS_BUSRESET = ISR_IR^14; // D12 Interrupt Src
95 sbit D12IS_ENDP2IN = ISR_IR^13; // D12 Interrupt Src
96 sbit D12IS_ENDP2OUT = ISR_IR^12; // D12 Interrupt Src
97 sbit D12IS_ENDP1IN = ISR_IR^11; // D12 Interrupt Src
98 sbit D12IS_ENDP1OUT = ISR_IR^10; // D12 Interrupt Src
99 sbit D12IS_ENDP0IN = ISR_IR^9; // D12 Interrupt Src
100 sbit D12IS_ENDP0OUT = ISR_IR^8; // D12 Interrupt Src
101
102
103 /*
104 //*************************************************************************
105 // Private Functions
106 //*************************************************************************
107 */
108
109 void ep0_txdone(void);
110 void ep0_rxdone(void);
111
112 void ep1_txdone(void);
113 void ep1_rxdone(void);
114
115 /*
116 //*************************************************************************
117 // Functions
C51 COMPILER V7.06 ISR 02/17/2004 14:42:22 PAGE 3
118 //*************************************************************************
119 */
120
121 timer_isr() interrupt 1
122 {
123 1 RaiseIRQL();
124 1 TIMER0_LOW = 0x00; // 1 MS interval @24MHz
125 1 TIMER0_HIGH =TIMER0_AT24MHZ; // 0xF8
126 1 Hal4Sys_ClockTicks++;
127 1 MCUBF_Timer = 1;
128 1 LowerIRQL();
129 1 }
130
131
132 usb_isr() interrupt 0
133 {
134 1 RaiseIRQL();
135 1 Hal4D12_ReadInterruptRegister(&ISR_IR);
136 1 Hal4D12_ReadLastTransactionStatus(4);
137 1
138 1 if(ISR_IR != 0)
139 1 {
140 2 if(D12IS_BUSRESET)
141 2 {
142 3 DCPFSMstate = USBFSM4DCP_IDLE; //USBFSM4DCP_IDLE =0x00
143 3 BOTFSMstate = USBFSM4BOT_IDLE; //USBFSM4BOT_IDLE =0x01
144 3 D12BF_SetupOverwritten = 0;
145 3 D12SUSPD = 1;
146 3 }
147 2
148 2 if(D12IS_SUSPENDCHANGE) //挂起,进入掉电模式
149 2 {
150 3 if( D12BF_SetupOverwritten==1 )
151 3 D12SUSPD=1;
152 3 else
153 3 D12SUSPD=0;
154 3
155 3 if(D12SUSPD == 1)
156 3 {
157 4 P0 = 0xFF;
158 4 P1 = 0xFF;
159 4 P2 = 0xFF;
160 4 P3 = 0xFF;
161 4 PCON |= 0x02; //Powerdown bit set
162 4 while (1);
163 4 }
164 3 }
165 2
166 2 if(D12IS_ENDP0OUT)
167 2 ep0_rxdone();
168 2 if(D12IS_ENDP0IN)
169 2 ep0_txdone();
170 2 if(D12IS_ENDP1IN)
171 2 ep1_txdone();
172 2 if(D12IS_ENDP1OUT)
173 2 ep1_rxdone();
174 2 }
175 1 LowerIRQL();
176 1 }
177
178 void ep0_rxdone(void) //接收处理
179 {
C51 COMPILER V7.06 ISR 02/17/2004 14:42:22 PAGE 4
180 1 ISR_eplts = Hal4D12_ReadLastTransactionStatus(0); // Clear interrupt flag
181 1
182 1 if (!D12EP0LTS_SUCCESS)//数据接收不成功,返回(sbit D12EP0LTS_SUCCESS = ISR_eplts^0)
183 1 return;
184 1
185 1 if (D12EP0LTS_SETUP) //接收到SETUP信号
186 1 {
187 2 if(DCPFSM_SetupProc || DCPFSM_Dataout || DCPFSM_Datain )
188 2 {
189 3 D12BF_SetupOverwritten = 1;
190 3 }
191 2 DCPFSMstate = USBFSM4DCP_SETUPPROC;//USBFSM4DCP_SETUPPROC =0x01
192 2 }
193 1 else /* not a setup packet, just a Data Out Packet */
194 1 {
195 2 if (DCPFSM_CIhandshake)
196 2 {
197 3 DCPFSMstate = USBFSM4DCP_IDLE;//USBFSM4BOT_IDLE =0x01
198 3 }
199 2 // else just let it stay in FIFO of Control-Out
200 2 }
201 1 }
202
203
204
205 void ep0_txdone(void) //发送处理
206 {
207 1 ISR_eplts = Hal4D12_ReadLastTransactionStatus(1); // Clear interrupt flag
208 1 if ( !D12EP0LTS_SUCCESS ) //数据接收不成功,返回
209 1 return;
210 1
211 1 if (DCPFSM_Datain) //DCPFSM_DataIn = DCPFSMstate^1
212 1 {
213 2 if( DCPXfer_wResidue >= EP0_PACKET_SIZE)
214 2 {
215 3 if(DCPXfer_atMCUCODE)
216 3 Hal4D12_WriteEPAtCode(1, EP0_PACKET_SIZE, DCPXfer_pData);
217 3 else if(DCPXfer_atMCURAM)
218 3 Hal4D12_WriteEndpoint(1, EP0_PACKET_SIZE, DCPXfer_pData);
219 3 else
220 3 return;
221 3 DCPXfer_pData += EP0_PACKET_SIZE;
222 3 DCPXfer_wResidue -= EP0_PACKET_SIZE;
223 3 /*
224 3 // State remains at USBFSM4DCP_DATAIN
225 3 */
226 3 }
227 2 else if( DCPXfer_wResidue != 0)
228 2 {
229 3 if(DCPXfer_atMCUCODE)
230 3 Hal4D12_WriteEPAtCode(1, (INT8)DCPXfer_wResidue, DCPXfer_pData );
231 3 else if(DCPXfer_atMCURAM)
232 3 Hal4D12_WriteEndpoint(1, (INT8)DCPXfer_wResidue, DCPXfer_pData );
233 3 else
234 3 return;
235 3 //DCPXfer_pData += DCPXfer_wResidue;
236 3 DCPXfer_wResidue = 0;
237 3 DCPFSMstate = USBFSM4DCP_HANDSHAKE4CI;
238 3 }
239 2 else // DCPXfer_wResidue == 0
240 2 {
241 3 // Send zero packet at the end
C51 COMPILER V7.06 ISR 02/17/2004 14:42:22 PAGE 5
242 3 Hal4D12_WriteEndpoint(1, 0, 0);
243 3 DCPFSMstate = USBFSM4DCP_HANDSHAKE4CI; // USBFSM4DCP_HANDSHAKE4CI =0x10
244 3 }
245 2 }
246 1 else if( DCPFSM_COhandshake )
247 1 {
248 2 DCPFSMstate = USBFSM4DCP_IDLE; // USBFSM4BOT_IDLE =0x01
249 2 }
250 1 // else just exit
251 1 #undef DCPXfer_wResidue
252 1 }
253
254
255 void ep1_txdone(void) //端点1,发送处理
256 {
257 1 Hal4D12_ReadLastTransactionStatus(3); /* Clear interrupt flag */
258 1 }
259
260 void ep1_rxdone(void) //端点1,接收处理
261 {
262 1 Hal4D12_ReadLastTransactionStatus(2); /* Clear interrupt flag */
263 1 }
264
265
266
267
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 348 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 3 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -