C51 COMPILER V7.06 DEVICE 12/31/2008 12:12:31 PAGE 1 C51 COMPILER V7.06, COMPILATION OF MODULE DEVICE OBJECT MODULE PLACED IN DEVICE.OBJ COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DEVICE.C LARGE OMF2 OPTIMIZE(9,SIZE) BROWSE DEBUG stmt level source 1 /* ÒÔÏÂΪUSBÉ豸·½Ê½µÄÓ¦ÓóÌÐò, ÍêÕû³ÌÐòÔÚCH372/CH375µ÷ÊÔ¹¤¾ß³ÌÐò°üÖÐCH372DBG.C */ 2 /* 3 ; µ¥Æ¬»úÄÚÖÃUSBµ÷ÊԹ̼þ³ÌÐò V1.0 4 ; ÓÃÓÚÁ¬½ÓCH372»òÕßCH375µÄµ¥Æ¬»ú½øÐмòµ¥µÄµ÷ÊÔ¹¦ÄÜ 5 ; ¿ÉÒÔÓÃincludeÖ±½Ó°üº¬µ½Ó¦ÓÃϵͳµÄÖ÷³ÌÐòÖÐ,»òÕßÌí¼Óµ½¹¤³ÌÏîÄ¿ÖÐ 6 ; 7 ; Website: http://winchiphead.com 8 ; Email: tech@winchiphead.com 9 ; @2004.08 10 ;**************************************************************************** 11 */ 12 13 /* MCS-51µ¥Æ¬»úCÓïÑÔ, KC7.0 */ 14 /* ÓÃÓÚÆäËüÀàÐ͵¥Æ¬»ú»òÕßÓ²¼þ×ÊÔ´²»Í¬Ê±, ¸Ã³ÌÐòÓ¦¸Ã¸ù¾ÝÐèÒª½øÐоֲ¿ÐÞ¸Ä */ 15 16 #define CH375HF_NO_CODE 1 17 #include "CH375.H" 18 19 #ifdef __C51__ 20 #pragma NOAREGS 21 #endif 22 23 #ifndef MAX_DATA_SIZE 24 #define MAX_DATA_SIZE 20 /* µ¥´ÎÃüÁî´¦ÀíµÄ×î´óÊý¾Ý³¤¶È,ÓÐЧֵÊÇ1µ½56 */ 25 #endif 26 27 typedef struct _USB_DOWN_PACKET { /* Ï´«µÄÊý¾Ý°ü½á¹¹,ÓÃÓÚÃüÁî/дÊý¾Ý */ 28 UINT8 mCommand; /* ÃüÁîÂë,¼ûÏÂÃæµÄ¶¨Òå */ 29 UINT8 mCommandNot; /* ÃüÁîÂëµÄ·´Âë,ÓÃÓÚУÑéÏ´«Êý¾Ý°ü */ 30 union { 31 UINT8 mByte[4]; /* ͨÓòÎÊý */ 32 UINT16 mWord[2]; /* ͨÓòÎÊý,µÍ×Ö½ÚÔÚǰ,Little-Endian */ 33 UINT32 mDword; /* ͨÓòÎÊý,µÍ×Ö½ÚÔÚǰ,Little-Endian */ 34 void *mAddress; /* ¶Áд²Ù×÷µÄÆðʼµØÖ·,µÍ×Ö½ÚÔÚǰ,Little-Endian */ 35 } u; 36 UINT8 mLength; /* ÏÂÃæµÄ»º³åÇøµÄ³¤¶È,¶Áд²Ù×÷µÄ×Ö½ÚÊý */ 37 UINT8 mBuffer[ MAX_DATA_SIZE ]; /* Êý¾Ý»º³åÇø */ 38 } USB_DOWN_PKT; 39 40 typedef struct _USB_UP_PACKET { /* ÉÏ´«µÄÊý¾Ý°ü½á¹¹,ÓÃÓÚ״̬/¶ÁÊý¾Ý */ 41 UINT8 mStatus; /* ״̬Âë,¼ûÏÂÃæµÄ¶¨Òå */ 42 UINT8 mCommandNot; /* ÃüÁîÂëµÄ·´Âë,ÓÃÓÚУÑéÉÏ´«Êý¾Ý°ü */ 43 UINT8 mReserved[4]; 44 UINT8 mLength; /* ÏÂÃæµÄ»º³åÇøµÄ³¤¶È,¶Á²Ù×÷µÄ×Ö½ÚÊý */ 45 UINT8 mBuffer[ MAX_DATA_SIZE ]; /* Êý¾Ý»º³åÇø */ 46 } USB_UP_PKT; 47 48 typedef union _USB_DATA_PACKET { /* USBÉÏ´«»òÕßÏ´«Êý¾Ý»º³åÇø */ 49 USB_DOWN_PKT down; 50 USB_UP_PKT up; 51 } USB_DATA_PKT; 52 53 /* ÃüÁîÂ붨Òå,°´Î»ËµÃ÷ 54 λ7ΪÃüÁîÀàÐÍ: 0=ʵÏÖÌØ¶¨¹¦ÄÜ, 1=´æ´¢Æ÷ºÍSFR¶Áд 55 ¶ÔÓÚ"ʵÏÖÌØ¶¨¹¦ÄÜ"ÃüÁîÀàÐÍ: C51 COMPILER V7.06 DEVICE 12/31/2008 12:12:31 PAGE 2 56 λ6-λ0Ϊ¶¨ÒåµÄ¾ßÌåÃüÁîÂë, ÃüÁîÂëΪ00H-7FH, ÆäÖÐ: 00H-3FHΪͨÓñê×¼ÃüÁî, 40H-7FHΪÓëÓ¦ÓÃϵͳÓйصÄÌ -ض¨ÃüÁî 57 Ŀǰ°æ±¾¶¨ÒåÁËÒÔÏÂͨÓñê×¼ÃüÁî: 58 00H: »ñÈ¡µ÷ÊԹ̼þ³ÌÐòµÄ°æ±¾,²¢È¡ÏûδÍê³ÉµÄÉÏ´«Êý¾Ý¿é 59 10H: »ñÈ¡µ±Ç°Ó¦ÓÃϵͳµÄ°æ±¾ºÍ˵Ã÷×Ö·û´® 60 ¶ÔÓÚ"´æ´¢Æ÷ºÍSFR¶Áд"ÃüÁîÀàÐÍ: 61 λ6ΪÊý¾Ý´«Êä·½Ïò: 0=¶Á²Ù×÷/ÉÏ´«, 1=д²Ù×÷/Ï´« 62 λ5-λ4ΪÊý¾Ý¶Áд¿í¶È: 00=ÒÔ×Ö½ÚΪµ¥Î»/8λ, 01=ÒÔ×ÖΪµ¥Î»/16λ, 10=ÒÔË«×ÖΪµ¥Î»/32λ, 11=ÒÔλΪµ¥Î -»/1λ 63 λ1-λ0Ϊ´æ´¢Æ÷¿Õ¼ä: 00=´æÈ¡SFR, 01=´æÈ¡ÄÚ²¿RAM, 10=´æÈ¡ÍⲿRAM, 11=´æÈ¡³ÌÐòROM 64 ÀýÈç: ÃüÁîÂë80HΪ¶ÁSFR, ÃüÁîÂë83HΪ¶Á³ÌÐòROM, ÃüÁîÂëC1HΪдÄÚ²¿RAM, ÃüÁîÂëC2HΪдÍⲿRAM 65 ״̬Â붨Òå: 00HΪ²Ù×÷³É¹¦, 080HΪÃüÁî²»Ö§³Ö, 0FFHΪ䶨ÒåµÄ´íÎó */ 66 67 #define USB_CMD_GET_FW_INFO 0x00 68 #define USB_CMD_GET_APP_INFO 0x10 69 70 #define USB_CMD_MEM_ACCESS 0x80 71 #define USB_CMD_MEM_DIR_WR 0x40 72 #define USB_CMD_MEM_WIDTH 0x0C 73 #define USB_CMD_MEM_W_BYTE 0x00 74 #define USB_CMD_MEM_W_WORD 0x04 75 #define USB_CMD_MEM_W_DWORD 0x08 76 #define USB_CMD_MEM_W_BIT 0x0C 77 #define USB_CMD_MEM_SPACE 0x03 78 #define USB_CMD_MEM_S_SFR 0x00 79 #define USB_CMD_MEM_S_IRAM 0x01 80 #define USB_CMD_MEM_S_XRAM 0x02 81 #define USB_CMD_MEM_S_ROM 0x03 82 83 #define ERR_SUCCESS 0x00 84 #define ERR_PARAMETER 0x10 85 #define ERR_UNSUPPORT 0x80 86 #define ERR_UNDEFINED 0xFF 87 88 #define THIS_FIRMWARE_VER 0x10 89 #define THIS_APP_SYS_VER 0x09 90 #define THIS_APP_SYS_STR "CH375+MCS51" 91 92 93 #define DELAY_START_VALUE 1 /* ¸ù¾Ýµ¥Æ¬»úµÄʱÖÓÑ¡Ôñ³õÖµ,20MHzÒÔÏÂΪ0,30MHzÒÔÉÏΪ2 */ 94 95 /*UINT8V FreeUSBmS;*/ 96 #define FreeUSBmS CH375DiskStatus /* ½ÚÔ¼Õ¼ÓõÄÄÚ´æ,ÒòΪUSBÖ÷´Ó²»»áͬʱÔËÐÐ,ËùÒÔUSBÖ÷»úµÄ±äÁ¿¿ÉÒÔÓà -ÓÚUSBÉ豸 */ 97 98 99 /* ÑÓʱ1΢Ãë,²»¾«È·,ÐèÒª¸ù¾ÝÓ²¼þʵ¼ÊÇé¿öµ÷Õû */ 100 void Delay1us( ) 101 { 102 1 #if DELAY_START_VALUE != 0 103 1 UINT8 i; 104 1 for ( i=DELAY_START_VALUE; i!=0; i-- ); 105 1 #endif 106 1 } 107 108 /* ÑÓʱ2΢Ãë,²»¾«È·,ÐèÒª¸ù¾ÝÓ²¼þʵ¼ÊÇé¿öµ÷Õû */ 109 void Delay2us( ) 110 { 111 1 UINT8 i; 112 1 for ( i=DELAY_START_VALUE*2+1; i!=0; i-- ); 113 1 } 114 C51 COMPILER V7.06 DEVICE 12/31/2008 12:12:31 PAGE 3 115 /* ÓëCH372/CH375ÓйصĻù±¾I/O²Ù×÷ */ 116 117 void CH375_WR_CMD_PORT( UINT8 cmd ) { /* ÏòCH375µÄÃüÁî¶Ë¿ÚдÈëÃüÁî,ÖÜÆÚ²»Ð¡ÓÚ4uS,Èç¹ûµ¥Æ¬»ú½Ï¿ìÔòÑÓʱ */ 118 1 Delay2us(); 119 1 CH375_CMD_PORT=cmd; 120 1 Delay2us(); 121 1 } 122 123 void CH375_WR_DAT_PORT( UINT8 dat ) { /* ÏòCH375µÄÊý¾Ý¶Ë¿ÚдÈëÊý¾Ý,ÖÜÆÚ²»Ð¡ÓÚ1.5uS,Èç¹ûµ¥Æ¬»ú½Ï¿ìÔòÑÓʱ * -/ 124 1 CH375_DAT_PORT=dat; 125 1 Delay1us(); /* Èç¹ûÊÇMCS51µ¥Æ¬»ú,ÒòÆä½ÏÂý,ËùÒÔʵ¼ÊÉÏÎÞÐèÑÓʱ */ 126 1 } 127 128 UINT8 CH375_RD_DAT_PORT( void ) { /* ´ÓCH375µÄÊý¾Ý¶Ë¿Ú¶Á³öÊý¾Ý,ÖÜÆÚ²»Ð¡ÓÚ1.5uS,Èç¹ûµ¥Æ¬»ú½Ï¿ìÔòÑÓʱ */ 129 1 Delay1us(); /* Èç¹ûÊÇMCS51µ¥Æ¬»ú,ÒòÆä½ÏÂý,ËùÒÔʵ¼ÊÉÏÎÞÐèÑÓʱ */ 130 1 return( CH375_DAT_PORT ); 131 1 } 132 133 /* CH375³õʼ»¯×Ó³ÌÐò */ 134 void CH375DeviceInit( void ) { 135 1 UINT8 i; 136 1 /* ÉèÖÃUSB¹¤×÷ģʽ, ±ØÒª²Ù×÷ */ 137 1 CH375_WR_CMD_PORT( CMD_SET_USB_MODE ); 138 1 CH375_WR_DAT_PORT( 2 ); /* ÉèÖÃΪʹÓÃÄÚÖù̼þµÄUSBÉ豸·½Ê½ */ 139 1 for ( i=100; i!=0; i-- ) if ( CH375_RD_DAT_PORT( ) == CMD_RET_SUCCESS ) break; /* µÈ´ý²Ù×÷³É¹¦,ͨ³£ÐèÒªµ -È´ý10uS-20uS */ 140 1 /* if ( i == 0 ) { CH372/CH375оƬÄÚ²¿»òÕßÎïÀíÁ¬½Ó´æÔÚÓ²¼þ´íÎó }; */ 141 1 142 1 /* ÏÂÃæÆôÓÃUSBÖжÏ,CH375µÄINT#Òý½Å¿ÉÒÔÁ¬½Óµ½µ¥Æ¬»úµÄÖжÏÒý½Å,ÖжÏΪµÍµçƽÓÐЧ»òÕßϽµÑØÓÐЧ, 143 1 Èç¹û²»Ê¹ÓÃÖжÏ,ÄÇôҲ¿ÉÒÔÓòéѯ·½Ê½,Óɵ¥Æ¬»ú³ÌÐò²éѯCH375µÄINT#Òý½ÅΪµÍµçƽ */ 144 1 IT0 = 0; /* ÖÃÍⲿÐźÅΪµÍµçƽ´¥·¢ */ 145 1 IE0 = 0; /* ÇåÖжϱêÖ¾ */ 146 1 EX0 = 1; /* ÔÊÐíCH375ÖжÏ,¼Ù¶¨CH375µÄINT#Òý½ÅÁ¬½Óµ½µ¥Æ¬»úµÄINT0 */ 147 1 } 148 149 /* CH375ÖжϷþÎñ³ÌÐò,¼Ù¶¨CH375µÄINT#Òý½ÅÁ¬½Óµ½µ¥Æ¬»úµÄINT0,ʹÓüĴæÆ÷×é1 */ 150 void mCH375Interrupt( void ) interrupt 0 using 1 { 151 1 /* UINT8 cnt;*/ 152 1 /* UINT8 dat;*/ 153 1 #define cnt CH375vDiskFat /* ½ÚÔ¼Õ¼ÓõÄÄÚ´æ,ÒòΪUSBÖ÷´Ó²»»áͬʱÔËÐÐ,ËùÒÔUSBÖ÷»úµÄ±äÁ¿¿ÉÒÔÓÃÓÚUSBÉè± -¸ */ 154 1 #define dat CH375vSecPerClus /* ½ÚÔ¼Õ¼ÓõÄÄÚ´æ,ÒòΪUSBÖ÷´Ó²»»áͬʱÔËÐÐ,ËùÒÔUSBÖ÷»úµÄ±äÁ¿¿ÉÒÔÓÃÓÚUSBÉ -豸 */ 155 1 PUINT8 buf; 156 1 PUINT8C str; 157 1 /* USB_DATA_PKT udp;*/ 158 1 #define pudp ( (USB_DATA_PKT *)&mCmdParam ) /* ½ÚÔ¼½á¹¹±äÁ¿Õ¼ÓõÄÄÚ´æ,ÒòΪUSBÖ÷´Ó²»»áͬʱÔËÐÐ,ËùÒÔUSBÖ÷»ú -µÄ±äÁ¿¿ÉÒÔÓÃÓÚUSBÉ豸 */ 159 1 #define IntStatus dat /* ½ÚÔ¼Ò»¸ö±äÁ¿´æ´¢µ¥Ôª */ 160 1 CH375_WR_CMD_PORT( CMD_GET_STATUS ); /* »ñÈ¡ÖжÏ״̬²¢È¡ÏûÖжÏÇëÇó */ 161 1 FreeUSBmS = 0; /* Çå³ýUSB¿ÕÏмÆÊ± */ 162 1 IntStatus = CH375_RD_DAT_PORT( ); /* »ñÈ¡ÖжÏ״̬ */ 163 1 /* IE0 = 0; ÇåÖжϱêÖ¾,Ó뵥Ƭ»úÓ²¼þÓйØ,¶ÔÓ¦ÓÚINT0ÖÐ¶Ï */ 164 1 if ( IntStatus == USB_INT_EP2_OUT ) { /* ÅúÁ¿¶ËµãÏ´«³É¹¦,½ÓÊÕµ½ÃüÁî°ü */ 165 2 CH375_WR_CMD_PORT( CMD_RD_USB_DATA ); /* ´Óµ±Ç°USBÖжϵĶ˵㻺³åÇø¶ÁÈ¡Êý¾Ý¿é,²¢ÊÍ·Å»º³åÇø */ 166 2 cnt = CH375_RD_DAT_PORT( ); /* Ê×ÏȶÁÈ¡ºóÐøÊý¾Ý³¤¶È */ 167 2 if ( cnt == 0 ) { /* ³¤¶ÈΪ0,ûÓÐÊý¾Ý,ÔÚijЩӦÓÃÖÐÒ²¿ÉÒÔ½«³¤¶È0¶¨ÒåΪһÖÖÌØÊâÃüÁî */ 168 3 CH375_WR_CMD_PORT( CMD_SET_ENDP7 ); /* ÉèÖÃUSB¶Ëµã2µÄIN,Ò²¾ÍÊÇÅúÁ¿ÉÏ´«¶Ëµã */ 169 3 CH375_WR_DAT_PORT( 0x0E ); /* ͬ²½´¥·¢Î»²»±ä,ÉèÖÃUSB¶Ëµã2µÄINÕýæ,·µ»ØNAK,ʵ¼ÊÊÇÇå³ýÉÏ´«»º³åÇøµÄÒÑÓÐÄÚ -ÈÝ */ 170 3 return; C51 COMPILER V7.06 DEVICE 12/31/2008 12:12:31 PAGE 4 171 3 } 172 2 buf = (PUINT8)&pudp->down; /* Ö¸ÁîÃüÁî°ü»º³åÇø */ 173 2 do { 174 3 *buf = CH375_RD_DAT_PORT( ); /* ½ÓÊÕÃüÁî°üµÄÊý¾Ý */ 175 3 buf ++; 176 3 } while ( -- cnt ); 177 2 if ( pudp->down.mCommand != (UINT8)( ~ pudp->down.mCommandNot ) ) return; /* ÃüÁî°ü·´ÂëУÑé´íÎó,·ÅÆú¸ÃÏ -´«°ü */ 178 2 if ( pudp->down.mCommand & USB_CMD_MEM_ACCESS ) { /* ÃüÁîÀàÐÍ:´æ´¢Æ÷ºÍSFR¶Áд */ 179 3 if ( ( pudp->down.mCommand & USB_CMD_MEM_WIDTH ) != USB_CMD_MEM_W_BYTE ) { /* ±¾³ÌÐòĿǰ¶ÔMCS51Ö»Ö§³ÖÒ -Ô×Ö½ÚΪµ¥Î»½øÐжÁд */ 180 4 pudp->up.mLength = 0; 181 4 pudp->up.mStatus = ERR_UNSUPPORT; /* ÃüÁî²»Ö§³Ö */ 182 4 } 183 3 else { /* ÒÔ×Ö½ÚΪµ¥Î»½øÐжÁд */ 184 4 for ( cnt = 0; cnt != pudp->down.mLength; cnt ++ ) { /* ¶Áд²Ù×÷¼ÆÊý */ 185 5 dat = pudp->down.mBuffer[ cnt ]; /* ×¼±¸Ð´ÈëµÄÊý¾Ý */ 186 5 switch( pudp->down.mCommand & USB_CMD_MEM_SPACE ) { /* ´æ´¢Æ÷¿Õ¼ä */ 187 6 case USB_CMD_MEM_S_SFR: 188 6 switch ( pudp->down.u.mByte[0] ) { /* ·ÖÎöSFRµØÖ· */ 189 7 case 0x80: 190 7 if ( pudp->down.mCommand & USB_CMD_MEM_DIR_WR ) P0 = dat; 191 7 else dat = P0; 192 7 break; 193 7 case 0x87: 194 7 if ( pudp->down.mCommand & USB_CMD_MEM_DIR_WR ) PCON = dat; 195 7 else dat = PCON; 196 7 break; 197 7 case 0x88: 198 7 if ( pudp->down.mCommand & USB_CMD_MEM_DIR_WR ) TCON = dat; 199 7 else dat = TCON; 200 7 break; 201 7 case 0x89: 202 7 if ( pudp->down.mCommand & USB_CMD_MEM_DIR_WR ) TMOD = dat; 203 7 else dat = TMOD; 204 7 break; 205 7 case 0x90: 206 7 if ( pudp->down.mCommand & USB_CMD_MEM_DIR_WR ) P1 = dat; 207 7 else dat = P1; 208 7 break; 209 7 case 0x98: 210 7 if ( pudp->down.mCommand & USB_CMD_MEM_DIR_WR ) SCON = dat; 211 7 else dat = SCON; 212 7 break; 213 7 case 0x99: 214 7 if ( pudp->down.mCommand & USB_CMD_MEM_DIR_WR ) SBUF = dat; 215 7 else dat = SBUF; 216 7 break; 217 7 case 0xA0: 218 7 if ( pudp->down.mCommand & USB_CMD_MEM_DIR_WR ) P2 = dat; 219 7 else dat = P2; 220 7 break; 221 7 case 0xA8: 222 7 if ( pudp->down.mCommand & USB_CMD_MEM_DIR_WR ) IE = dat; 223 7 else dat = IE; 224 7 break; 225 7 case 0xB0: 226 7 if ( pudp->down.mCommand & USB_CMD_MEM_DIR_WR ) P3 = dat; 227 7 else dat = P3; 228 7 break; 229 7 case 0xB8: 230 7 if ( pudp->down.mCommand & USB_CMD_MEM_DIR_WR ) IP = dat; C51 COMPILER V7.06 DEVICE 12/31/2008 12:12:31 PAGE 5 231 7 else dat = IP; 232 7 break; 233 7 case 0xC8: 234 7 if ( pudp->down.mCommand & USB_CMD_MEM_DIR_WR ) T2CON = dat; 235 7 else dat = T2CON; 236 7 break; 237 7 default: 238 7 dat = 0; 239 7 break; 240 7 } 241 6 break; 242 6 case USB_CMD_MEM_S_IRAM: 243 6 if ( pudp->down.mCommand & USB_CMD_MEM_DIR_WR ) *(PUINT8)pudp->down.u.mByte[0] = dat; 244 6 else dat = *(PUINT8)pudp->down.u.mByte[0]; 245 6 break; 246 6 case USB_CMD_MEM_S_XRAM: 247 6 if ( pudp->down.mCommand & USB_CMD_MEM_DIR_WR ) *(PUINT8X)( pudp->down.u.mByte[0] | (UINT16)pudp->d -own.u.mByte[1] << 8 )= dat; 248 6 else dat = *(PUINT8X)( pudp->down.u.mByte[0] | (UINT16)pudp->down.u.mByte[1] << 8 ); 249 6 break; 250 6 case USB_CMD_MEM_S_ROM: 251 6 if ( pudp->down.mCommand & USB_CMD_MEM_DIR_WR ) pudp->up.mStatus = ERR_UNSUPPORT; /* ÃüÁî²»Ö§³Ö */ 252 6 else dat = *(PUINT8C)( pudp->down.u.mByte[0] | (UINT16)pudp->down.u.mByte[1] << 8 ); 253 6 break; 254 6 } 255 5 if ( ( pudp->down.mCommand & USB_CMD_MEM_DIR_WR ) == 0 ) pudp->up.mBuffer[ cnt ] = dat; /* ·µ»Ø¶Á³öµ -ÄÊý¾Ý */ 256 5 pudp->down.u.mByte[0] ++; 257 5 if ( pudp->down.u.mByte[0] == 0 ) pudp->down.u.mByte[1] ++; 258 5 } 259 4 if ( pudp->down.mCommand & USB_CMD_MEM_DIR_WR ) pudp->up.mLength = 0; /* д²Ù×÷²»·µ»ØÊý¾Ý */ 260 4 pudp->up.mStatus = ERR_SUCCESS; 261 4 } 262 3 } 263 2 else switch ( pudp->down.mCommand ) { /* ÃüÁîÀàÐÍ:ʵÏÖÌØ¶¨¹¦ÄÜ,·ÖÎöÃüÁîÂë */ 264 3 case USB_CMD_GET_FW_INFO: /* »ñÈ¡µ÷ÊԹ̼þ³ÌÐòµÄ°æ±¾,²¢È¡ÏûδÍê³ÉµÄÉÏ´«Êý¾Ý¿é */ 265 3 pudp->up.mBuffer[0] = THIS_FIRMWARE_VER; 266 3 pudp->up.mLength = 1; 267 3 pudp->up.mStatus = ERR_SUCCESS; 268 3 CH375_WR_CMD_PORT( CMD_SET_ENDP7 ); /* ÉèÖÃUSB¶Ëµã2µÄIN,Ò²¾ÍÊÇÅúÁ¿ÉÏ´«¶Ëµã */ 269 3 CH375_WR_DAT_PORT( 0x0E ); /* ͬ²½´¥·¢Î»²»±ä,ÉèÖÃUSB¶Ëµã2µÄINÕýæ,·µ»ØNAK,ʵ¼ÊÊÇÇå³ýÉÏ´«»º³åÇøµÄÒÑÓÐÄ -ÚÈÝ */ 270 3 break; 271 3 case USB_CMD_GET_APP_INFO: /* »ñÈ¡µ±Ç°Ó¦ÓÃϵͳµÄ°æ±¾ºÍ˵Ã÷×Ö·û´® */ 272 3 pudp->up.mBuffer[0] = THIS_APP_SYS_VER; 273 3 cnt = 0; 274 3 str = THIS_APP_SYS_STR; 275 3 while ( pudp->up.mBuffer[ cnt ] = *str ) { cnt ++; str ++; } /* ˵Ã÷×Ö·û´® */ 276 3 pudp->up.mLength = 1 + sizeof( THIS_APP_SYS_STR ); 277 3 pudp->up.mStatus = ERR_SUCCESS; 278 3 break; 279 3 /* case MY_CMD_CH451: */ 280 3 default: /* ÃüÁî²»Ö§³Ö */ 281 3 pudp->up.mLength = 0; 282 3 pudp->up.mStatus = ERR_UNSUPPORT; 283 3 break; 284 3 } 285 2 CH375_WR_CMD_PORT( CMD_WR_USB_DATA7 ); /* ÏòUSB¶Ëµã2µÄ·¢ËÍ»º³åÇøÐ´ÈëÊý¾Ý¿é */ 286 2 cnt = pudp->up.mLength + (UINT8)( & ( (USB_UP_PKT *)0 ) -> mBuffer ); 287 2 CH375_WR_DAT_PORT( cnt ); /* Ê×ÏÈдÈëºóÐøÊý¾Ý³¤¶È */ 288 2 buf = (PUINT8)&pudp->up; /* Ö¸Ïò״̬°ü»º³åÇø */ 289 2 do { C51 COMPILER V7.06 DEVICE 12/31/2008 12:12:31 PAGE 6 290 3 CH375_WR_DAT_PORT( *buf ); /* дÈëÊý¾Ýµ½CH375 */ 291 3 buf ++; 292 3 } while ( -- cnt ); 293 2 } 294 1 else if ( IntStatus == USB_INT_EP2_IN ) { /* ÅúÁ¿Êý¾Ý·¢Ëͳɹ¦,״̬°üÒÑ·¢ËÍ */ 295 2 CH375_WR_CMD_PORT( CMD_UNLOCK_USB ); /* Êͷŵ±Ç°USB»º³åÇø,ÊÕµ½ÉÏ´«³É¹¦ÖжϺó,±ØÐë½âËøUSB»º³åÇø,ÒÔ±ã¼ÌÐø -ÊÕ·¢ */ 296 2 } 297 1 else if ( IntStatus == USB_INT_EP1_IN ) { /* ÖжÏÊý¾Ý·¢Ëͳɹ¦,±¾³ÌÐòδÓõ½ */ 298 2 CH375_WR_CMD_PORT( CMD_UNLOCK_USB ); /* Êͷŵ±Ç°USB»º³åÇø */ 299 2 } 300 1 /* ÄÚÖù̼þµÄUSB·½Ê½Ï²»Ó¦¸Ã³öÏÖÆäËüÖжÏ״̬ */ 301 1 else { 302 2 CH375_WR_CMD_PORT( CMD_UNLOCK_USB ); /* Êͷŵ±Ç°USB»º³åÇø */ 303 2 } 304 1 } 305 306 /* ¹Ø±ÕCH375µÄËùÓÐUSBͨѶ */ 307 void CH375OffUSB( void ) { 308 1 EX0 = 0; /* ¹Ø±ÕUSBÖжÏ,±¾³ÌÐòÖÐUSBÖ÷»úģʽÏÂʹÓòéѯ·½Ê½ */ 309 1 /* ÉèÖÃUSB¹¤×÷ģʽ, ±ØÒª²Ù×÷ */ 310 1 CH375_WR_CMD_PORT( CMD_SET_USB_MODE ); 311 1 CH375_WR_DAT_PORT( 0 ); /* ÉèÖÃΪδÆôÓõÄUSBÉ豸·½Ê½ */ 312 1 mDelaymS( 10 ); /* ΪUSBÖ÷´ÓÇл»½øÐÐʱ¼ä»º³å,ÕâÊDZØÒªµÄÑÓʱ²Ù×÷,ÓÃÓÚÈüÆËã»úÈÏΪUSBÉ豸ÒѾ­³·Àë */ 313 1 /* Èç¹ûCH375ÈÔÈ»Á¬½Ó׿ÆËã»ú,¶ø³ÌÐòʹCH375Çл»µ½USBÖ÷»úģʽ,ÄÇô»áµ¼ÖÂÓë¼ÆËã»úÖ®¼äË«USBÖ÷»ú³åÍ» */ 314 1 } 315 316 void device( ) { 317 1 CH375DeviceInit( ); /* ³õʼ»¯USBÉ豸ģʽ */ 318 1 FreeUSBmS = 0; /* Çå³ýUSB¿ÕÏмÆÊ± */ 319 1 while( 1 ) { 320 2 if ( IsKeyPress( ) ) { /* Óмü°´Ï */ 321 3 if ( FreeUSBmS >= 250 ) { /* USB¿ÕÏг¬¹ý250ºÁÃë */ 322 4 printf( "Exit USB device mode\n" ); 323 4 CH375OffUSB( ); /* ¹Ø±ÕUSBÉ豸 */ 324 4 return; 325 4 } 326 3 } 327 2 if ( FreeUSBmS < 250 ) FreeUSBmS ++; /* USB¿ÕÏмÆÊ±,±ÜÃâÔÚUSBͨѶ¹ý³ÌÖÐÓÉÓû§°´¼üµ¼ÖÂUSBÖ÷´ÓÇл» */ 328 2 mDelaymS( 1 ); 329 2 /* USBÉ豸ģʽȫ²¿ÔÚÖжϷþÎñÖд¦Àí,Ö÷³ÌÐò¿ÉÒÔ×öÆäËüÊÂÇé,µ±È»Ò²¿ÉÒÔÔÚÖ÷³ÌÐòÖÐʹÓòéѯ·½Ê½´¦ÀíUSBÉ豸µÄͨѶ -*/ 330 2 } 331 1 } MODULE INFORMATION: STATIC OVERLAYABLE CODE SIZE = 894 ---- CONSTANT SIZE = 34 ---- XDATA SIZE = ---- 5 PDATA SIZE = ---- ---- DATA SIZE = ---- ---- IDATA SIZE = ---- ---- BIT SIZE = ---- ---- EDATA SIZE = ---- ---- HDATA SIZE = ---- ---- XDATA CONST SIZE = ---- ---- FAR CONST SIZE = ---- ---- END OF MODULE INFORMATION. C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)