📄 kisr.lst
字号:
83 2 if(i_st & D12_INT_ENDP2OUT)
84 2 main_rxdone();
85 2
86 2 }
87 1
88 1 bEPPflags.bits.in_isr = 0;
89 1
90 1 }
91
92 usb_isr() interrupt 0
93 {
94 1 DISABLE;
95 1 fn_usb_isr();
96 1 ENABLE;
97 1 }
98 void bus_reset(void)
99 {
100 1 }
101 void dma_eot(void)
102 {
103 1 }
104 //---------------------------------
105 void ep0_rxdone(void)
106 {
107 1 unsigned char ep_last, i;
108 1
109 1 ep_last = D12_ReadLastTransactionStatus(0); // Clear interrupt flag
110 1 if (ep_last & D12_SETUPPACKET) {
111 2
112 2 ControlData.wLength = 0;
113 2 ControlData.wCount = 0;
114 2 //判断端点是否满,如是,则取出
115 2 if( D12_ReadEndpoint(0, sizeof(ControlData.DeviceRequest),
116 2 (unsigned char *)(&(ControlData.DeviceRequest))) != sizeof(DEVICE_REQUEST) ) {
117 3
118 3 D12_SetEndpointStatus(0, 1);
119 3 D12_SetEndpointStatus(1, 1);
120 3 bEPPflags.bits.control_state = USB_IDLE;
121 3
122 3 return;
123 3 }
124 2
125 2 ControlData.DeviceRequest.wValue = SWAP(ControlData.DeviceRequest.wValue);
126 2 ControlData.DeviceRequest.wIndex = SWAP(ControlData.DeviceRequest.wIndex);
127 2 ControlData.DeviceRequest.wLength = SWAP(ControlData.DeviceRequest.wLength);
128 2
129 2 // Acknowledge setup here to unlock in/out endp
130 2 //向控制输出端点发送应答建立命令以重新使能下一个建立阶段
131 2 D12_AcknowledgeEndpoint(0);
132 2 D12_AcknowledgeEndpoint(1);
133 2
134 2 ControlData.wLength = ControlData.DeviceRequest.wLength;
135 2 ControlData.wCount = 0;
136 2 //需要证实控制传输是控制读还是写,如果是读:
137 2 //如果控制传输是一个控制读类型那就是说器件需要在下一个数据阶段向
138 2 //主机发回数据包.MCU需要设置一个标志以指示USB 设备现在正处于传输
139 2 //模式即准备在主机发送请求时发送数据
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 }
C51 COMPILER V6.20c KISR 10/31/2002 21:55:46 PAGE 16
145 2 //如果是写
146 2 else {
147 3 if (ControlData.DeviceRequest.wLength == 0) {
148 4 bEPPflags.bits.setup_packet = 1;
149 4 bEPPflags.bits.control_state = USB_IDLE; /* set command */
150 4 }
151 3 else {
152 4 if(ControlData.DeviceRequest.wLength > MAX_CONTROLDATA_SIZE) {
153 5 bEPPflags.bits.control_state = USB_IDLE;
154 5 D12_SetEndpointStatus(0, 1);
155 5 D12_SetEndpointStatus(1, 1);
156 5 }
157 4 else {
158 5 bEPPflags.bits.control_state = USB_RECEIVE; /* set command with OUT token */
159 5 }
160 4 } // set command with data
161 3 } // else set command
162 2 } // if setup packet
163 1
164 1 else if (bEPPflags.bits.control_state == USB_RECEIVE) {
165 2 i = D12_ReadEndpoint(0, EP0_PACKET_SIZE,
166 2 ControlData.dataBuffer + ControlData.wCount);
167 2
168 2 ControlData.wCount += i;
169 2 if( i != EP0_PACKET_SIZE || ControlData.wCount >= ControlData.wLength) {
170 3 bEPPflags.bits.setup_packet = 1;
171 3 bEPPflags.bits.control_state = USB_IDLE;
172 3 }
173 2 }
174 1
175 1 else {
176 2 bEPPflags.bits.control_state = USB_IDLE;
177 2 }
178 1
179 1 }
180 //----------------------------------
181 void ep0_txdone(void)
182 {
183 1 short i = ControlData.wLength - ControlData.wCount;
184 1
185 1 D12_ReadLastTransactionStatus(1); // Clear interrupt flag
186 1
187 1 if (bEPPflags.bits.control_state != USB_TRANSMIT)
188 1 return;
189 1 //-------------------------
190 1 if( i >= EP0_PACKET_SIZE) {
191 2 D12_WriteEndpoint(1, EP0_PACKET_SIZE, ControlData.pData + ControlData.wCount);
192 2 ControlData.wCount += EP0_PACKET_SIZE;
193 2
194 2 bEPPflags.bits.control_state = USB_TRANSMIT;
195 2 }
196 1 else if( i != 0) {
197 2 D12_WriteEndpoint(1, i, ControlData.pData + ControlData.wCount);
198 2 ControlData.wCount += i;
199 2
200 2 bEPPflags.bits.control_state = USB_IDLE;
201 2 }
202 1 else if (i == 0){
203 2 D12_WriteEndpoint(1, 0, 0); // Send zero packet at the end ???
204 2
205 2 bEPPflags.bits.control_state = USB_IDLE;
206 2 }
C51 COMPILER V6.20c KISR 10/31/2002 21:55:46 PAGE 17
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 bEPPflags.bits.ep1_rxdone = 1;
225 1 }
226 //---------------------------------
227 void main_txdone(void)
228 {
229 1 unsigned char len;
230 1
231 1 D12_ReadLastTransactionStatus(5); /* Clear interrupt flag */
232 1
233 1 len = ioSize - ioCount;
234 1 if(len == 0) {
235 2 if(bEPPflags.bits.dma_state == DMA_PENDING)
236 2 bEPPflags.bits.setup_dma ++;
237 2 else
238 2 bEPPflags.bits.dma_state = DMA_IDLE;
239 2 }
240 1 else {
241 2 if(len > 64)
242 2 len = 64;
243 2 if(bNoRAM)
244 2 len = D12_WriteEndpoint(5, len, EpBuf + ioCount);
245 2 else
246 2 len = D12_WriteEndpoint(5, len, MainEpBuf + ioCount);
247 2 ioCount += len;
248 2 }
249 1 }
250
251 void main_rxdone(void)
252 {
253 1 unsigned char len;
254 1
255 1 D12_ReadLastTransactionStatus(4); /* Clear interrupt flag */
256 1
257 1 if(bNoRAM)
258 1 len = D12_ReadEndpoint(4, 64, EpBuf + ioCount);
259 1 else
260 1 len = D12_ReadEndpoint(4, 64, MainEpBuf + ioCount);
261 1 ioCount += len;
262 1 if(bNoRAM)
263 1 len = D12_ReadEndpoint(4, 64, EpBuf + ioCount);
264 1 else
265 1 len = D12_ReadEndpoint(4, 64, MainEpBuf + ioCount);
266 1 ioCount += len;
267 1 if(ioCount >= ioSize) {
268 2 if(bEPPflags.bits.dma_state == DMA_PENDING)
C51 COMPILER V6.20c KISR 10/31/2002 21:55:46 PAGE 18
269 2 bEPPflags.bits.setup_dma ++;
270 2 else
271 2 bEPPflags.bits.dma_state = DMA_IDLE;
272 2 }
273 1
274 1 }
275
C51 COMPILER V6.20c KISR 10/31/2002 21:55:46 PAGE 19
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION timer_isr (BEGIN)
0000 C0E0 PUSH ACC
0002 C0D0 PUSH PSW
0004 75D000 MOV PSW,#00H
0007 C007 PUSH AR7
; SOURCE LINE # 42
; SOURCE LINE # 44
0009 C2AF CLR EA
; SOURCE LINE # 45
000B E500 R MOV A,ClockTicks+03H
000D 2401 ADD A,#01H
000F F500 R MOV ClockTicks+03H,A
0011 E4 CLR A
0012 3500 R ADDC A,ClockTicks+02H
0014 F500 R MOV ClockTicks+02H,A
0016 E4 CLR A
0017 3500 R ADDC A,ClockTicks+01H
0019 F500 R MOV ClockTicks+01H,A
001B E4 CLR A
001C 3500 R ADDC A,ClockTicks
001E F500 R MOV ClockTicks,A
; SOURCE LINE # 46
0020 AF00 R MOV R7,bEPPflags
0022 EF MOV A,R7
0023 4401 ORL A,#01H
0025 F500 R MOV bEPPflags,A
; SOURCE LINE # 47
0027 D2AF SETB EA
; SOURCE LINE # 48
0029 D007 POP AR7
002B D0D0 POP PSW
002D D0E0 POP ACC
002F 32 RETI
; FUNCTION timer_isr (END)
; FUNCTION fn_usb_isr (BEGIN)
; SOURCE LINE # 51
; SOURCE LINE # 52
; SOURCE LINE # 55
0000 AF00 R MOV R7,bEPPflags
0002 EF MOV A,R7
0003 4420 ORL A,#020H
0005 F500 R MOV bEPPflags,A
; SOURCE LINE # 58
0007 120000 E LCALL D12_ReadInterruptRegister
000A 8E00 R MOV i_st,R6
000C 8F00 R MOV i_st+01H,R7
; SOURCE LINE # 60
000E E500 R MOV A,i_st+01H
0010 4500 R ORL A,i_st
0012 6053 JZ ?C0002
; SOURCE LINE # 61
0014 E500 R MOV A,i_st+01H
0016 30E60A JNB ACC.6,?C0003
; SOURCE LINE # 62
0019 120000 R LCALL bus_reset
; SOURCE LINE # 63
001C AF00 R MOV R7,bEPPflags
001E EF MOV A,R7
C51 COMPILER V6.20c KISR 10/31/2002 21:55:46 PAGE 20
001F 4402 ORL A,#02H
0021 F500 R MOV bEPPflags,A
; SOURCE LINE # 64
0023 ?C0003:
; SOURCE LINE # 66
0023 E500 R MOV A,i_st
0025 30E003 JNB ACC.0,?C0004
; SOURCE LINE # 67
0028 120000 R LCALL dma_eot
002B ?C0004:
; SOURCE LINE # 69
002B E500 R MOV A,i_st+01H
002D 30E707 JNB ACC.7,?C0005
; SOURCE LINE # 70
0030 AF00 R MOV R7,bEPPflags
0032 EF MOV A,R7
0033 4404 ORL A,#04H
0035 F500 R MOV bEPPflags,A
0037 ?C0005:
; SOURCE LINE # 73
0037 E500 R MOV A,i_st+01H
0039 30E103 JNB ACC.1,?C0006
; SOURCE LINE # 74
003C 120000 R LCALL ep0_txdone
003F ?C0006:
; SOURCE LINE # 75
003F E500 R MOV A,i_st+01H
0041 30E003 JNB ACC.0,?C0007
; SOURCE LINE # 76
0044 120000 R LCALL ep0_rxdone
0047 ?C0007:
; SOURCE LINE # 77
0047 E500 R MOV A,i_st+01H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -