?? isr.lst
字號:
C51 COMPILER V7.06 ISR 03/19/2006 13:40:25 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE ISR
OBJECT MODULE PLACED IN ISR.OBJ
COMPILER INVOKED BY: D:\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) 1997 BY PHILIPS SINGAPORE.
7 // -- ALL RIGHTS RESERVED --
8 //
9 // File Name: ISR.C
10 // Author: Wenkai Du
11 // Created: 19 Dec 97
12 // Modified:
13 // Revision: 3.0
14 //
15 //*************************************************************************
16 //
17 // 98/11/25 Added I/O mode Main endpoints access. (WK)
18 //*************************************************************************
19 */
20 #include <stdio.h>
21 #include <string.h>
22 #ifdef __C51__
23 #include <reg51.h> /* special function register declarations */
24 #endif
25 #include "epphal.h"
26 #include "d12ci.h"
27 #include "mainloop.h"
28 #include "usb100.h"
29
30 extern void bus_reset(void);
31 extern void dma_eot();
32 extern void ep0_txdone(void);
33 extern void ep0_rxdone(void);
34
35 extern void ep1_txdone(void);
36 extern void ep1_rxdone(void);
37 extern void main_txdone(void);
38 extern void main_rxdone(void);
39
40 /*
41 //*************************************************************************
42 // Public static data
43 //*************************************************************************
44 */
45
46 EPPFLAGS bEPPflags;
47
48 /* Control endpoint TX/RX buffers */
49 extern CONTROL_XFER ControlData;
50
51 /* ISR static vars */
52 unsigned char idata GenEpBuf[EP1_PACKET_SIZE]={0,0,0,0};
53 unsigned char idata EpBuf[EP2_PACKET_SIZE];
54 //IO_REQUEST idata ioRequest;
55
C51 COMPILER V7.06 ISR 03/19/2006 13:40:25 PAGE 2
56
57 usb_isr() interrupt 2
58 {
59 1 DISABLE;
60 1 fn_usb_isr();
61 1 ENABLE;
62 1 }
63
64 void fn_usb_isr()
65 {
66 1 unsigned int i_st;
67 1
68 1 bEPPflags.bits.in_isr = 1;
69 1
70 1 i_st = D12_ReadInterruptRegister();
71 1
72 1 if(i_st != 0) {
73 2 if(i_st & D12_INT_BUSRESET)
74 2 {
75 3 bus_reset();
76 3 bEPPflags.bits.bus_reset = 1;
77 3 }
78 2 else
79 2 {
80 3 if(i_st & D12_INT_EOT)
81 3 dma_eot();
82 3 if(i_st & D12_INT_SUSPENDCHANGE)
83 3 bEPPflags.bits.suspend = 1;
84 3
85 3 if(i_st & D12_INT_ENDP0IN)
86 3 ep0_txdone();
87 3 if(i_st & D12_INT_ENDP0OUT)
88 3 ep0_rxdone();
89 3 if(i_st & D12_INT_ENDP1IN)
90 3 ep1_txdone();
91 3 if(i_st & D12_INT_ENDP1OUT)
92 3 ep1_rxdone();
93 3 if(i_st & D12_INT_ENDP2IN)
94 3 main_txdone();
95 3 if(i_st & D12_INT_ENDP2OUT)
96 3 main_rxdone();
97 3 }
98 2 }
99 1
100 1 bEPPflags.bits.in_isr = 0;
101 1 }
102
103 void bus_reset(void)
104 {
105 1 }
106
107 void ep0_rxdone(void)
108 {
109 1 unsigned char ep_last, i;
110 1
111 1 ep_last = D12_ReadLastTransactionStatus(0); // Clear interrupt flag
112 1
113 1 if (ep_last & D12_SETUPPACKET) {
114 2
115 2 ControlData.wLength = 0;
116 2 ControlData.wCount = 0;
117 2
C51 COMPILER V7.06 ISR 03/19/2006 13:40:25 PAGE 3
118 2 if( D12_ReadEndpoint(0, sizeof(ControlData.DeviceRequest),
119 2 (unsigned char *)(&(ControlData.DeviceRequest))) != sizeof(DEVICE_REQUEST) ) {
120 3 //setup包出錯,返回
121 3 D12_SetEndpointStatusIsr(0, 1);
122 3 D12_SetEndpointStatusIsr(1, 1);
123 3 bEPPflags.bits.control_state = USB_IDLE;
124 3
125 3 return;
126 3 }
127 2
128 2 ControlData.DeviceRequest.wValue = SWAP(ControlData.DeviceRequest.wValue);
129 2 ControlData.DeviceRequest.wIndex = SWAP(ControlData.DeviceRequest.wIndex);
130 2 ControlData.DeviceRequest.wLength = SWAP(ControlData.DeviceRequest.wLength);
131 2
132 2 // Acknowledge setup here to unlock in/out endp
133 2 D12_AcknowledgeEndpoint(0);
134 2 D12_AcknowledgeEndpoint(1);
135 2
136 2 ControlData.wLength = ControlData.DeviceRequest.wLength;
137 2 ControlData.wCount = 0;
138 2
139 2 if (ControlData.DeviceRequest.bmRequestType & (unsigned char)USB_ENDPOINT_DIRECTION_MASK) {
140 3 bEPPflags.bits.setup_packet = 1;
141 3 bEPPflags.bits.control_state = USB_TRANSMIT; /* get command */
142 3 }
143 2 else {
144 3 if (ControlData.DeviceRequest.wLength == 0) {
145 4 bEPPflags.bits.setup_packet = 1;
146 4 bEPPflags.bits.control_state = USB_IDLE; /* set command */
147 4 }
148 3 else {
149 4 if(ControlData.DeviceRequest.wLength > MAX_CONTROLDATA_SIZE) {
150 5 bEPPflags.bits.control_state = USB_IDLE;
151 5 D12_SetEndpointStatusIsr(0, 1);
152 5 D12_SetEndpointStatusIsr(1, 1);
153 5 }
154 4 else {
155 5 bEPPflags.bits.control_state = USB_RECEIVE; /* set command with OUT token */
156 5 }
157 4 } // set command with data
158 3 } // else set command
159 2 } // if setup packet
160 1
161 1 else if (bEPPflags.bits.control_state == USB_RECEIVE) {
162 2 i = D12_ReadEndpoint(0, EP0_PACKET_SIZE,
163 2 ControlData.dataBuffer + ControlData.wCount);
164 2
165 2 ControlData.wCount += i;
166 2 if( i != EP0_PACKET_SIZE || ControlData.wCount >= ControlData.wLength) {
167 3 bEPPflags.bits.setup_packet = 1;
168 3 bEPPflags.bits.control_state = USB_IDLE;
169 3 }
170 2 }
171 1
172 1 else {
173 2 bEPPflags.bits.control_state = USB_IDLE;
174 2 }
175 1 }
176
177 void ep0_txdone(void)
178 {
179 1 short i = ControlData.wLength - ControlData.wCount;
C51 COMPILER V7.06 ISR 03/19/2006 13:40:25 PAGE 4
180 1
181 1 D12_ReadLastTransactionStatus(1); // Clear interrupt flag
182 1
183 1 if (bEPPflags.bits.control_state != USB_TRANSMIT)
184 1 return;
185 1
186 1 if( i >= EP0_PACKET_SIZE) {
187 2 D12_WriteEndpointIsr(1, EP0_PACKET_SIZE, ControlData.pData + ControlData.wCount);
188 2 ControlData.wCount += EP0_PACKET_SIZE;
189 2
190 2 bEPPflags.bits.control_state = USB_TRANSMIT;
191 2 }
192 1 else if( i != 0) {
193 2 D12_WriteEndpointIsr(1, i, ControlData.pData + ControlData.wCount);
194 2 ControlData.wCount += i;
195 2
196 2 bEPPflags.bits.control_state = USB_IDLE;
197 2 }
198 1 else if (i == 0){
199 2 D12_WriteEndpointIsr(1, 0, 0); // Send zero packet at the end ???
200 2
201 2 bEPPflags.bits.control_state = USB_IDLE;
202 2 }
203 1 }
204
205 void dma_eot(void)
206 {
207 1
208 1 }
209
210 void ep1_txdone(void)
211 {
212 1 D12_ReadLastTransactionStatus(3); /* Clear interrupt flag */
213 1 }
214
215 void ep1_rxdone(void)
216 {
217 1 unsigned char len;
218 1
219 1 D12_ReadLastTransactionStatus(2); /* Clear interrupt flag */
220 1
221 1 len = D12_ReadEndpoint(2, sizeof(GenEpBuf), GenEpBuf);
222 1
223 1 if(len != 0)
224 1 {
225 2 bEPPflags.bits.ep1_rxdone = 1;
226 2
227 2 }
228 1 }
229
230 void main_txdone(void)
231 {
232 1 D12_ReadLastTransactionStatus(5);
233 1 }
234
235 void main_rxdone(void)
236 {
237 1 unsigned char len;
238 1 D12_ReadLastTransactionStatus(4);
239 1 len = D12_ReadEndpoint(4, sizeof(EpBuf),EpBuf);
240 1
241 1 if(len != 0)
C51 COMPILER V7.06 ISR 03/19/2006 13:40:25 PAGE 5
242 1 {
243 2 bEPPflags.bits.main_rxdone = 1;
244 2 }
245 1 }
246
247
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 635 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 4
IDATA SIZE = 68 ----
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 + -