📄 mainloop.lst
字号:
C51 COMPILER V8.02 MAINLOOP 03/28/2009 00:39:53 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE MAINLOOP
OBJECT MODULE PLACED IN MAINLOOP.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE MAINLOOP.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /*本程序套用smartUSB板的固件程序。如有什么问题请到我的blog:unaided.21ic.org上讨论 */
2
3
4
5 #include <reg51.h> /* special function register declarations */
6 #include <stdio.h>
7 #include <string.h>
8 #include "epphal.h"
9 #include "d12ci.h"
10 #include "mainloop.h"
11 #include "usb100.h"
12 #include "chap_9.h"
13
14 /*
15 //*************************************************************************
16 // USB protocol function pointer arrays
17 //*************************************************************************
18 */
19 code void (*StandardDeviceRequest[])(void) =
20 {
21 get_status,
22 clear_feature,
23 reserved,
24 set_feature,
25 reserved,
26 set_address,
27 get_descriptor,
28 reserved,
29 get_configuration,
30 set_configuration,
31 get_interface,
32 set_interface,
33 reserved,
34 reserved,
35 reserved,
36 reserved
37 };
38
39 /*
40 //*************************************************************************
41 // Public static data
42 //*************************************************************************
43 */
44
45 extern EPPFLAGS bEPPflags;
46 extern unsigned char idata GenEpBuf[];
47 extern unsigned char idata EpBuf[];
48 //extern IO_REQUEST idata ioRequest;
49
50
51 CONTROL_XFER ControlData;
52
53
54 void init_special_interrupts(void)
55 {
C51 COMPILER V8.02 MAINLOOP 03/28/2009 00:39:53 PAGE 2
56 1 EA=1;
57 1 IT1=0;
58 1 EX1=1;
59 1 PX1=1;
60 1 }
61
62 void init_port()
63 {
64 1 P0 = 0xFF;
65 1 P1 = 0xFF;
66 1 P2 = 0xFF;
67 1 P3 = 0xFF;
68 1 // D12SUSPD = 0;
69 1 }
70
71
72 void init_flags()
73 {
74 1 bEPPflags.bits.bus_reset=0;
75 1 bEPPflags.bits.suspend=0;
76 1 bEPPflags.bits.setup_packet=0;
77 1 bEPPflags.bits.remote_wakeup=0;
78 1 bEPPflags.bits.in_isr=0;
79 1 bEPPflags.bits.control_state=0;
80 1 bEPPflags.bits.configuration=0;
81 1 bEPPflags.bits.ep1_rxdone=0;
82 1 bEPPflags.bits.main_rxdone=0;
83 1 }
84
85
86 void main(void)
87 {
88 1 unsigned short ID;
89 1 unsigned char high,low;
90 1 init_port();
91 1 init_special_interrupts();;
92 1 init_flags();
93 1 ID=D12_ReadChipID();
94 1 high=(unsigned char)(ID>>8);
95 1 low=(unsigned char)ID;
96 1 reconnect_USB();
97 1 while( TRUE )
98 1 {
99 2 if (bEPPflags.bits.bus_reset)
100 2 {
101 3 DISABLE;
102 3 bEPPflags.bits.bus_reset = 0;
103 3 ENABLE;
104 3 // D12SUSPD = 1;
105 3 }
106 2 /* if (bEPPflags.bits.suspend)
107 2 {
108 2 DISABLE;
109 2 bEPPflags.bits.suspend= 0;
110 2 ENABLE;
111 2 if(D12SUSPD == 1)
112 2 {
113 2 D12SUSPD = 0;
114 2 P0 = 0xFF;
115 2 P1 = 0xFF;
116 2 P2 = 0xFF;
117 2 P3 = 0xFF;
C51 COMPILER V8.02 MAINLOOP 03/28/2009 00:39:53 PAGE 3
118 2 D12SUSPD = 1;
119 2 PCON |= 0x02;
120 2 while (1);
121 2 }
122 2 } // if suspend change*/
123 2
124 2 if (bEPPflags.bits.setup_packet)
125 2 {
126 3 DISABLE;
127 3 bEPPflags.bits.setup_packet = 0;
128 3 ENABLE;
129 3 control_handler();
130 3 // D12SUSPD = 1;
131 3 } // if setup_packet
132 2 if(bEPPflags.bits.configuration)
133 2 IspControl();
134 2 } // Main Loop
135 1
136 1 }
137
138 void stall_ep0(void)
139 {
140 1 D12_SetEndpointStatus(0, 1);
141 1 D12_SetEndpointStatus(1, 1);
142 1 }
143
144 void init_unconfig(void)
145 {
146 1 // unsigned char i;
147 1
148 1 D12_SetEndpointEnable(0); /* Disable all endpoints but EPP0. */
149 1 }
150
151 void init_config(void)
152 {
153 1 D12_SetEndpointEnable(1); /* Enable generic/iso endpoints. */
154 1 }
155
156 void single_transmit(unsigned char * buf, unsigned char len)
157 {
158 1 if( len <= EP0_PACKET_SIZE) {
159 2 D12_WriteEndpoint(1, len, buf);
160 2 }
161 1 }
162
163 void code_transmit(unsigned char code * pRomData, unsigned short len)
164 {
165 1 ControlData.wCount = 0;
166 1 if(ControlData.wLength > len)
167 1 ControlData.wLength = len;
168 1
169 1 ControlData.pData = pRomData;
170 1 if( ControlData.wLength >= EP0_PACKET_SIZE) {
171 2 D12_WriteEndpoint(1, EP0_PACKET_SIZE, ControlData.pData);
172 2 ControlData.wCount += EP0_PACKET_SIZE;
173 2
174 2 DISABLE;
175 2 bEPPflags.bits.control_state = USB_TRANSMIT;
176 2 ENABLE;
177 2 }
178 1 else {
179 2 D12_WriteEndpoint(1, ControlData.wLength, pRomData);
C51 COMPILER V8.02 MAINLOOP 03/28/2009 00:39:53 PAGE 4
180 2 ControlData.wCount += ControlData.wLength;
181 2 DISABLE;
182 2 bEPPflags.bits.control_state = USB_IDLE;
183 2 ENABLE;
184 2 }
185 1 }
186
187 void IspControl(void)
188 {
189 1 P1=GenEpBuf[0];
190 1 }
191
192 void control_handler()
193 {
194 1 unsigned char type, req;
195 1
196 1 type = ControlData.DeviceRequest.bmRequestType & USB_REQUEST_TYPE_MASK;
197 1 req = ControlData.DeviceRequest.bRequest & USB_REQUEST_MASK;
198 1 if (type == USB_STANDARD_REQUEST)
199 1 (*StandardDeviceRequest[req])();
200 1 else
201 1 stall_ep0();
202 1 }
203
204 void reconnect_USB(void)
205 {
206 1 // D12SUSPD = 0;
207 1 disconnect_USB();
208 1 connect_USB();
209 1 }
210
211 void disconnect_USB(void)
212 {
213 1 // Initialize D12 configuration
214 1 D12_SetMode(D12_NOLAZYCLOCK, D12_SETTOONE | D12_CLOCK_12M);
215 1 }
216
217 void connect_USB(void)
218 {
219 1 D12_SetDMA(D12_ENDP4INTENABLE | D12_ENDP5INTENABLE);
220 1 D12_SetMode(D12_NOLAZYCLOCK|D12_SOFTCONNECT, D12_SETTOONE | D12_CLOCK_12M);
221 1 }
222
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 390 ----
CONSTANT SIZE = 48 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 23 4
IDATA SIZE = ---- ----
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 + -