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

📄 usbdisk.lst

📁 基于D12
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0079) {
(0080)   unsigned char i,j;
(0081)    D12_COMMAND=endp;
    0654 93007C01  STS	0x7C01,R16
(0082)    cwait;
    0656 0000      NOP
(0083)    if((D12_DATA&D12_FULLEMPTY)==0)
    0657 90207C00  LDS	R2,0x7C00
    0659 FC20      SBRC	R2,0
    065A C002      RJMP	0x065D
(0084)         return 0;
    065B 2700      CLR	R16
    065C C056      RJMP	0x06B3
(0085)    D12_COMMAND=(0x80+endp);
    065D 2F80      MOV	R24,R16
    065E 5880      SUBI	R24,0x80
    065F 93807C01  STS	0x7C01,R24
(0086)    cwait;
    0661 0000      NOP
(0087)    i=D12_DATA;
    0662 91607C00  LDS	R22,0x7C00
(0088)    i=i&0x60;
    0664 7660      ANDI	R22,0x60
(0089)    if(endp==2)
    0665 3002      CPI	R16,2
    0666 F4A9      BNE	0x067C
(0090)    {
(0091)      if(i==0x60)
    0667 3660      CPI	R22,0x60
    0668 F451      BNE	0x0673
(0092) 	   bEPPflags.bits.ep1buf_full=1;
    0669 9180035A  LDS	R24,bEPPflags
    066B 9190035B  LDS	R25,bEPPflags+1
    066D 6094      ORI	R25,4
    066E 9390035B  STS	bEPPflags+1,R25
    0670 9380035A  STS	bEPPflags,R24
    0672 C009      RJMP	0x067C
(0093) 	 else
(0094) 	   bEPPflags.bits.ep1buf_full=0; 
    0673 9180035A  LDS	R24,bEPPflags
    0675 9190035B  LDS	R25,bEPPflags+1
    0677 7F9B      ANDI	R25,0xFB
    0678 9390035B  STS	bEPPflags+1,R25
    067A 9380035A  STS	bEPPflags,R24
(0095)    }
(0096)    if(endp==4)
    067C 3004      CPI	R16,4
    067D F4A9      BNE	0x0693
(0097)    {
(0098)      if(i==0x60)
    067E 3660      CPI	R22,0x60
    067F F451      BNE	0x068A
(0099) 	   bEPPflags.bits.mainbuf_full=1;
    0680 9180035A  LDS	R24,bEPPflags
    0682 9190035B  LDS	R25,bEPPflags+1
    0684 6890      ORI	R25,0x80
    0685 9390035B  STS	bEPPflags+1,R25
    0687 9380035A  STS	bEPPflags,R24
    0689 C009      RJMP	0x0693
(0100) 	 else
(0101) 	   bEPPflags.bits.mainbuf_full=0; 
    068A 9180035A  LDS	R24,bEPPflags
    068C 9190035B  LDS	R25,bEPPflags+1
    068E 779F      ANDI	R25,0x7F
    068F 9390035B  STS	bEPPflags+1,R25
    0691 9380035A  STS	bEPPflags,R24
(0102)    }		
(0103)    D12_COMMAND=0xF0;
    0693 EF80      LDI	R24,0xF0
    0694 93807C01  STS	0x7C01,R24
(0104)    cwait;
    0696 0000      NOP
(0105)    j=D12_DATA;
    0697 91407C00  LDS	R20,0x7C00
(0106)    cwait1;
    0699 0000      NOP
    069A 0000      NOP
(0107)    j=D12_DATA;
    069B 91407C00  LDS	R20,0x7C00
(0108)    if(j>len)j=len;
    069D 1724      CP	R18,R20
    069E F408      BCC	0x06A0
    069F 2F42      MOV	R20,R18
(0109)    for(i=0;i<j;i++)
    06A0 2766      CLR	R22
    06A1 C00A      RJMP	0x06AC
(0110)    {
(0111)        *(buf+i)=D12_DATA;
    06A2 2FE6      MOV	R30,R22
    06A3 27FF      CLR	R31
    06A4 0DEA      ADD	R30,R10
    06A5 1DFB      ADC	R31,R11
    06A6 90207C00  LDS	R2,0x7C00
    06A8 8220      STD	Z+0,R2
(0112) 	   cwait1;
    06A9 0000      NOP
    06AA 0000      NOP
    06AB 9563      INC	R22
    06AC 1764      CP	R22,R20
    06AD F3A0      BCS	0x06A2
(0113)    }   
(0114)    D12_COMMAND=0xF2;
    06AE EF82      LDI	R24,0xF2
    06AF 93807C01  STS	0x7C01,R24
(0115)    cwait;
    06B1 0000      NOP
(0116)    return j;
    06B2 2F04      MOV	R16,R20
    06B3 940E0EDD  CALL	pop_gset3
    06B5 9508      RET
_D12_WriteEndpoint:
  i                    --> R20
  buf                  --> R22
  len                  --> R18
  endp                 --> R16
    06B6 940E0EEC  CALL	push_gset2
    06B8 816C      LDD	R22,Y+4
    06B9 817D      LDD	R23,Y+5
(0117) }
(0118) unsigned char D12_WriteEndpoint(unsigned char endp, unsigned char len,
(0119)                                 unsigned char * buf)
(0120) {
(0121)    unsigned char i;   
(0122)    D12_COMMAND=endp;
    06BA 93007C01  STS	0x7C01,R16
(0123)    D12_DATA;
(0124)    D12_COMMAND=0xF0;
    06BC EF80      LDI	R24,0xF0
    06BD 93807C01  STS	0x7C01,R24
(0125)    cwait;
    06BF 0000      NOP
(0126)    D12_DATA=0;
    06C0 2422      CLR	R2
    06C1 92207C00  STS	0x7C00,R2
(0127)    cwait1;
    06C3 0000      NOP
    06C4 0000      NOP
(0128)    D12_DATA=len;
    06C5 93207C00  STS	0x7C00,R18
(0129)    for(i=0;i<len;i++)
    06C7 2744      CLR	R20
    06C8 C00A      RJMP	0x06D3
(0130)    {
(0131)        D12_DATA=*(buf+i);
    06C9 2FE4      MOV	R30,R20
    06CA 27FF      CLR	R31
    06CB 0FE6      ADD	R30,R22
    06CC 1FF7      ADC	R31,R23
    06CD 8020      LDD	R2,Z+0
    06CE 92207C00  STS	0x7C00,R2
(0132) 	   cwait1;
    06D0 0000      NOP
    06D1 0000      NOP
    06D2 9543      INC	R20
    06D3 1742      CP	R20,R18
    06D4 F3A0      BCS	0x06C9
(0133)    }	   
(0134)    D12_COMMAND=0xFA;
    06D5 EF8A      LDI	R24,0xFA
    06D6 93807C01  STS	0x7C01,R24
(0135)    cwait;
    06D8 0000      NOP
(0136)    return len;
    06D9 2F02      MOV	R16,R18
    06DA 940E0EDA  CALL	pop_gset2
    06DC 9508      RET
_D12_CWriteEndpoint:
  i                    --> R20
  buf                  --> R22
  len                  --> R18
  endp                 --> R16
    06DD 940E0EEC  CALL	push_gset2
    06DF 816C      LDD	R22,Y+4
    06E0 817D      LDD	R23,Y+5
(0137) }
(0138) unsigned char D12_CWriteEndpoint(unsigned char endp, unsigned char len,
(0139)                                  const unsigned char * buf)
(0140) {
(0141)    unsigned char i;   
(0142)    D12_COMMAND=endp;
    06E1 93007C01  STS	0x7C01,R16
(0143)    cwait;
    06E3 0000      NOP
(0144)    D12_DATA;
(0145)    cwait;
    06E4 0000      NOP
(0146)    D12_COMMAND=0xF0;
    06E5 EF80      LDI	R24,0xF0
    06E6 93807C01  STS	0x7C01,R24
(0147)    cwait;
    06E8 0000      NOP
(0148)    D12_DATA=0;
    06E9 2422      CLR	R2
    06EA 92207C00  STS	0x7C00,R2
(0149)    cwait1;
    06EC 0000      NOP
    06ED 0000      NOP
(0150)    D12_DATA=len;
    06EE 93207C00  STS	0x7C00,R18
(0151)    for(i=0;i<len;i++)
    06F0 2744      CLR	R20
    06F1 C00A      RJMP	0x06FC
(0152)    {
(0153)       D12_DATA=*(buf+i);
    06F2 2FE4      MOV	R30,R20
    06F3 27FF      CLR	R31
    06F4 0FE6      ADD	R30,R22
    06F5 1FF7      ADC	R31,R23
    06F6 91E4      LPM	R30,0(Z)
    06F7 93E07C00  STS	0x7C00,R30
(0154) 	  cwait1;
    06F9 0000      NOP
    06FA 0000      NOP
    06FB 9543      INC	R20
    06FC 1742      CP	R20,R18
    06FD F3A0      BCS	0x06F2
(0155)    }    
(0156)    D12_COMMAND=0xFA;
    06FE EF8A      LDI	R24,0xFA
    06FF 93807C01  STS	0x7C01,R24
(0157)    return len;
    0701 2F02      MOV	R16,R18
    0702 940E0EDA  CALL	pop_gset2
    0704 9508      RET
(0158) }
(0159) void D12_AcknowledgeEndpoint(unsigned char endp)
(0160) {
(0161)    D12_COMMAND=endp;
_D12_AcknowledgeEndpoint:
  endp                 --> R16
    0705 93007C01  STS	0x7C01,R16
(0162)    cwait;
    0707 0000      NOP
(0163)    D12_COMMAND=0xF1;
    0708 EF81      LDI	R24,0xF1
    0709 93807C01  STS	0x7C01,R24
(0164)    if(endp==0)
    070B 2300      TST	R16
    070C F419      BNE	0x0710
(0165)       D12_COMMAND=0xF2; 
    070D EF82      LDI	R24,0xF2
    070E 93807C01  STS	0x7C01,R24
    0710 9508      RET
FILE: J:\PDIUSBD12-Materials\富昌\优盘5.0\Flash.c
(0001) #include <iom161v.h>
(0002) #include <macros.h>
(0003) #include "Flash.h"
(0004) extern unsigned char PageBuf[512];
(0005) 
(0006) const  unsigned char  Fat16_Bpb[512]={
(0007)   0xEB,0x03,0x90,'M','S','W','I','N','4','.','1',0,2,1,1,
(0008)   0,2,0,2,0,0xfc,0xf8,0xfa,0,0x3f,0,0xff,0,0,0,0,0,0,0,0,0,//35
(0009)   0,0,0x29,'1','2','3','4',
(0010)   'Y','U','X','K','-','M','A','S','S','-','1',
(0011)   'F','A','T','1','6',0,0,0,//61  
(0012)   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
(0013)   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
(0014)   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
(0015)   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
(0016)   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
(0017)   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
(0018)   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
(0019)   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
(0020)   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
(0021)   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
(0022)   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
(0023)   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
(0024)   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
(0025)   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
(0026)   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
(0027)   0x55,0xAA//unsigned char ExecutableMarker[2]  
(0028) };
(0029) void Flash_Reset(void)
(0030) {
(0031)   FC_CMD=RESET;
_Flash_Reset:
    0711 EF8F      LDI	R24,0xFF
    0712 9380A000  STS	0xA000,R24
(0032)   asm("nop \n nop");
    0714 0000      NOP
    0715 0000      NOP
(0033)   WAITRB;
    0716 9B84      SBIS	0x10,4
    0717 CFFE      RJMP	0x0716
    0718 9508      RET
(0034) }
(0035) unsigned int Check_Flash_Id(void)
(0036) {
(0037)   unsigned int id;
(0038)   FC_CMD=READID;
_Check_Flash_Id:
  id                   --> R16
    0719 E980      LDI	R24,0x90
    071A 9380A000  STS	0xA000,R24
(0039)   FC_ADDR=READ0;
    071C 2422      CLR	R2
    071D 92209000  STS	0x9000,R2
(0040)   id=FC_DATA<<8;
    071F 91008000  LDS	R16,0x8000
    0721 2711      CLR	R17
    0722 2F10      MOV	R17,R16
    0723 2700      CLR	R16
(0041)   id+=FC_DATA;
    0724 90208000  LDS	R2,0x8000
    0726 2433      CLR	R3
    0727 0D02      ADD	R16,R2
    0728 1D13      ADC	R17,R3
(0042)   FC_INACTIVE
    0729 9360FC01  STS	0xFC01,R22
(0043)   return id;
    072B 9508      RET
_Erase_Cluster:
  v                    --> R20
  blockPage            --> R20
  cluster              --> R20
    072C 940E0EEE  CALL	push_gset1
    072E 01A8      MOVW	R20,R16
(0044) }
(0045) BOOL Erase_Cluster(unsigned int cluster)
(0046) {
(0047)   unsigned char v;
(0048)   unsigned int blockPage=cluster*32;
    072F E200      LDI	R16,0x20
    0730 E010      LDI	R17,0
    0731 019A      MOVW	R18,R20
    0732 940E0E9A  CALL	empy16s
    0734 01A8      MOVW	R20,R16
(0049)   fWPs;
    0735 9A95      SBI	0x12,5
(0050)   FC_CMD=BLOCK_ERASE_1C;
    0736 E680      LDI	R24,0x60
    0737 9380A000  STS	0xA000,R24
(0051)   FC_ADDR=blockPage%256;
    0739 01CA      MOVW	R24,R20
    073A 7090      ANDI	R25,0
    073B 93809000  STS	0x9000,R24
(0052)   FC_ADDR=blockPage/256;
    073D 011A      MOVW	R2,R20
    073E 2C23      MOV	R2,R3
    073F 2433      CLR	R3
    0740 92209000  STS	0x9000,R2
(0053)   FC_CMD=BLOCK_ERASE_2C;
    0742 ED80      LDI	R24,0xD0
    0743 9380A000  STS	0xA000,R24
(0054)   asm("nop \n nop");
    0745 0000      NOP
    0746 0000      NOP
(0055)   WAITRB;
    0747 9B84      SBIS	0x10,4
    0748 CFFE      RJMP	0x0747
(0056)   FC_CMD=READSTATUS;
    0749 E780      LDI	R24,0x70
    074A 9380A000  STS	0xA000,R24
(0057)   v=FC_DATA;
    074C 91408000  LDS	R20,0x8000
(0058)   FC_INACTIVE
    074E 9360FC01  STS	0xFC01,R22
(0059)   fWPc;
    0750 9895      CBI	0x12,5
(0060)   if(v&0x01)
    0751 FF40      SBRS	R20,0
    0752 C002      RJMP	0x0755
(0061) 	 return FALSE;
    0753 2700      CLR	R16
    0754 C001      RJMP	0x0756
(0062)   return TRUE;
    0755 E001      LDI	R16,1
    0756 940E0EF1  CALL	pop_gset1
    0758 9508      RET
_ReadPage:
  blockPage            --> R10
  i                    --> R20
  pPage                --> R22
  page                 --> R10
  block                --> R12
    0759 940E0EE8  CALL	push_gset4
    075B 0159      MOVW	R10,R18
    075C 0168      MOVW	R12,R16
    075D 8568      LDD	R22,Y+8
    075E 8579      LDD	R23,Y+9
(0063) }
(0064) 
(0065) void ReadPage(unsigned int block,unsigned int page,unsigned char *pPage)
(0066) {
(0067)   unsigned int i=512;
    075F E040      LDI	R20,0
    0760 E052      LDI	R21,2
(0068)   unsigned int blockPage=block*32+page;
    0761 E200      LDI	R16,0x20
    0762 E010      LDI	R17,0
    0763 0196      MOVW	R18,R12
    0764 940E0E9A  CALL	empy16s
    0766 0118      MOVW	R2,R16
    0767 0C2A      ADD	R2,R10
    0768 1C3B      ADC	R3,R11
    0769 0151      MOVW	R10,R2
(0069)   FC_CMD=READ0;
    076A 2422      CLR	R2
    076B 9220A000  STS	0xA000,R2
(0070)   FC_ADDR=0x00;
    076D 92209000  STS	0x9000,R2
(0071)   FC_ADDR=blockPage%25

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -