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