📄 isr.lst
字号:
C51 COMPILER V8.01 ISR 04/24/2006 19:23:09 PAGE 1
C51 COMPILER V8.01, COMPILATION OF MODULE ISR
OBJECT MODULE PLACED IN ISR.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ISR.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /*
2 //************************************************************************* //
3 //
4 //
5 // COPYRIGHT (c) 2006 BY FOSHAN LX.
6 // -- ALL RIGHTS RESERVED --
7 //
8 // File Name: ISR.C
9 // Author: guobin
10 // Created: 2006/04/20
11 // Modified:
12 // Revision: 2.0
13 //
14 //*************************************************************************
15 */
16
17 #include <stdio.h>
18 #include <string.h>
19
20 #include "hardware.h"
21
22 #include "d12ci.h"
23 #include "mainloop.h"
24 #include "usb100.h"
25
26 /*
27 //*************************************************************************
28 // Public static data
29 //*************************************************************************
30 */
31
32 EPPFLAGS bEPPflags;
33
34 UCHAR idata EP1GetBuff[EP1_PACKET_SIZE];
35
36 bit bdata LRNLEDFlag;
37
38 /* Control endpoint TX/RX buffers */
39 extern CONTROL_XFER ControlData;
40
41 extern UCHAR LNLEData,RNLEData;
42
43
44 code UCHAR LEDCode[]= //数码管编码表
45 {
46 0xFC, //'0'
47 0x60, //'1'
48 0xDA, //'2'
49 0xF2, //'3'
50 0x66, //'4'
51 0xB6, //'5'
52 0xBE, //'6'
53 0xE0, //'7'
54 0xFE, //'8'
55 0xF6, //'9'
C51 COMPILER V8.01 ISR 04/24/2006 19:23:09 PAGE 2
56 };
57
58 void HC164(UCHAR Dat)
59 {
60 1 UCHAR i;
61 1
62 1 HC164_CLK=0;
63 1 for(i=0;i<8;i++)
64 1 {
65 2 if(Dat&0x01) //移为顺序:LSB位先移出
66 2 HC164_AB=1;
67 2 else
68 2 HC164_AB=0;
69 2 HC164_CLK=1;
70 2 HC164_CLK=0;
71 2 Dat>>=1;
72 2 }
73 1 }
74
75 void OutPutNLED(void)
76 {
77 1 #define LLED 0
78 1 #define RLED 1
79 1
80 1 NLEDL=NLEDR=1;
81 1 if(LRNLEDFlag==LLED)
82 1 {
83 2 HC164(LEDCode[LNLEData]);
84 2 NLEDL=0;
85 2 }
86 1 else
87 1 {
88 2 HC164(LEDCode[RNLEData]);
89 2 NLEDR=0;
90 2 }
91 1
92 1 LRNLEDFlag=~LRNLEDFlag;
93 1
94 1 #undef LLED
95 1 #undef RLED
96 1 }
97
98 void T0_IRQ(void) interrupt 1
99 {
100 1 DISABLE;
101 1 TH0=0xE8; //T0:1ms
102 1 TL0=0x78;
103 1
104 1 OutPutNLED();
105 1
106 1 ENABLE;
107 1 }
108
109 void ep0_rxdone(void)
110 {
111 1 unsigned char ep_last, i;
112 1
113 1 ep_last = D12_ReadLastTransactionStatus(0); // Clear interrupt flag
114 1
115 1 if (ep_last & D12_SETUPPACKET) {
116 2
117 2 ControlData.wLength = 0;
C51 COMPILER V8.01 ISR 04/24/2006 19:23:09 PAGE 3
118 2 ControlData.wCount = 0;
119 2
120 2 if( D12_ReadEndpoint(0, (unsigned char *)(&(ControlData.DeviceRequest)),
121 2 sizeof(ControlData.DeviceRequest)) != sizeof(DEVICE_REQUEST) ) {
122 3
123 3 D12_SetEndpointStatus(0, 1);
124 3 D12_SetEndpointStatus(1, 1);
125 3 bEPPflags.bits.control_state = USB_IDLE;
126 3
127 3 return;
128 3 }
129 2
130 2 ControlData.DeviceRequest.wValue = SWAP(ControlData.DeviceRequest.wValue);
131 2 ControlData.DeviceRequest.wIndex = SWAP(ControlData.DeviceRequest.wIndex);
132 2 ControlData.DeviceRequest.wLength = SWAP(ControlData.DeviceRequest.wLength);
133 2
134 2 // Acknowledge setup here to unlock in/out endp
135 2 D12_AcknowledgeEndpoint(0);
136 2 D12_AcknowledgeEndpoint(1);
137 2
138 2 ControlData.wLength = ControlData.DeviceRequest.wLength;
139 2 ControlData.wCount = 0;
140 2
141 2 if (ControlData.DeviceRequest.bmRequestType & (unsigned char)USB_ENDPOINT_DIRECTION_MASK) {
142 3 bEPPflags.bits.setup_packet = 1;
143 3 bEPPflags.bits.control_state = USB_IDLE; /* get command */
144 3 }
145 2 else {
146 3 if (ControlData.DeviceRequest.wLength == 0) {
147 4 bEPPflags.bits.setup_packet = 1;
148 4 bEPPflags.bits.control_state = USB_IDLE; /* set command */
149 4 }
150 3 else {
151 4 if(ControlData.DeviceRequest.wLength > MAX_CONTROLDATA_SIZE) {
152 5 bEPPflags.bits.control_state = USB_IDLE;
153 5 D12_SetEndpointStatus(0, 1);
154 5 D12_SetEndpointStatus(1, 1);
155 5 }
156 4 else {
157 5 bEPPflags.bits.control_state = USB_RECEIVE; /* set command with OUT token */
158 5 }
159 4 } // set command with data
160 3 } // else set command
161 2 } // if setup packet
162 1
163 1 else if (bEPPflags.bits.control_state == USB_RECEIVE) {
164 2 i = D12_ReadEndpoint(0, ControlData.dataBuffer + ControlData.wCount,
165 2 EP0_PACKET_SIZE);
166 2
167 2 ControlData.wCount += i;
168 2 if( i != EP0_PACKET_SIZE || ControlData.wCount >= ControlData.wLength) {
169 3 bEPPflags.bits.setup_packet = 1;
170 3 bEPPflags.bits.control_state = USB_IDLE;
171 3 }
172 2 }
173 1
174 1 else {
175 2 bEPPflags.bits.control_state = USB_IDLE;
176 2 }
177 1 }
178
179 void ep0_txdone(void)
C51 COMPILER V8.01 ISR 04/24/2006 19:23:09 PAGE 4
180 {
181 1 short i = ControlData.wLength - ControlData.wCount;
182 1
183 1 D12_ReadLastTransactionStatus(1); // Clear interrupt flag
184 1
185 1 if (bEPPflags.bits.control_state != USB_TRANSMIT)
186 1 return;
187 1
188 1 if( i >= EP0_PACKET_SIZE) {
189 2 D12_WriteEndpoint(1, ControlData.pData + ControlData.wCount, EP0_PACKET_SIZE);
190 2 ControlData.wCount += EP0_PACKET_SIZE;
191 2
192 2 bEPPflags.bits.control_state = USB_TRANSMIT;
193 2 }
194 1 else if( i != 0) {
195 2 D12_WriteEndpoint(1, ControlData.pData + ControlData.wCount, i);
196 2 ControlData.wCount += i;
197 2
198 2 bEPPflags.bits.control_state = USB_IDLE;
199 2 }
200 1 else if (i == 0){
201 2 D12_WriteEndpoint(1, 0, 0); // Send zero packet at the end ???
202 2
203 2 bEPPflags.bits.control_state = USB_IDLE;
204 2 }
205 1 }
206
207 void ep1_txdone(void)
208 {
209 1 D12_ReadLastTransactionStatus(3); /* Clear interrupt flag */
210 1 }
211
212 void ep1_rxdone(void)
213 {
214 1 D12_ReadLastTransactionStatus(2); /* Clear interrupt flag */
215 1
216 1 D12_ReadEndpoint(2, EP1GetBuff, EP1_PACKET_SIZE);
217 1
218 1 bEPPflags.bits.ep1_rxdone=1;
219 1 }
220
221 void main_rxdone(void)
222 {
223 1 D12_ReadLastTransactionStatus(4); /* Clear interrupt flag */
224 1
225 1 D12_ReadEndpoint(4, EP1GetBuff, EP1_PACKET_SIZE);
226 1
227 1 bEPPflags.bits.ep2_rxdone=1;
228 1 }
229
230 void main_txdone(void)
231 {
232 1 D12_ReadLastTransactionStatus(5); /* Clear interrupt flag */
233 1 }
234
235 void fn_usb_isr()
236 {
237 1 unsigned int i_st;
238 1
239 1 bEPPflags.bits.in_isr = 1;
240 1
241 1 i_st = D12_ReadInterruptRegister();
C51 COMPILER V8.01 ISR 04/24/2006 19:23:09 PAGE 5
242 1
243 1 if(i_st != 0) {
244 2 if(i_st & D12_INT_BUSRESET)
245 2 bEPPflags.bits.bus_reset = 1;
246 2
247 2 if(i_st & D12_INT_SUSPENDCHANGE)
248 2 bEPPflags.bits.suspend = 1;
249 2
250 2 if(i_st & D12_INT_ENDP0IN)
251 2 ep0_txdone();
252 2 if(i_st & D12_INT_ENDP0OUT)
253 2 ep0_rxdone();
254 2 if(i_st & D12_INT_ENDP1IN)
255 2 ep1_txdone();
256 2 if(i_st & D12_INT_ENDP1OUT)
257 2 ep1_rxdone();
258 2 if(i_st & D12_INT_ENDP2IN)
259 2 main_txdone();
260 2 if(i_st & D12_INT_ENDP2OUT)
261 2 main_rxdone();
262 2 }
263 1
264 1 bEPPflags.bits.in_isr = 0;
265 1 }
266
267 void usb_isr(void) interrupt 2
268 {
269 1 DISABLE;
270 1 fn_usb_isr();
271 1 ENABLE;
272 1 }
273
274
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 712 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 4
IDATA SIZE = 16 ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -