⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 interface.lis

📁 Atmega64单片机程序(完整工程)
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 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 + -