📄 ch375ev0.lis
字号:
02D2 ; if( 160+col < 230 )
02D2 C601 movw R24,R12
02D4 8056 subi R24,96 ; offset = 160
02D6 9F4F sbci R25,255
02D8 863E cpi R24,230
02DA E0E0 ldi R30,0
02DC 9E07 cpc R25,R30
02DE 20F5 brsh L78
02E0 .dbline 265
02E0 ; {
02E0 .dbline 266
02E0 ; ShowNumber(j,160+col, DATA_BUFFER[mLength]); //显示
02E0 80E0 ldi R24,<_DATA_BUFFER
02E2 90E0 ldi R25,>_DATA_BUFFER
02E4 EE2D mov R30,R14
02E6 FF27 clr R31
02E8 E80F add R30,R24
02EA F91F adc R31,R25
02EC 2080 ldd R2,z+0
02EE 3324 clr R3
02F0 3982 std y+1,R3
02F2 2882 std y+0,R2
02F4 9601 movw R18,R12
02F6 2056 subi R18,96 ; offset = 160
02F8 3F4F sbci R19,255
02FA 0A81 ldd R16,y+2
02FC 1B81 ldd R17,y+3
02FE 0E940000 xcall _ShowNumber
0302 .dbline 267
0302 ; j+=4;
0302 8A81 ldd R24,y+2
0304 9B81 ldd R25,y+3
0306 0496 adiw R24,4
0308 9B83 std y+3,R25
030A 8A83 std y+2,R24
030C .dbline 268
030C ; if(j>37)
030C 85E2 ldi R24,37
030E 90E0 ldi R25,0
0310 0A80 ldd R0,y+2
0312 1B80 ldd R1,y+3
0314 8015 cp R24,R0
0316 9105 cpc R25,R1
0318 38F4 brsh L80
031A .dbline 269
031A ; {
031A .dbline 270
031A ; j=0;
031A 0024 clr R0
031C 1124 clr R1
031E 1B82 std y+3,R1
0320 0A82 std y+2,R0
0322 .dbline 271
0322 ; col+=16;
0322 C601 movw R24,R12
0324 4096 adiw R24,16
0326 6C01 movw R12,R24
0328 .dbline 272
0328 ; }
0328 L80:
0328 .dbline 273
0328 ; }
0328 L78:
0328 .dbline 274
0328 EA94 dec R14
032A .dbline 275
032A C501 movw R24,R10
032C 0196 adiw R24,1
032E 5C01 movw R10,R24
0330 .dbline 276
0330 L76:
0330 .dbline 262
0330 EE20 tst R14
0332 09F0 breq X7
0334 C6CF xjmp L75
0336 X7:
0336 .dbline 277
0336 ; mLength--;
0336 ; mBufferPoint++;
0336 ; }
0336 ; CH375_WR_CMD_PORT( CMD_DISK_RD_GO ); /* 继续执行USB存储器的读操作 */
0336 05E5 ldi R16,85
0338 85DE xcall _CH375_WR_CMD_PORT
033A .dbline 278
033A ; }
033A .dbline 279
033A ; else break; /* 返回错误状态 */
033A L74:
033A .dbline 280
033A L70:
033A .dbline 257
033A 6150 subi R22,1
033C 7040 sbci R23,0
033E L72:
033E .dbline 257
033E 6030 cpi R22,0
0340 6707 cpc R22,R23
0342 09F0 breq X8
0344 B4CF xjmp L69
0346 X8:
0346 X4:
0346 L71:
0346 .dbline 281
0346 ; }
0346 ; if ( mBlockCount == 0 ) {
0346 6030 cpi R22,0
0348 6707 cpc R22,R23
034A 31F4 brne L82
034C X5:
034C .dbline 281
034C .dbline 282
034C ; mIntStatus = mWaitInterrupt( ); /* 等待中断并获取状态 */
034C B7DE xcall _mWaitInterrupt
034E 402F mov R20,R16
0350 .dbline 283
0350 ; if ( mIntStatus == USB_INT_SUCCESS ) return( 0 ); /* 操作成功 */
0350 0431 cpi R16,20
0352 11F4 brne L84
0354 .dbline 283
0354 0027 clr R16
0356 02C0 xjmp L68
0358 L84:
0358 .dbline 284
0358 ; }
0358 L82:
0358 .dbline 286
0358 ; // if ( mIntStatus == USB_INT_DISCONNECT ) return( mIntStatus ); /* U盘断开 */
0358 ; mClearError( ); /* 清除U盘错误以便重试 */
0358 63DF xcall _mClearError
035A .dbline 287
035A ; return( mIntStatus ); /* 操作失败 */
035A 042F mov R16,R20
035C .dbline -2
035C L68:
035C 2496 adiw R28,4
035E 0E940000 xcall pop_gset5
0362 2496 adiw R28,4
0364 .dbline 0 ; func end
0364 0895 ret
0366 .dbsym r mBlockCount 22 i
0366 .dbsym r mIntStatus 20 c
0366 .dbsym r mBufferPoint 10 pc
0366 .dbsym r col 12 i
0366 .dbsym l j 2 i
0366 .dbsym r mLength 14 c
0366 .dbsym l iSectorCount 18 c
0366 .dbsym l iLbaStart 14 l
0366 .dbend
0366 .dbfunc e mWriteSector _mWriteSector fc
0366 ; col -> R22,R23
0366 ; j -> R22,R23
0366 ; mBlockCount -> R22,R23
0366 ; mIntStatus -> R20
0366 ; mBufferPoint -> R10,R11
0366 ; mLength -> R12
0366 ; iSectorCount -> y+12
0366 ; iLbaStart -> y+8
.even
0366 _mWriteSector::
0366 0E940000 xcall push_arg4
036A 0E940000 xcall push_gset4
036E .dbline -1
036E .dbline 293
036E ; }
036E ;
036E ; /* 将缓冲区中的多个扇区的数据块写入U盘 */
036E ; unsigned char mWriteSector( unsigned long iLbaStart, unsigned char iSectorCount )
036E ; /* iLbaStart 是写入的线起始性扇区号, iSectorCount 是写入的扇区数 */
036E ; {
036E .dbline 296
036E ; unsigned char mIntStatus;
036E ; unsigned char *mBufferPoint;
036E ; unsigned int mBlockCount,j=0,col=0;
036E 6627 clr R22
0370 7727 clr R23
0372 .dbline 296
0372 .dbline 298
0372 ; unsigned char mLength;
0372 ; CH375_WR_CMD_PORT( CMD_DISK_WRITE ); /* 向USB存储器写数据块 */
0372 06E5 ldi R16,86
0374 67DE xcall _CH375_WR_CMD_PORT
0376 .dbline 299
0376 ; CH375_WR_DAT_PORT( (unsigned char)iLbaStart ); /* LBA的最低8位 */
0376 FE01 movw R30,R28
0378 0085 ldd R16,z+8
037A 79DE xcall _CH375_WR_DAT_PORT
037C .dbline 300
037C ; CH375_WR_DAT_PORT( (unsigned char)( iLbaStart >> 8 ) );
037C 88E0 ldi R24,8
037E 90E0 ldi R25,0
0380 FE01 movw R30,R28
0382 2084 ldd R2,z+8
0384 3184 ldd R3,z+9
0386 4284 ldd R4,z+10
0388 5384 ldd R5,z+11
038A 8A93 st -y,R24
038C 8101 movw R16,R2
038E 9201 movw R18,R4
0390 0E940000 xcall lsr32
0394 6CDE xcall _CH375_WR_DAT_PORT
0396 .dbline 301
0396 ; CH375_WR_DAT_PORT( (unsigned char)( iLbaStart >> 16 ) );
0396 FE01 movw R30,R28
0398 2084 ldd R2,z+8
039A 3184 ldd R3,z+9
039C 4284 ldd R4,z+10
039E 5384 ldd R5,z+11
03A0 1201 movw R2,R4
03A2 4424 clr R4
03A4 5524 clr R5
03A6 022D mov R16,R2
03A8 62DE xcall _CH375_WR_DAT_PORT
03AA .dbline 302
03AA ; CH375_WR_DAT_PORT( (unsigned char)( iLbaStart >> 24 ) ); /* LBA的最高8位 */
03AA 88E1 ldi R24,24
03AC 90E0 ldi R25,0
03AE FE01 movw R30,R28
03B0 2084 ldd R2,z+8
03B2 3184 ldd R3,z+9
03B4 4284 ldd R4,z+10
03B6 5384 ldd R5,z+11
03B8 8A93 st -y,R24
03BA 8101 movw R16,R2
03BC 9201 movw R18,R4
03BE 0E940000 xcall lsr32
03C2 55DE xcall _CH375_WR_DAT_PORT
03C4 .dbline 303
03C4 ; CH375_WR_DAT_PORT( iSectorCount ); /* 扇区数 */
03C4 0C85 ldd R16,y+12
03C6 53DE xcall _CH375_WR_DAT_PORT
03C8 .dbline 304
03C8 ; mBufferPoint = DATA_BUFFER; /* 指向缓冲区起始地址 */
03C8 80E0 ldi R24,<_DATA_BUFFER
03CA 90E0 ldi R25,>_DATA_BUFFER
03CC 5C01 movw R10,R24
03CE .dbline 305
03CE 20900000 lds R2,_BlockPerSector
03D2 0C84 ldd R0,y+12
03D4 029C mul R0,R2
03D6 B001 movw R22,R0
03D8 1DC0 xjmp L90
03DA L87:
03DA .dbline 305
03DA ; for ( mBlockCount = iSectorCount * BlockPerSector; mBlockCount != 0; mBlockCount -- ) { /* 数据块计数 */
03DA .dbline 306
03DA ; mIntStatus = mWaitInterrupt( ); /* 等待中断并获取状态 */
03DA 70DE xcall _mWaitInterrupt
03DC 402F mov R20,R16
03DE .dbline 307
03DE ; if ( mIntStatus == USB_INT_DISK_WRITE ) { /* USB存储器写数据块,请求数据写入 */
03DE 0E31 cpi R16,30
03E0 E1F4 brne L89
03E2 .dbline 307
03E2 .dbline 308
03E2 ; CH375_WR_CMD_PORT( CMD_WR_USB_DATA7 ); /* 向CH375缓冲区写入数据块 */
03E2 0BE2 ldi R16,43
03E4 2FDE xcall _CH375_WR_CMD_PORT
03E6 .dbline 309
03E6 ; mLength = CH375_BLOCK_SIZE;
03E6 80E4 ldi R24,64
03E8 C82E mov R12,R24
03EA .dbline 310
03EA ; CH375_WR_DAT_PORT( mLength ); /* 后续数据的长度 */
03EA 082F mov R16,R24
03EC 40DE xcall _CH375_WR_DAT_PORT
03EE 0CC0 xjmp L94
03F0 L93:
03F0 .dbline 311
03F0 .dbline 312
03F0 80E0 ldi R24,<_DATA_BUFFER
03F2 90E0 ldi R25,>_DATA_BUFFER
03F4 EC2D mov R30,R12
03F6 FF27 clr R31
03F8 E80F add R30,R24
03FA F91F adc R31,R25
03FC 0081 ldd R16,z+0
03FE 37DE xcall _CH375_WR_DAT_PORT
0400 .dbline 323
0400 C501 movw R24,R10
0402 0196 adiw R24,1
0404 5C01 movw R10,R24
0406 .dbline 324
0406 CA94 dec R12
0408 .dbline 325
0408 L94:
0408 .dbline 311
0408 ; while ( mLength ) { //根据长度写入数据
0408 CC20 tst R12
040A 91F7 brne L93
040C .dbline 330
040C ; CH375_WR_DAT_PORT( DATA_BUFFER[mLength]); // 将数据写入
040C ; /* if( 160+col < 240 )
040C ; {
040C ; ShowNumber(j,160+col,*mBufferPoint); //显示 *mBufferPoint
040C ; j+=4;
040C ; if(j>37)
040C ; {
040C ; j=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -