📄 interface.lis
字号:
0130 ; ********************************************************************************************************/
0130 ; INT16U SD_Command(INT8U Command,void *Parameter)
0130 ; {
0130 ; INT16U rt ;
0130 ; Disk_RW_Parameter *Dp ;
0130 ; Disk_Info *DiskInfo ;
0130 ;
0130 ; Dp=(Disk_RW_Parameter*)Parameter ;
0130 6701 movw R12,R14
0132 ;
0132 ; switch(Command)
0132 BB24 clr R11
0134 AA20 tst R10
0136 11F4 brne X2
0138 BB20 tst R11
013A 89F0 breq L14
013C X2:
013C C501 movw R24,R10
013E 8130 cpi R24,1
0140 E0E0 ldi R30,0
0142 9E07 cpc R25,R30
0144 09F4 brne X5
0146 37C0 xjmp L19
0148 X5:
0148 8230 cpi R24,2
014A E0E0 ldi R30,0
014C 9E07 cpc R25,R30
014E 09F4 brne X6
0150 35C0 xjmp L20
0152 X6:
0152 8330 cpi R24,3
0154 E0E0 ldi R30,0
0156 9E07 cpc R25,R30
0158 09F4 brne X7
015A 5CC0 xjmp L24
015C X7:
015C 86C0 xjmp L11
015E X3:
015E ; {
015E L14:
015E ; case DISK_INIT :/*设备初始化*/
015E ; rt=DISK_INIT_NOT_OK ;
015E 83E8 ldi R24,131
0160 90E0 ldi R25,0
0162 5C01 movw R10,R24
0164 ; {
0164 ; DiskInfo=GetEmptyDiskInfoAddr();
0164 0E940000 xcall _GetEmptyDiskInfoAddr
0168 7801 movw R14,R16
016A ; if(DiskInfo!=NULL)
016A 0030 cpi R16,0
016C 0107 cpc R16,R17
016E 09F4 brne X8
0170 7FC0 xjmp L12
0172 X8:
0172 X4:
0172 ; {
0172 ; DiskInfo->DiskCommand=SD_Command ;
0172 80E0 ldi R24,<PL_SD_Command
0174 90E0 ldi R25,>PL_SD_Command
0176 F701 movw R30,R14
0178 95A7 std z+45,R25
017A 84A7 std z+44,R24
017C ; DiskInfo->RsvdForLow=GetVolumeFirstSect(0);
017C 0027 clr R16
017E 40DF xcall _GetVolumeFirstSect
0180 F701 movw R30,R14
0182 00A7 std z+40,R16
0184 11A7 std z+41,R17
0186 22A7 std z+42,R18
0188 33A7 std z+43,R19
018A ; /*获取卷首扇区*/
018A ; if(DiskInfo->RsvdForLow==DISK_INIT_NOT_OK)
018A 43E8 ldi R20,131
018C 50E0 ldi R21,0
018E 60E0 ldi R22,0
0190 70E0 ldi R23,0
0192 F701 movw R30,R14
0194 20A4 ldd R2,z+40
0196 31A4 ldd R3,z+41
0198 42A4 ldd R4,z+42
019A 53A4 ldd R5,z+43
019C 2416 cp R2,R20
019E 3506 cpc R3,R21
01A0 4606 cpc R4,R22
01A2 5706 cpc R5,R23
01A4 21F4 brne L17
01A6 ; rt=DISK_INIT_NOT_OK;
01A6 83E8 ldi R24,131
01A8 90E0 ldi R25,0
01AA 5C01 movw R10,R24
01AC 61C0 xjmp L12
01AE L17:
01AE ; else
01AE ; rt=DISK_INIT_OK;
01AE 83E0 ldi R24,3
01B0 90E0 ldi R25,0
01B2 5C01 movw R10,R24
01B4 ; }
01B4 ; }
01B4 ; break ;
01B4 5DC0 xjmp L12
01B6 L19:
01B6 ; case DISK_CLOSE :
01B6 ; rt=RETURN_OK;
01B6 AA24 clr R10
01B8 BB24 clr R11
01BA ; break ;
01BA 5AC0 xjmp L12
01BC L20:
01BC ; case DISK_READ_SECTOR : /*读扇区*/
01BC ; rt=DISK_READ_NOT_OK ;
01BC 80E8 ldi R24,128
01BE 90E0 ldi R25,0
01C0 5C01 movw R10,R24
01C2 ; /* 从SD卡中读一个块 */
01C2 ; //INT8U SD_ReadBlock(INT32U blockaddr,INT8U *recbuf);
01C2 ; if( SD_ReadBlock(Dp->SectorIndex+Dp->RsvdForLow,Dp->Buf)==0 )
01C2 F601 movw R30,R12
01C4 2184 ldd R2,z+9
01C6 3284 ldd R3,z+10
01C8 3982 std y+1,R3
01CA 2882 std y+0,R2
01CC F601 movw R30,R12
01CE 2580 ldd R2,z+5
01D0 3680 ldd R3,z+6
01D2 4780 ldd R4,z+7
01D4 5084 ldd R5,z+8
01D6 F601 movw R30,R12
01D8 6180 ldd R6,z+1
01DA 7280 ldd R7,z+2
01DC 8380 ldd R8,z+3
01DE 9480 ldd R9,z+4
01E0 620C add R6,R2
01E2 731C adc R7,R3
01E4 841C adc R8,R4
01E6 951C adc R9,R5
01E8 8301 movw R16,R6
01EA 9401 movw R18,R8
01EC 0E940000 xcall _SD_ReadBlock
01F0 0023 tst R16
01F2 09F0 breq X9
01F4 3DC0 xjmp L12
01F6 X9:
01F6 ; {
01F6 ; rt=DISK_READ_OK ;
01F6 81E0 ldi R24,1
01F8 90E0 ldi R25,0
01FA 5C01 movw R10,R24
01FC ; //FS调试用
01FC ; #if FS_DEBUG_EN
01FC ; #if USART1_EN
01FC ; {
01FC ; Uart1_SendString("\nFS Reading Logic Sector :");//调试用,数据区开始扇区号
01FC 00E0 ldi R16,<L23
01FE 10E0 ldi R17,>L23
0200 0E940000 xcall _Uart1_SendString
0204 ; PUT_INT32U_DecTOString(Dp->SectorIndex);
0204 F601 movw R30,R12
0206 0181 ldd R16,z+1
0208 1281 ldd R17,z+2
020A 2381 ldd R18,z+3
020C 3481 ldd R19,z+4
020E 0E940000 xcall _PUT_INT32U_DecTOString
0212 ; }
0212 ; #endif
0212 ; #endif
0212 ; }
0212 ; break ;
0212 2EC0 xjmp L12
0214 L24:
0214 ; case DISK_WRITE_SECTOR :/*写扇区*/
0214 ; rt=DISK_WRITE_NOT_OK ;
0214 82E8 ldi R24,130
0216 90E0 ldi R25,0
0218 5C01 movw R10,R24
021A ; /* 向SD卡中写入一个块 */
021A ; //INT8U SD_WriteBlock(INT32U blockaddr,INT8U *recbuf);
021A ; if( SD_WriteBlock(Dp->SectorIndex+Dp->RsvdForLow,Dp->Buf)==0 )
021A F601 movw R30,R12
021C 2184 ldd R2,z+9
021E 3284 ldd R3,z+10
0220 3982 std y+1,R3
0222 2882 std y+0,R2
0224 F601 movw R30,R12
0226 2580 ldd R2,z+5
0228 3680 ldd R3,z+6
022A 4780 ldd R4,z+7
022C 5084 ldd R5,z+8
022E F601 movw R30,R12
0230 6180 ldd R6,z+1
0232 7280 ldd R7,z+2
0234 8380 ldd R8,z+3
0236 9480 ldd R9,z+4
0238 620C add R6,R2
023A 731C adc R7,R3
023C 841C adc R8,R4
023E 951C adc R9,R5
0240 8301 movw R16,R6
0242 9401 movw R18,R8
0244 0E940000 xcall _SD_WriteBlock
0248 0023 tst R16
024A 91F4 brne L12
024C ; {
024C ; rt=DISK_WRITE_OK ;
024C 82E0 ldi R24,2
024E 90E0 ldi R25,0
0250 5C01 movw R10,R24
0252 ; //FS调试用
0252 ; #if FS_DEBUG_EN
0252 ; #if USART1_EN
0252 ; {
0252 ;
0252 ; Uart1_SendString("\nFS Writing Logic Sector :");//调试用,数据区开始扇区号
0252 00E0 ldi R16,<L27
0254 10E0 ldi R17,>L27
0256 0E940000 xcall _Uart1_SendString
025A ; PUT_INT32U_DecTOString(Dp->SectorIndex);
025A F601 movw R30,R12
025C 0181 ldd R16,z+1
025E 1281 ldd R17,z+2
0260 2381 ldd R18,z+3
0262 3481 ldd R19,z+4
0264 0E940000 xcall _PUT_INT32U_DecTOString
0268 ; }
0268 ; #endif
0268 ; #endif
0268 ; }
0268 ; break ;
0268 03C0 xjmp L12
026A L11:
026A ; default :rt=BAD_DISK_COMMAND ; break ;
026A 8FEF ldi R24,65535
026C 9FEF ldi R25,255
026E 5C01 movw R10,R24
0270 L12:
0270 ; }
0270 ; return rt ;
0270 8501 movw R16,R10
0272 L10:
0272 2296 adiw R28,2
0274 0E940000 xcall pop_gset5
0278 .dbline 0 ; func end
0278 0895 ret
.area data(ram, con, rel)
0000 L27:
0000 .blkb 27
.area idata
0000 0A46532057726974696E67204C6F6769 .byte 10,'F,'S,32,'W,'r,'i,'t,'i,'n,'g,32,'L,'o,'g,'i
0010 6320536563746F72203A00 .byte 'c,32,'S,'e,'c,'t,'o,'r,32,58,0
.area data(ram, con, rel)
001B L23:
001B .blkb 27
.area idata
001B 0A46532052656164696E67204C6F6769 .byte 10,'F,'S,32,'R,'e,'a,'d,'i,'n,'g,32,'L,'o,'g,'i
002B 6320536563746F72203A00 .byte 'c,32,'S,'e,'c,'t,'o,'r,32,58,0
.area data(ram, con, rel)
.area func_lit
0000 9300 PL_SD_Command: .word `_SD_Command
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -