C51 COMPILER V7.06 MAINLOOP 08/18/2005 15:30:30 PAGE 1 C51 COMPILER V7.06, COMPILATION OF MODULE MAINLOOP OBJECT MODULE PLACED IN MAINLOOP.OBJ COMPILER INVOKED BY: d:\Keil777\C51\BIN\C51.EXE MAINLOOP.C BROWSE DEBUG OBJECTEXTEND stmt level source 1 2 #include 3 #include "BasicTyp.h" 4 #include "common.h" 5 #include "mainloop.h" 6 #include "usb.h" 7 #include "Hal4D13.h" 8 #include "chap_9.h" 9 #include "D13BUS.h" 10 #include "ISO.h" 11 12 extern IO_REQUEST idata ioRequest; 13 extern D13FLAGS bD13flags; 14 extern USBCHECK_DEVICE_STATES bUSBCheck_Device_State;; *** ERROR C141 IN LINE 14 OF MAINLOOP.C: syntax error near ';' 15 extern CONTROL_XFER ControlData; 16 17 //************************************************************************* 18 // USB protocol function pointer arrays 19 //************************************************************************* 20 21 #define MAX_STANDARD_REQUEST 0x0D 22 code void (*StandardDeviceRequest[])(void) = 23 { 24 Chap9_GetStatus, 25 Chap9_ClearFeature, 26 Chap9_StallEP0, 27 Chap9_SetFeature, 28 Chap9_StallEP0, 29 Chap9_SetAddress, 30 Chap9_GetDescriptor, 31 Chap9_StallEP0, 32 Chap9_GetConfiguration, 33 Chap9_SetConfiguration, 34 Chap9_GetInterface, 35 Chap9_SetInterface, 36 Chap9_StallEP0 37 }; 38 39 40 code CHAR * _NAME_USB_REQUEST_DIRECTION[] = 41 { 42 "Host_to_device", 43 "Device_to_host" 44 }; 45 46 code CHAR * _NAME_USB_REQUEST_RECIPIENT[] = 47 { 48 "Device", 49 "Interface", 50 "Endpoint(0)", 51 "Other" 52 }; 53 54 code CHAR * _NAME_USB_REQUEST_TYPE[] = C51 COMPILER V7.06 MAINLOOP 08/18/2005 15:30:30 PAGE 2 55 { 56 "Standard", 57 "Class", 58 "Vendor", 59 "Reserved" 60 }; 61 62 code CHAR * _NAME_USB_STANDARD_REQUEST[] = 63 { 64 "GET_STATUS", 65 "CLEAR_FEATURE", 66 "RESERVED", 67 "SET_FEATURE", 68 "RESERVED", 69 "SET_ADDRESS", 70 "GET_DESCRIPTOR", 71 "SET_DESCRIPTOR", 72 "GET_CONFIGURATION", 73 "SET_CONFIGURATION", 74 "GET_INTERFACE", 75 "SET_INTERFACE", 76 "SYNC_FRAME" 77 }; 78 79 //************************************************************************* 80 // Class device requests 81 //************************************************************************* 82 83 #define MAX_CLASS_REQUEST 0x00 84 code void (*ClassDeviceRequest[])(void) = 85 { 86 ML_Reserved 87 }; 88 89 code CHAR * _NAME_USB_CLASS_REQUEST[] = 90 { 91 " ML_Reserved" 92 }; 93 94 //************************************************************************* 95 // Vendor Device Request 96 //************************************************************************* 97 98 #define MAX_VENDOR_REQUEST 0x0f 99 100 code void (*VendorDeviceRequest[])(void) = 101 { 102 EnableIsoMode, 103 D13Bus_ControlEntry, 104 reserved, 105 reserved, 106 reserved, 107 reserved, 108 reserved, 109 reserved, 110 reserved, 111 reserved, 112 reserved, 113 reserved, 114 read_write_register, 115 reserved, 116 reserved, C51 COMPILER V7.06 MAINLOOP 08/18/2005 15:30:30 PAGE 3 117 reserved 118 }; 119 120 code CHAR * _NAME_USB_VENDOR_REQUEST[] = 121 { 122 "Iso mode enable", 123 "Philips D13bus handler", 124 "RESERVED", 125 "RESERVED", 126 "RESERVED", 127 "RESERVED", 128 "RESERVED", 129 "RESERVED", 130 "RESERVED", 131 "RESERVED", 132 "RESERVED", 133 "RESERVED", 134 "read Firmware version ", 135 "RESERVED", 136 "RESERVED", 137 "RESERVED", 138 }; 139 140 void SetupToken_Handler(void) 141 { 142 1 RaiseIRQL(); 143 1 bD13flags.bits.At_IRQL1 = 1; 144 1 ControlData.Abort = FALSE; 145 1 146 1 ControlData.wLength = 0; 147 1 ControlData.wCount = 0; 148 1 149 1 if( Hal4D13_ReadEndpointWOClearBuffer(EPINDEX4EP0_CONTROL_OUT, (UCHAR *)(&(ControlData.DeviceRequest)), -sizeof(ControlData.DeviceRequest)) == sizeof(DEVICE_REQUEST) ) 150 1 { 151 2 152 2 bD13flags.bits.At_IRQL1 = 0; 153 2 LowerIRQL(); 154 2 ControlData.wLength = ControlData.DeviceRequest.wLength; 155 2 ControlData.wCount = 0; 156 2 157 2 if (ControlData.DeviceRequest.bmRequestType & (UCHAR)USB_ENDPOINT_DIRECTION_MASK) 158 2 { 159 3 /* get command */ 160 3 RaiseIRQL(); 161 3 ML_AcknowledgeSETUP(); 162 3 if((ControlData.DeviceRequest.bRequest == 0) & (ControlData.DeviceRequest.bmRequestType == 0xc0)) 163 3 bD13flags.bits.DCP_state = USBFSM4DCP_HANDSHAKE; 164 3 else 165 3 bD13flags.bits.DCP_state = USBFSM4DCP_REQUESTPROC; 166 3 167 3 LowerIRQL(); 168 3 } 169 2 else 170 2 { 171 3 /* set command */ 172 3 173 3 if (ControlData.DeviceRequest.wLength == 0) 174 3 { 175 4 /* Set command without Data stage*/ 176 4 RaiseIRQL(); 177 4 ML_AcknowledgeSETUP(); C51 COMPILER V7.06 MAINLOOP 08/18/2005 15:30:30 PAGE 4 178 4 bD13flags.bits.DCP_state = USBFSM4DCP_REQUESTPROC; 179 4 LowerIRQL(); 180 4 } 181 3 else 182 3 { 183 4 /* 184 4 // Set command with Data stage 185 4 // get Data Buffer 186 4 */ 187 4 if(ControlData.DeviceRequest.wLength <= MAX_CONTROLDATA_SIZE) 188 4 { 189 5 /* set command with OUT token */ 190 5 RaiseIRQL(); 191 5 bD13flags.bits.DCP_state = USBFSM4DCP_DATAOUT; 192 5 LowerIRQL(); 193 5 ML_AcknowledgeSETUP(); 194 5 195 5 } 196 4 else 197 4 { 198 5 RaiseIRQL(); 199 5 ML_AcknowledgeSETUP(); 200 5 Hal4D13_StallEP0InControlWrite(); 201 5 bD13flags.bits.DCP_state = USBFSM4DCP_STALL; 202 5 printf("bD13flags.bits.DCP_state = x%hx\n Unknow set up command\n", bD13flags.bits.DCP_state); 203 5 LowerIRQL(); 204 5 } 205 4 } 206 3 } 207 2 } 208 1 else 209 1 { 210 2 printf("wrong setup command\n"); 211 2 bD13flags.bits.At_IRQL1 = 0; 212 2 LowerIRQL(); 213 2 Chap9_StallEP0(); 214 2 } 215 1 216 1 printf("To_Ha_end\n"); 217 1 } 218 219 220 void DeviceRequest_Handler(void) 221 { 222 1 UCHAR type, req; 223 1 224 1 type = ControlData.DeviceRequest.bmRequestType & USB_REQUEST_TYPE_MASK; 225 1 req = ControlData.DeviceRequest.bRequest & USB_REQUEST_MASK; 226 1 227 1 if (bD13flags.bits.verbose==1) 228 1 printf("type = 0x%02x, req = 0x%02x\n", type, req); 229 1 230 1 help_devreq(type, req); /* print out device request */ 231 1 232 1 if ((type == USB_STANDARD_REQUEST) && (req < MAX_STANDARD_REQUEST)) 233 1 { 234 2 (*StandardDeviceRequest[req])(); 235 2 } 236 1 else if ((type == USB_CLASS_REQUEST) && (req < MAX_CLASS_REQUEST)) 237 1 (*ClassDeviceRequest[req])(); 238 1 else if ((type == USB_VENDOR_REQUEST) && (req < MAX_VENDOR_REQUEST)) 239 1 (*VendorDeviceRequest[req])(); C51 COMPILER V7.06 MAINLOOP 08/18/2005 15:30:30 PAGE 5 240 1 else{ 241 2 Chap9_StallEP0(); 242 2 } 243 1 } 244 245 void help_devreq(UCHAR type, UCHAR req) 246 { 247 1 UCHAR typ = type; 248 1 typ >>= 5; 249 1 250 1 if(type == USB_STANDARD_REQUEST) 251 1 { 252 2 printf("Request Type = %s, Request = %s.\n", _NAME_USB_REQUEST_TYPE[typ], 253 2 _NAME_USB_STANDARD_REQUEST[req]); 254 2 } 255 1 else if(type == USB_CLASS_REQUEST) 256 1 { 257 2 printf("Request Type = %s, Request = %s.\n", _NAME_USB_REQUEST_TYPE[typ], 258 2 _NAME_USB_CLASS_REQUEST[req]); 259 2 } 260 1 else 261 1 { 262 2 if(bD13flags.bits.verbose) 263 2 printf("Request Type = %s, bRequest = 0x%x.\n", _NAME_USB_REQUEST_TYPE[typ], 264 2 req); 265 2 } 266 1 } 267 268 void disconnect_USB(void) 269 { 270 1 271 1 Hal4D13_SetDevConfig(D13REG_DEVCNFG_NOLAZYCLOCK 272 1 |D13REG_DEVCNFG_PWROFF 273 1 |D13REG_DEVCNFG_CLOCKRUNNING 274 1 ); 275 1 Hal4D13_SetMode(D13REG_MODE_INT_EN); 276 1 277 1 } 278 279 void connect_USB(void) 280 { 281 1 282 1 // RaiseIRQL(); 283 1 284 1 bD13flags.value = 0; /* reset event flags*/ 285 1 bD13flags.bits.DCP_state = USBFSM4DCP_IDLE; 286 1 config_endpoint(); 287 1 288 1 // LowerIRQL(); 289 1 290 1 Hal4D13_SetMode(D13REG_MODE_SOFTCONNECT 291 1 |D13REG_MODE_DMA16 292 1 ); 293 1 294 1 } 295 296 297 void config_endpoint(void) 298 { 299 1 /*Control Endpoint*/ 300 1 Hal4D13_SetEndpointConfig(D13REG_EPCNFG_FIFO_EN|D13REG_EPCNFG_NONISOSZ_64,EPINDEX4EP0_CONTROL_OUT); 301 1 Hal4D13_SetEndpointConfig(D13REG_EPCNFG_FIFO_EN|D13REG_EPCNFG_IN_EN|D13REG_EPCNFG_NONISOSZ_64,EPINDEX4EP0 C51 COMPILER V7.06 MAINLOOP 08/18/2005 15:30:30 PAGE 6 -_CONTROL_IN); 302 1 /*Control Endpoint*/ 303 1 304 1 /*DISABLED*/ 305 1 Hal4D13_SetEndpointConfig(/*D13REG_EPCNFG_FIFO_EN|*/D13REG_EPCNFG_NONISOSZ_8,EPINDEX4EP01); 306 1 Hal4D13_SetEndpointConfig(/*D13REG_EPCNFG_FIFO_EN|*/D13REG_EPCNFG_IN_EN|D13REG_EPCNFG_NONISOSZ_8,EPINDEX4 -EP02); 307 1 /*DISABLED*/ 308 1 309 1 /*Bulk Enpoints Double Buffered*/ 310 1 Hal4D13_SetEndpointConfig(D13REG_EPCNFG_FIFO_EN|D13REG_EPCNFG_DBLBUF_EN|D13REG_EPCNFG_NONISOSZ_64,EPINDEX -4EP03); 311 1 Hal4D13_SetEndpointConfig(D13REG_EPCNFG_FIFO_EN|D13REG_EPCNFG_DBLBUF_EN|D13REG_EPCNFG_IN_EN|D13REG_EPCNFG -_NONISOSZ_64,EPINDEX4EP04); 312 1 /*Bulk Enpoints Double Buffered*/ 313 1 314 1 /*Isochronous Endpoints*/ 315 1 Hal4D13_SetEndpointConfig(D13REG_EPCNFG_FIFO_EN|D13REG_EPCNFG_DBLBUF_EN|D13REG_EPCNFG_ISOSZ_512|D13REG_EP -CNFG_ISO_EN,EPINDEX4EP05); 316 1 Hal4D13_SetEndpointConfig(D13REG_EPCNFG_FIFO_EN|D13REG_EPCNFG_DBLBUF_EN|D13REG_EPCNFG_ISOSZ_512|D13REG_EP -CNFG_ISO_EN|D13REG_EPCNFG_IN_EN,EPINDEX4EP06); 317 1 /*Isochronous Endpoints*/ 318 1 319 1 /*DISABLED*/ 320 1 Hal4D13_SetEndpointConfig(/*D13REG_EPCNFG_FIFO_EN|*/D13REG_EPCNFG_DBLBUF_EN|D13REG_EPCNFG_ISOSZ_16|D13REG -_EPCNFG_ISO_EN,EPINDEX4EP07); 321 1 Hal4D13_SetEndpointConfig(/*D13REG_EPCNFG_FIFO_EN|*/D13REG_EPCNFG_IN_EN|D13REG_EPCNFG_DBLBUF_EN|D13REG_EP -CNFG_ISOSZ_16|D13REG_EPCNFG_ISO_EN,EPINDEX4EP08); 322 1 Hal4D13_SetEndpointConfig(/*D13REG_EPCNFG_FIFO_EN|*/D13REG_EPCNFG_DBLBUF_EN|D13REG_EPCNFG_ISOSZ_16|D13REG -_EPCNFG_ISO_EN,EPINDEX4EP09); 323 1 Hal4D13_SetEndpointConfig(/*D13REG_EPCNFG_FIFO_EN|*/D13REG_EPCNFG_IN_EN|D13REG_EPCNFG_DBLBUF_EN|D13REG_EP -CNFG_ISOSZ_16|D13REG_EPCNFG_ISO_EN,EPINDEX4EP0A); 324 1 Hal4D13_SetEndpointConfig(/*D13REG_EPCNFG_FIFO_EN|*/D13REG_EPCNFG_DBLBUF_EN|D13REG_EPCNFG_ISOSZ_64|D13REG -_EPCNFG_ISO_EN,EPINDEX4EP0B); 325 1 Hal4D13_SetEndpointConfig(/*D13REG_EPCNFG_FIFO_EN|*/D13REG_EPCNFG_IN_EN|D13REG_EPCNFG_DBLBUF_EN|D13REG_EP -CNFG_ISOSZ_64|D13REG_EPCNFG_ISO_EN,EPINDEX4EP0C); 326 1 Hal4D13_SetEndpointConfig(/*D13REG_EPCNFG_FIFO_EN|*/D13REG_EPCNFG_DBLBUF_EN|D13REG_EPCNFG_ISOSZ_64|D13REG -_EPCNFG_ISO_EN,EPINDEX4EP0D); 327 1 Hal4D13_SetEndpointConfig(/*D13REG_EPCNFG_FIFO_EN|*/D13REG_EPCNFG_IN_EN|D13REG_EPCNFG_DBLBUF_EN|D13REG_EP -CNFG_ISOSZ_64|D13REG_EPCNFG_ISO_EN,EPINDEX4EP0E); 328 1 /*DISABLED*/ 329 1 330 1 331 1 /*Set interrupt configuration*/ 332 1 Hal4D13_SetIntEnable(D13REG_INTSRC_EP0OUT 333 1 |D13REG_INTSRC_EP0IN 334 1 |D13REG_INTSRC_EP03 335 1 |D13REG_INTSRC_EP04 336 1 |D13REG_INTSRC_EP05 337 1 |D13REG_INTSRC_EP06 338 1 |D13REG_INTSRC_SUSPEND 339 1 |D13REG_INTSRC_RESUME 340 1 |D13REG_INTSRC_BUSRESET 341 1 ); 342 1 343 1 /*Set Hardware Configuration*/ 344 1 Hal4D13_SetDevConfig(D13REG_DEVCNFG_NOLAZYCLOCK 345 1 |D13REG_DEVCNFG_CLOCKDIV_120M 346 1 |D13REG_DEVCNFG_DMARQPOL 347 1 // |D13REG_DEVCNFG_EXPULLUP 348 1 ); 349 1 C51 COMPILER V7.06 MAINLOOP 08/18/2005 15:30:30 PAGE 7 350 1 } 351 352 void reconnect_USB(void) 353 { 354 1 disconnect_USB(); 355 1 connect_USB(); 356 1 } 357 358 359 360 void suspend_change(void) 361 { 362 1 printf("SUSPEND CHANGE\n"); 363 1 // Suspend_Device_Controller(); 364 1 } 365 366 void ML_AcknowledgeSETUP(void) 367 { 368 1 369 1 if( Hal4D13_IsSetupPktInvalid() || ControlData.Abort) 370 1 { 371 2 return; 372 2 } 373 1 374 1 Hal4D13_AcknowledgeSETUP(); 375 1 Hal4D13_ClearBuffer(EPINDEX4EP0_CONTROL_OUT); 376 1 } 377 378 379 380 void ML_Reserved(void) 381 { 382 1 Hal4D13_ClearBuffer(EPINDEX4EP0_CONTROL_OUT); 383 1 } 384 385 386 387 unsigned short CHECK_CHIP_ID(void) 388 { 389 1 unsigned short CHIP_ID; 390 1 unsigned char LOW_ID, HIGH_ID; 391 1 392 1 CHIP_ID= Hal4D13_ReadChipID(); 393 1 LOW_ID = (unsigned char)CHIP_ID; 394 1 HIGH_ID = (unsigned char)(CHIP_ID >> 8) ; 395 1 396 1 switch(HIGH_ID) 397 1 { 398 2 case 0x61 : { 399 3 400 3 printf(" CHIP ID =0x%04x\n\n",CHIP_ID); 401 3 CHIP_ID =0x1161; 402 3 return CHIP_ID; 403 3 break; 404 3 } 405 2 406 2 case 0x36 : { 407 3 printf(" CHIP ID =0x%04x\n\n",CHIP_ID); 408 3 CHIP_ID = 0x1362; 409 3 return CHIP_ID; 410 3 break; 411 3 } C51 COMPILER V7.06 MAINLOOP 08/18/2005 15:30:30 PAGE 8 412 2 413 2 default : { 414 3 printf(" UNKNOWN CHIP ID =0x%04x\n\n",CHIP_ID); 415 3 return CHIP_ID; 416 3 break; 417 3 } 418 2 419 2 420 2 } 421 1 422 1 423 1 } C51 COMPILATION COMPLETE. 0 WARNING(S), 1 ERROR(S)