📄 kmain.lst
字号:
43 reserved,
44 reserved,
45 reserved,
46 reserved,
47 reserved,
48 reserved,
49 reserved,
50 reserved,
51 reserved,
52 read_write_register,
53 reserved,
C51 COMPILER V7.06 KMAIN 11/11/2003 20:11:04 PAGE 15
54 reserved,
55 reserved
56 };
57
58
59
60 /*
61 //*************************************************************************
62 // Public static data
63 //*************************************************************************
64 */
65 extern EPPFLAGS bEPPflags;
66 extern unsigned long ClockTicks;
67
68 extern unsigned char idata GenEpBuf[];
69 extern IO_REQUEST idata ioRequest;
70
71 extern unsigned char ioSize, ioCount;
72 extern unsigned char xdata MainEpBuf[];
73 extern unsigned char idata EpBuf[];
74 //------------
75 extern void fn_usb_isr(void);
76 //-----------
77
78 CONTROL_XFER ControlData;
79 unsigned char bNoRAM;
80
81
82 //==================================================
83 /*
84 PCON: SMOD | - | - | - | GF1|GF0|PD |IDL|
85 TCON: TF1 | - |TF0| - |IE1 |IT1|IE0|IT0|
86
87 */
88 /* Configure Timer 0
89 - Mode = 1
90 - Interrupt = ENABLED
91 - Clock Source = INTERNAL
92 - Enable Gating Control = DISABLED
93 */
94
95
96 void init_timer0(void)
97 {
98 1 TMOD &= 0XF0; /* clear Timer 0 */
99 1 TMOD |= 0X1;
100 1 TL0 = 0X0; /* value set by user */
101 1 TH0 = 0X0; /* value set by user */
102 1 ET0 = 1; /* IE.1*/
103 1 TR0 = 1; /* TCON.4 start timer */
104 1 PT0 = 1;
105 1
106 1 //EA = 1;
107 1 }
108
109
110 void init_port()
111 {
112 1 P0 = 0xFF;
113 1 P1 = 0xFF;
114 1 P2 = 0xFF;
115 1 P3 = 0xFF;
C51 COMPILER V7.06 KMAIN 11/11/2003 20:11:04 PAGE 16
116 1 MCU_D12CS = 0x0; //D12 Select
117 1 D12SUSPD = 0; //D12 not in Suspend
118 1 }
119
120 /*Serial Port */
121 /*Mode = 1 /8-bit UART
122 Serial Port Interrupt = Disabled */
123 /*Receive = Enabled */
124 /*Auto Addressing = Disabled */
125 void init_serial(void)
126 {
127 1 SCON = 0X52; /* SCON: SM0|SM1|SM2|REN|TB8|RB8|TI|RI */
128 1 PCON = 0X80 | PCON; /* PCON: SMOD | - | - | - | GF1|GF0|PD |IDL| */
129 1 TMOD = 0X20; /* TMOD: GATE|C/T|M1|M0|GATE|C/T|M1|M0 */
130 1 TCON = 0x69; /* TCON: TF1|TR1|TF0|TR0|IE1|IT1|IE0|IT0 */
131 1 TH1 = 0xF3; /*TH1=0xF3: */
132 1 }
133 //----------------------------
134 /*
135 void help_devreq(unsigned char typ, unsigned char req)
136 {
137 typ >>= 5;
138
139 if(typ == USB_STANDARD_REQUEST) {
140 }
141 else {
142 if(bEPPflags.bits.verbose)
143 printf("Request Type = %s, bRequest = 0x%bx.\n", _NAME_USB_REQUEST_TYPE[typ],
144 req);
145 }
146 }
147 */
148
149 //=================================================================
150 void disconnect_USB(void)
151 {
152 1 // Initialize D12 configuration
153 1 D12_SetMode(D12_NOLAZYCLOCK, D12_SETTOONE | D12_CLOCK_12M);
154 1 }
155
156 void connect_USB(void)
157 {
158 1 // reset event flags
159 1
160 1 DISABLE;
161 1 bEPPflags.value = 0;
162 1 ENABLE;
163 1
164 1 // V2.1 enable normal+sof interrupt
165 1 D12_SetDMA(D12_ENDP4INTENABLE | D12_ENDP5INTENABLE);
166 1
167 1 // Initialize D12 configuration
168 1
169 1 //D12_SetMode(D12_NOLAZYCLOCK ,D12_SETTOONE | D12_CLOCK_12M );
170 1 D12_SetMode(D12_NOLAZYCLOCK | D12_SOFTCONNECT,D12_SETTOONE | D12_CLOCK_12M );
171 1
172 1 }
173
174
175 void reconnect_USB(void)
176 {
177 1 unsigned long clk_cnt;
C51 COMPILER V7.06 KMAIN 11/11/2003 20:11:04 PAGE 17
178 1
179 1 MCU_LED0 = 0;
180 1 MCU_LED1 = 0;
181 1
182 1 // Pull-down D12's SUSPEND pin
183 1 // Disable 74HCT123 pulse generation before disconnect
184 1 // Release D12's SUSPEND pin after receiving bus reset from host
185 1 D12SUSPD = 0;
186 1 disconnect_USB();
187 1
188 1 //printf("Wait for 1 second ...\n");
189 1
190 1 clk_cnt = ClockTicks;
191 1 while(ClockTicks < clk_cnt + 20)
192 1 ;
193 1
194 1 connect_USB();
195 1
196 1 MCU_LED0 = 1;
197 1 MCU_LED1 = 1;
198 1
199 1 }
200 //------------------------------
201 void stall_ep0(void)
202 {
203 1 D12_SetEndpointStatus(0, 1);
204 1 D12_SetEndpointStatus(1, 1);
205 1 }
206
207 //---------------
208 void on_exit(void)
209 {
210 1
211 1 }
212 //----------------------------------
213 void check_key_LED(void)
214 {
215 1 static unsigned char c, last_key = 0xf;
216 1
217 1 c = MCU_SWM0 & MCU_SWM1;
218 1 c &= 0x0f;
219 1 if (c != last_key) {
220 2 D12_WriteEndpoint(3, 1, &c);
221 2 }
222 1
223 1 last_key = c;
224 1
225 1 if(bEPPflags.bits.ep1_rxdone) {
226 2 DISABLE;
227 2 bEPPflags.bits.ep1_rxdone = 0;
228 2 ENABLE;
229 2 MCU_LED0 = !(GenEpBuf[3] & 0x1);
230 2 MCU_LED1 = !(GenEpBuf[3] & 0x2);
231 2 }
232 1 }
233 //--------------------------
234 void init_unconfig(void)
235 {
236 1 //unsigned char i;
237 1
238 1 D12_SetEndpointEnable(0); /* Disable all endpoints but EPP0. */
239 1 }
C51 COMPILER V7.06 KMAIN 11/11/2003 20:11:04 PAGE 18
240
241 void init_config(void)
242 {
243 1 D12_SetEndpointEnable(1); /* Enable generic/iso endpoints. */
244 1 }
245 //--------------------------
246
247 void single_transmit(unsigned char * buf, unsigned char len)
248 {
249 1 if( len <= EP0_PACKET_SIZE) {
250 2 D12_WriteEndpoint(1, len, buf);
251 2 }
252 1 }
253
254 void code_transmit(unsigned char code * pRomData, unsigned short len)
255 {
256 1 ControlData.wCount = 0;
257 1 if(ControlData.wLength > len)
258 1 ControlData.wLength = len;
259 1
260 1 ControlData.pData = pRomData;
261 1 if( ControlData.wLength >= EP0_PACKET_SIZE) { // 如果发送代码大于包长度
262 2 D12_WriteEndpoint(1, EP0_PACKET_SIZE, ControlData.pData);
263 2 ControlData.wCount += EP0_PACKET_SIZE;
264 2
265 2 DISABLE;
266 2 bEPPflags.bits.control_state = USB_TRANSMIT;
267 2 ENABLE;
268 2 }
269 1 else { //发送代码小于包长度
270 2 D12_WriteEndpoint(1, ControlData.wLength, pRomData);
271 2 ControlData.wCount += ControlData.wLength;
272 2 DISABLE;
273 2 bEPPflags.bits.control_state = USB_IDLE;
274 2 ENABLE;
275 2 }
276 1 }
277
278 //---------------------------
279 void setup_dma()
280 {
281 1 ioSize = ioRequest.uSize;
282 1 ioCount = 0;
283 1
284 1 DISABLE;
285 1 bEPPflags.bits.dma_state = DMA_RUNNING;
286 1 ENABLE;
287 1
288 1 single_transmit(0, 0);
289 1
290 1 if(ioRequest.bCommand & 0x1) {
291 2 if(ioSize > 64 || ioSize == 0) {
292 3 //if(bNoRAM)
293 3 D12_WriteEndpoint(5, 64, EpBuf);
294 3 //else
295 3 // D12_WriteEndpoint(5, 64, MainEpBuf);
296 3 ioCount += 64;
297 3 }
298 2 else {
299 3 //if(bNoRAM)
300 3 D12_WriteEndpoint(5, ioSize, EpBuf);
301 3 //else
C51 COMPILER V7.06 KMAIN 11/11/2003 20:11:04 PAGE 19
302 3 // D12_WriteEndpoint(5, ioSize, MainEpBuf);
303 3 ioCount += ioSize;
304 3 }
305 2 }
306 1 }
307
308 //------------------------------
309 void control_handler()
310 {
311 1 unsigned char type, req;
312 1
313 1 type = ControlData.DeviceRequest.bmRequestType & USB_REQUEST_TYPE_MASK; //0x60
314 1 req = ControlData.DeviceRequest.bRequest & USB_REQUEST_MASK; //0x0F
315 1
316 1 //help_devreq(type, req); // print out device request
317 1
318 1 if (type == USB_STANDARD_REQUEST)
319 1 (*StandardDeviceRequest[req])();
320 1 else if (type == USB_VENDOR_REQUEST)
321 1 (*VendorDeviceRequest[req])();
322 1 else
323 1 stall_ep0();
324 1
325 1 }
326
327
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -