📄 ch375.lst
字号:
154 1 unsigned char mLength,k;
155 1 XBYTE[CH375_CMD_PORT_ADDR] = 0x54;//DISK_READ
156 1 XBYTE[CH375_DAT_PORT_ADDR] = (unsigned char)iLbaStart ; /* LBA的最低8位 */
157 1 XBYTE[CH375_DAT_PORT_ADDR] = (unsigned char)( iLbaStart >> 8 ) ;
158 1 XBYTE[CH375_DAT_PORT_ADDR] = (unsigned char)( iLbaStart >> 16 ) ;
159 1 XBYTE[CH375_DAT_PORT_ADDR] = (unsigned char)( iLbaStart >> 24 ); /* LBA的最高8位 */
160 1 XBYTE[CH375_DAT_PORT_ADDR] = iSectorCount ; /* 扇区数 */
161 1 mBufferPoint = data_buffer; /* 指向缓冲区起始地址 */
162 1 for ( mBlockCount = iSectorCount * 8; mBlockCount != 0; mBlockCount -- ) { /* 数据块计数 */
163 2 while(INT0); //等中断信号
164 2 if (mGet_Status_CH375() == USB_INT_DISK_READ) { /* USB存储器读数据块,请求数据读出 */
165 3 XBYTE[CH375_CMD_PORT_ADDR] = 0x28; //READ_USB_DAT,即把CH375内缓冲的数据读进单片机
166 3 mLength = XBYTE[CH375_DAT_PORT_ADDR]; /* 后续数据的长度 */
167 3 k = mLength;
168 3 while ( mLength ) { /* 根据长度读取数据 */
169 4 *mBufferPoint = XBYTE[CH375_DAT_PORT_ADDR]; /* 读出数据并保存 */
170 4 mBufferPoint ++;
171 4 mLength --;
172 4 }
173 3 for(i=0;i<k;i++){printf("%c",data_buffer[i]);}
174 3 XBYTE[CH375_CMD_PORT_ADDR] = 0x55;//DISK_READ_GO
175 3 }
176 2 else {printf("Error In Read Byte\n");break;} /* 返回错误状态 */
177 2 }
C51 COMPILER V8.02 CH375 05/29/2008 12:04:17 PAGE 4
178 1 printf("\n");
179 1 if ( mBlockCount == 0 ) {
180 2 while(INT0); /* 等待中断并获取状态 */
181 2 if (mGet_Status_CH375()== USB_INT_SUCCESS) printf("Success In Read Sector\n"); /* 操作成功 */
182 2 else printf("Error In Read Sector \n");
183 2
184 2 }
185 1
186 1 }
*** WARNING C173 IN LINE 186 OF CH375.C: missing return-expression
187 //***************************
188 void mWriteSector( unsigned long iLbaStart, unsigned char iSectorCount )
189 {
190 1 unsigned char *mBufferPoint;
191 1 unsigned int mBlockCount;
192 1 unsigned char mLength;
193 1 XBYTE[CH375_CMD_PORT_ADDR] = 0x56;//DISK_WRITE
194 1 XBYTE[CH375_DAT_PORT_ADDR] = (unsigned char)iLbaStart ; // LBA的最低8位
195 1 XBYTE[CH375_DAT_PORT_ADDR] = (unsigned char)( iLbaStart >> 8 ) ;
196 1 XBYTE[CH375_DAT_PORT_ADDR] = (unsigned char)( iLbaStart >> 16 ) ;
197 1 XBYTE[CH375_DAT_PORT_ADDR] = (unsigned char)( iLbaStart >> 24 ); // LBA的最高8位
198 1 XBYTE[CH375_DAT_PORT_ADDR] = iSectorCount ; // 扇区数
199 1 mBufferPoint = data_buffer; // 指向缓冲区起始地址
200 1 for ( mBlockCount = iSectorCount * 8; mBlockCount != 0; mBlockCount -- ) { // 数据块计数
201 2 while(INT0); //等中断信号
202 2 if (mGet_Status_CH375() == USB_INT_DISK_WRITE) { //USB存储器读数据块,请求写数据
203 3 XBYTE[CH375_CMD_PORT_ADDR] = 0x2b; //WRITE_USB_DAT
204 3 mLength = 64; // 后续数据的长度
205 3 XBYTE[CH375_DAT_PORT_ADDR] = 64; //每次写入数据块64个字节
206 3 while ( mLength ) { // 根据长度读取数据
207 4 XBYTE[CH375_DAT_PORT_ADDR] = *mBufferPoint; // 写入数据
208 4 mBufferPoint ++;
209 4 mLength --;
210 4 }
211 3 XBYTE[CH375_CMD_PORT_ADDR] = 0x57;//DISK_READ_GO
212 3 }
213 2 else {printf("Error In Write Byte\n");break;} // 返回错误状态
214 2 }
215 1 if ( mBlockCount == 0 ) {
216 2 while(INT0); // 等待中断并获取状态
217 2 if (mGet_Status_CH375()== USB_INT_SUCCESS) printf("Success In Write Sector\n"); // 操作成功
218 2 else printf("Error In Write Sector \n");
219 2
220 2 }
221 1 }
222
223 void main( ){
224 1 unsigned int j;
225 1 unsigned char sectorcount;
226 1 unsigned long sectoraddr;
227 1 mInitSTDIO( ); //初始化
228 1 getchar(); //
229 1 printf("Rest CH375, About 40ms\n");//
230 1 mRestCH375( );
231 1 j = mGET_CH375_VER(); //CH375的版本号
232 1 printf("CH375 Version:%#x\n",i);
233 1 printf("Varify CH375,Please input data:");
234 1 i = recv_data();
235 1 printf("%#x\n",(unsigned int)i);
236 1 j = mVarifyCH375(i);
237 1 printf("Invert Date %#x\n",j);
238 1 if((i^j)==0xff) printf("Success to Varify CH375\n");
C51 COMPILER V8.02 CH375 05/29/2008 12:04:17 PAGE 5
239 1 else printf("Error to Varify CH375\n");
240 1 printf("Set CH375 Mode for 06\n");
241 1 mSetmodeCH375( );
242 1 printf("Input Hightest Byte:");
243 1 sectoraddr= recv_data();
244 1 printf("%ld\n",sectoraddr);
245 1 sectoraddr<<=8;
246 1
247 1 printf("Input Hight Byte:");
248 1 sectoraddr|= recv_data();
249 1 printf("%ld\n",sectoraddr);
250 1 sectoraddr<<=8;
251 1
252 1 printf("Input Low Byte:");
253 1 sectoraddr|= recv_data();
254 1 printf("%ld\n",sectoraddr);
255 1 sectoraddr<<=8;
256 1
257 1 printf("Input Lowest Byte:");
258 1 sectoraddr|= recv_data();
259 1 printf("%ld\n",sectoraddr);
260 1
261 1 printf("Input Sector Number:");
262 1 sectorcount= recv_data();
263 1 printf("%d\n",(unsigned int)sectorcount);
264 1
265 1
266 1 printf("Wait for USB\n");
267 1 while(1){
268 2 while(INT0);
269 2 i = mGet_Status_CH375();
270 2 switch(i){
271 3 case 0x14: printf("USB_INT_SUCCESS\n");break;
272 3 case 0x15: printf("USB_INT_CONNECT\n");
273 3 delay1ms(100);
274 3 mDisk_Init();
275 3 printf( "Read %d Sector, %ld# to buffer\n",(unsigned int)sectorcount,sectoraddr );
276 3 mReadSector(sectoraddr,sectorcount);
277 3 delay1ms(100);
278 3 printf( "Write 2 Sector 12# from buffer\n" );
279 3 mWriteSector(12,2);
280 3 break;
281 3
282 3 case 0x16: printf("USB_INT_DISCONNECT\n"); break;
283 3 case 0x17: printf("USB_INT_BUS_OVER\n"); break;
284 3 case 0x1D: printf("USB_INT_DISK_READ\n"); break;
285 3 case 0x1E: printf("USB_INT_DISK_WRITE\n"); break;
286 3 case 0x1F: printf("USB_INT_DISK_ERR\n"); break;
287 3 default: printf("OTHER INFORMASSAGE\n"); break;
288 3 }
289 2
290 2
291 2 }
292 1 }
293
294
295
296
297
298
C51 COMPILER V8.02 CH375 05/29/2008 12:04:17 PAGE 6
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1419 ----
CONSTANT SIZE = 722 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 6 37
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -