📄 isr.lst
字号:
C51 COMPILER V7.06 ISR 08/18/2005 15:30:29 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE ISR
OBJECT MODULE PLACED IN ISR.OBJ
COMPILER INVOKED BY: d:\Keil777\C51\BIN\C51.EXE ISR.C BROWSE DEBUG OBJECTEXTEND
stmt level source
1
2 #include <stdio.h>
3 #include <string.h>
4 #include <unistd.h>
*** WARNING C318 IN LINE 4 OF ISR.C: can't open file 'unistd.h'
5 #include "BasicTyp.h"
6 #include "common.h"
7 #include "USB.h"
8 #include "HAL4D13.h"
9 #include "isr.h"
10 #include "iso.h"
11 #include "mainloop.h"
12 #include "usb_irq.h"
13
14
15 // ************************************************************************
16 // Public static data
17 // ************************************************************************
18
19 extern D13FLAGS bD13flags;
20 extern USBCHECK_DEVICE_STATES bUSBCheck_Device_State;
21 extern CONTROL_XFER ControlData;
22
23 //extern unsigned short ioSize, ioCount;
24
25
26 // ************************************************************************
27 // ISR Subroutine
28 // ************************************************************************
29 void usb_isr(void)
30 {
31 1 //disable();
32 1 IOWR(PIO_0_BASE, 2, 0);//DIS INT1
*** ERROR C202 IN LINE 32 OF ISR.C: 'PIO_0_BASE': undefined identifier
33 1 IOWR(PIO_0_BASE, 3, 0);//CLAER
*** ERROR C202 IN LINE 33 OF ISR.C: 'PIO_0_BASE': undefined identifier
34 1 printf("interrupt \n");
35 1 Hal4D13_LockDevice(0);
36 1 fn_usb_isr();
37 1
38 1
39 1 IOWR(PIO_0_BASE, 2, 2);//EN INT1
*** ERROR C202 IN LINE 39 OF ISR.C: 'PIO_0_BASE': undefined identifier
40 1 // enable();
41 1 }
42
43 void fn_usb_isr(void)
44 {
45 1 ULONG i_st;
46 1
47 1 bD13flags.bits.At_IRQL1 = 1;
48 1
49 1 i_st = Hal4D13_ReadInterruptRegister();
50 1
51 1 if(i_st != 0)
C51 COMPILER V7.06 ISR 08/18/2005 15:30:29 PAGE 2
52 1 {
53 2 if(i_st & D13REG_INTSRC_BUSRESET)
54 2 Isr_BusReset();
55 2 else if(i_st & D13REG_INTSRC_SUSPEND)
56 2 Isr_SuspendChange();
57 2 else if(i_st & D13REG_INTSRC_EOT)
58 2 Isr_DmaEot();
59 2 else if(i_st & (D13REG_INTSRC_SOF|D13REG_INTSRC_PSEUDO_SOF))
60 2 Isr_SOF();
61 2 else if(i_st & D13REG_INTSRC_SHORT_PACKET)
62 2 Isr_SHORT_PACKET();
63 2 else if(i_st & D13REG_INTSRC_RESUME)
64 2 {
65 3 printf("RESUME\n");
66 3 Hal4D13_LockDevice(0);
67 3 }
68 2
69 2 else
70 2 {
71 3 if(i_st & D13REG_INTSRC_EP0OUT)
72 3 Isr_Ep00RxDone();
73 3 if(i_st & D13REG_INTSRC_EP0IN)
74 3 Isr_Ep00TxDone();
75 3 if(i_st & D13REG_INTSRC_EP03)
76 3 Isr_Ep03Done();
77 3 if(i_st & D13REG_INTSRC_EP04)
78 3 Isr_Ep04Done();
79 3 if(i_st & D13REG_INTSRC_EP05)
80 3 Isr_Ep05Done();
81 3 if(i_st & D13REG_INTSRC_EP06)
82 3 Isr_Ep06Done();
83 3 }
84 2 }
85 1
86 1 bD13flags.bits.At_IRQL1 = 0;
87 1 }
88
89 void Isr_BusReset(void)
90 {
91 1 printf("BUS RESET\n");
92 1 bD13flags.bits.DCP_state = 0x00;
93 1 bD13flags.bits.dma_disable=0x00;
94 1
95 1 bUSBCheck_Device_State.State_bits.DEVICE_DEFAULT_STATE = 1;
96 1 bUSBCheck_Device_State.State_bits.DEVICE_ADDRESS_STATE = 0;
97 1 bUSBCheck_Device_State.State_bits.DEVICE_CONFIGURATION_STATE = 0;
98 1 config_endpoint();
99 1 }
100
101 void Isr_SuspendChange(void)
102 {
103 1 bD13flags.bits.suspend=1;
104 1 }
105
106 void Isr_SHORT_PACKET(void)
107 {
108 1 printf("SHORT PACKET INTERRUPT\n");
109 1 }
110
111 void Isr_DmaEot(void)
112 {
113 1 bD13flags.bits.dma_disable =0;
C51 COMPILER V7.06 ISR 08/18/2005 15:30:29 PAGE 3
114 1
115 1 if(bD13flags.bits.dma_state == DMA_PENDING)
116 1 bD13flags.bits.setup_dma = 1;
117 1 else
118 1 bD13flags.bits.dma_state = DMA_IDLE;
119 1 printf("EOT reached!!!\n");
120 1 if(bD13flags.bits.verbose==1)
121 1 printf("dma_counter = %x\n", Hal4D13_GetDMACounter());
122 1 printf("\n");
123 1 }
124
125
126 void Isr_SOF(void)
127 {
128 1
129 1 }
130
131 void Isr_Ep00RxDone(void)
132 {
133 1 UCHAR ep_last, i;
134 1
135 1 ep_last = Hal4D13_GetEndpointStatusWInteruptClear(EPINDEX4EP0_CONTROL_OUT); /* Clear interrupt flag */
136 1
137 1 if (ep_last & D13REG_EPSTS_SETUP)
138 1 {
139 2 if(bD13flags.bits.DCP_state == USBFSM4DCP_REQUESTPROC)
140 2 {
141 3 ControlData.Abort = 1;
142 3 bD13flags.bits.DCP_state = USBFSM4DCP_SETUPPROC;
143 3 }
144 2 else
145 2 bD13flags.bits.DCP_state = USBFSM4DCP_SETUPPROC;
146 2 }
147 1 else /* not a setup packet, just a Data Out Packet */
148 1 {
149 2 switch (bD13flags.bits.DCP_state)
150 2 {
151 3 case USBFSM4DCP_DATAOUT:
152 3
153 3 i = Hal4D13_ReadEndpoint(EPINDEX4EP0_CONTROL_OUT, ControlData.dataBuffer + ControlData.wCount,
154 3 EP0_PACKET_SIZE);
155 3
156 3 ControlData.wCount += i;
157 3 if( i != EP0_PACKET_SIZE || ControlData.wCount >= ControlData.wLength)
158 3 {
159 4 bD13flags.bits.DCP_state = USBFSM4DCP_REQUESTPROC;
160 4
161 4 }
162 3 break;
163 3 case USBFSM4DCP_HANDSHAKE:
164 3
165 3 bD13flags.bits.DCP_state = USBFSM4DCP_IDLE;
166 3 break;
167 3
168 3 case USBFSM4DCP_STALL: break;
169 3
170 3 case USBFSM4DCP_SETUPPROC: break;
171 3
172 3 case USBFSM4DCP_REQUESTPROC:break;
173 3
174 3 case USBFSM4DCP_DATAIN: break;
175 3
C51 COMPILER V7.06 ISR 08/18/2005 15:30:29 PAGE 4
176 3 default:
177 3 printf("Fatal Error: Isr_Ep0RxDone ReadLastTranactionStatus=%x\n",ep_last);
178 3 bD13flags.bits.DCP_state = USBFSM4DCP_STALL;
179 3 Hal4D13_StallEP0InControlWrite();
180 3 break;
181 3 }
182 2 }
183 1 return ;
184 1 }
185
186 void Isr_Ep00TxDone(void)
187 {
188 1 short i = ControlData.wLength - ControlData.wCount;
189 1 UCHAR ep_last;
190 1
191 1
192 1 Hal4D13_ReadInterruptRegister();
193 1 ep_last = Hal4D13_GetEndpointStatusWInteruptClear(EPINDEX4EP0_CONTROL_IN); /* Clear interrupt flag */
194 1
195 1 switch (bD13flags.bits.DCP_state)
196 1 {
197 2 case USBFSM4DCP_HANDSHAKE:
198 2 break;
199 2 case USBFSM4DCP_DATAIN:
200 2 if( i >= EP0_PACKET_SIZE)
201 2 {
202 3 Hal4D13_WriteEndpoint(EPINDEX4EP0_CONTROL_IN,ControlData.Addr.pData + ControlData.wCount, EP0_PACKET_SI
-ZE);
203 3 ControlData.wCount += EP0_PACKET_SIZE;
204 3
205 3 // State remains at USBFSM4DCP_DATAIN
206 3
207 3 }
208 2 else if( i != 0)
209 2 {
210 3 Hal4D13_WriteEndpoint(1, ControlData.Addr.pData + ControlData.wCount, i);
211 3 ControlData.wCount += i;
212 3
213 3 bD13flags.bits.DCP_state = USBFSM4DCP_HANDSHAKE;
214 3 LowerIRQL();
215 3
216 3 }
217 2 else if (i == 0)
218 2 {
219 3 Hal4D13_SingleTransmitEP0(0, 0);
220 3 bD13flags.bits.DCP_state = USBFSM4DCP_HANDSHAKE;
221 3 }
222 2 break;
223 2 case USBFSM4DCP_REQUESTPROC: break;
224 2 case USBFSM4DCP_IDLE: break;
225 2 case USBFSM4DCP_SETUPPROC: break;
226 2 case USBFSM4DCP_STALL: break;
227 2 case USBFSM4DCP_DATAOUT: break;
228 2 default:
229 2 printf("Fatal Error: Isr_Ep0TxDone Unexpected FSMState=%x\n",bD13flags.bits.DCP_state);
230 2 bD13flags.bits.DCP_state = USBFSM4DCP_STALL;
231 2 // printf("bD13flags.bits.DCP_state = x%hx\n", bD13flags.bits.DCP_state);
232 2 Hal4D13_StallEP0InControlRead();
233 2 break;
234 2 }
235 1 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -