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

📄 usbdisk.lst

📁 采用Atmeag162单片机来制作的U盘程序源码
💻 LST
📖 第 1 页 / 共 5 页
字号:
    0654 0000      NOP
(0083)    if((D12_DATA&D12_FULLEMPTY)==0)
    0655 90207C00  LDS	R2,0x7C00
    0657 FC20      SBRC	R2,0
    0658 C002      RJMP	0x065B
(0084)         return 0;
    0659 2700      CLR	R16
    065A C056      RJMP	0x06B1
(0085)    D12_COMMAND=(0x80+endp);
    065B 2F80      MOV	R24,R16
    065C 5880      SUBI	R24,0x80
    065D 93807C01  STS	0x7C01,R24
(0086)    cwait;
    065F 0000      NOP
(0087)    i=D12_DATA;
    0660 91607C00  LDS	R22,0x7C00
(0088)    i=i&0x60;
    0662 7660      ANDI	R22,0x60
(0089)    if(endp==2)
    0663 3002      CPI	R16,2
    0664 F4A9      BNE	0x067A
(0090)    {
(0091)      if(i==0x60)
    0665 3660      CPI	R22,0x60
    0666 F451      BNE	0x0671
(0092) 	   bEPPflags.bits.ep1buf_full=1;
    0667 9180035A  LDS	R24,_bEPPflags
    0669 9190035B  LDS	R25,_bEPPflags+1
    066B 6094      ORI	R25,4
    066C 9390035B  STS	_bEPPflags+1,R25
    066E 9380035A  STS	_bEPPflags,R24
    0670 C009      RJMP	0x067A
(0093) 	 else
(0094) 	   bEPPflags.bits.ep1buf_full=0; 
    0671 9180035A  LDS	R24,_bEPPflags
    0673 9190035B  LDS	R25,_bEPPflags+1
    0675 7F9B      ANDI	R25,0xFB
    0676 9390035B  STS	_bEPPflags+1,R25
    0678 9380035A  STS	_bEPPflags,R24
(0095)    }
(0096)    if(endp==4)
    067A 3004      CPI	R16,4
    067B F4A9      BNE	0x0691
(0097)    {
(0098)      if(i==0x60)
    067C 3660      CPI	R22,0x60
    067D F451      BNE	0x0688
(0099) 	   bEPPflags.bits.mainbuf_full=1;
    067E 9180035A  LDS	R24,_bEPPflags
    0680 9190035B  LDS	R25,_bEPPflags+1
    0682 6890      ORI	R25,0x80
    0683 9390035B  STS	_bEPPflags+1,R25
    0685 9380035A  STS	_bEPPflags,R24
    0687 C009      RJMP	0x0691
(0100) 	 else
(0101) 	   bEPPflags.bits.mainbuf_full=0; 
    0688 9180035A  LDS	R24,_bEPPflags
    068A 9190035B  LDS	R25,_bEPPflags+1
    068C 779F      ANDI	R25,0x7F
    068D 9390035B  STS	_bEPPflags+1,R25
    068F 9380035A  STS	_bEPPflags,R24
(0102)    }		
(0103)    D12_COMMAND=0xF0;
    0691 EF80      LDI	R24,0xF0
    0692 93807C01  STS	0x7C01,R24
(0104)    cwait;
    0694 0000      NOP
(0105)    j=D12_DATA;
    0695 91407C00  LDS	R20,0x7C00
(0106)    cwait1;
    0697 0000      NOP
    0698 0000      NOP
(0107)    j=D12_DATA;
    0699 91407C00  LDS	R20,0x7C00
(0108)    if(j>len)j=len;
    069B 1724      CP	R18,R20
    069C F408      BCC	0x069E
    069D 2F42      MOV	R20,R18
(0109)    for(i=0;i<j;i++)
    069E 2766      CLR	R22
    069F C00A      RJMP	0x06AA
(0110)    {
(0111)        *(buf+i)=D12_DATA;
    06A0 2FE6      MOV	R30,R22
    06A1 27FF      CLR	R31
    06A2 0DEA      ADD	R30,R10
    06A3 1DFB      ADC	R31,R11
    06A4 90207C00  LDS	R2,0x7C00
    06A6 8220      STD	Z+0,R2
(0112) 	   cwait1;
    06A7 0000      NOP
    06A8 0000      NOP
    06A9 9563      INC	R22
    06AA 1764      CP	R22,R20
    06AB F3A0      BCS	0x06A0
(0113)    }   
(0114)    D12_COMMAND=0xF2;
    06AC EF82      LDI	R24,0xF2
    06AD 93807C01  STS	0x7C01,R24
(0115)    cwait;
    06AF 0000      NOP
(0116)    return j;
    06B0 2F04      MOV	R16,R20
    06B1 940E0ED4  CALL	pop_gset3
    06B3 9508      RET
_D12_WriteEndpoint:
  i                    --> R20
  buf                  --> R22
  len                  --> R18
  endp                 --> R16
    06B4 940E0EF4  CALL	push_gset2
    06B6 816C      LDD	R22,Y+4
    06B7 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;
    06B8 93007C01  STS	0x7C01,R16
(0123)    D12_DATA;
(0124)    D12_COMMAND=0xF0;
    06BA EF80      LDI	R24,0xF0
    06BB 93807C01  STS	0x7C01,R24
(0125)    cwait;
    06BD 0000      NOP
(0126)    D12_DATA=0;
    06BE 2422      CLR	R2
    06BF 92207C00  STS	0x7C00,R2
(0127)    cwait1;
    06C1 0000      NOP
    06C2 0000      NOP
(0128)    D12_DATA=len;
    06C3 93207C00  STS	0x7C00,R18
(0129)    for(i=0;i<len;i++)
    06C5 2744      CLR	R20
    06C6 C00A      RJMP	0x06D1
(0130)    {
(0131)        D12_DATA=*(buf+i);
    06C7 2FE4      MOV	R30,R20
    06C8 27FF      CLR	R31
    06C9 0FE6      ADD	R30,R22
    06CA 1FF7      ADC	R31,R23
    06CB 8020      LDD	R2,Z+0
    06CC 92207C00  STS	0x7C00,R2
(0132) 	   cwait1;
    06CE 0000      NOP
    06CF 0000      NOP
    06D0 9543      INC	R20
    06D1 1742      CP	R20,R18
    06D2 F3A0      BCS	0x06C7
(0133)    }	   
(0134)    D12_COMMAND=0xFA;
    06D3 EF8A      LDI	R24,0xFA
    06D4 93807C01  STS	0x7C01,R24
(0135)    cwait;
    06D6 0000      NOP
(0136)    return len;
    06D7 2F02      MOV	R16,R18
    06D8 940E0ED1  CALL	pop_gset2
    06DA 9508      RET
_D12_CWriteEndpoint:
  i                    --> R20
  buf                  --> R22
  len                  --> R18
  endp                 --> R16
    06DB 940E0EF4  CALL	push_gset2
    06DD 816C      LDD	R22,Y+4
    06DE 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;
    06DF 93007C01  STS	0x7C01,R16
(0143)    cwait;
    06E1 0000      NOP
(0144)    D12_DATA;
(0145)    cwait;
    06E2 0000      NOP
(0146)    D12_COMMAND=0xF0;
    06E3 EF80      LDI	R24,0xF0
    06E4 93807C01  STS	0x7C01,R24
(0147)    cwait;
    06E6 0000      NOP
(0148)    D12_DATA=0;
    06E7 2422      CLR	R2
    06E8 92207C00  STS	0x7C00,R2
(0149)    cwait1;
    06EA 0000      NOP
    06EB 0000      NOP
(0150)    D12_DATA=len;
    06EC 93207C00  STS	0x7C00,R18
(0151)    for(i=0;i<len;i++)
    06EE 2744      CLR	R20
    06EF C00A      RJMP	0x06FA
(0152)    {
(0153)       D12_DATA=*(buf+i);
    06F0 2FE4      MOV	R30,R20
    06F1 27FF      CLR	R31
    06F2 0FE6      ADD	R30,R22
    06F3 1FF7      ADC	R31,R23
    06F4 91E4      LPM	R30,0(Z)
    06F5 93E07C00  STS	0x7C00,R30
(0154) 	  cwait1;
    06F7 0000      NOP
    06F8 0000      NOP
    06F9 9543      INC	R20
    06FA 1742      CP	R20,R18
    06FB F3A0      BCS	0x06F0
(0155)    }    
(0156)    D12_COMMAND=0xFA;
    06FC EF8A      LDI	R24,0xFA
    06FD 93807C01  STS	0x7C01,R24
(0157)    return len;
    06FF 2F02      MOV	R16,R18
    0700 940E0ED1  CALL	pop_gset2
    0702 9508      RET
(0158) }
(0159) void D12_AcknowledgeEndpoint(unsigned char endp)
(0160) {
(0161)    D12_COMMAND=endp;
_D12_AcknowledgeEndpoint:
  endp                 --> R16
    0703 93007C01  STS	0x7C01,R16
(0162)    cwait;
    0705 0000      NOP
(0163)    D12_COMMAND=0xF1;
    0706 EF81      LDI	R24,0xF1
    0707 93807C01  STS	0x7C01,R24
(0164)    if(endp==0)
    0709 2300      TST	R16
    070A F419      BNE	0x070E
(0165)       D12_COMMAND=0xF2; 
    070B EF82      LDI	R24,0xF2
    070C 93807C01  STS	0x7C01,R24
(0166) }
    070E 9508      RET
FILE: D:\AvrUSB\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:
    070F EF8F      LDI	R24,0xFF
    0710 9380A000  STS	0xA000,R24
(0032)   asm("nop \n nop");
    0712 0000      NOP
    0713 0000      NOP
(0033)   WAITRB;
    0714 9B84      SBIS	0x10,4
    0715 CFFE      RJMP	0x0714
(0034) }
    0716 9508      RET
(0035) unsigned int Check_Flash_Id(void)
(0036) {
(0037)   unsigned int id;
(0038)   FC_CMD=READID;
_Check_Flash_Id:
  id                   --> R16
    0717 E980      LDI	R24,0x90
    0718 9380A000  STS	0xA000,R24
(0039)   FC_ADDR=READ0;
    071A 2422      CLR	R2
    071B 92209000  STS	0x9000,R2
(0040)   id=FC_DATA<<8;
    071D 91008000  LDS	R16,0x8000
    071F 2711      CLR	R17
    0720 2F10      MOV	R17,R16
    0721 2700      CLR	R16
(0041)   id+=FC_DATA;
    0722 90208000  LDS	R2,0x8000
    0724 2433      CLR	R3
    0725 0D02      ADD	R16,R2
    0726 1D13      ADC	R17,R3
(0042)   FC_INACTIVE
    0727 9360FC01  STS	0xFC01,R22
(0043)   return id;
    0729 9508      RET
_Erase_Cluster:
  v                    --> R20
  blockPage            --> R20
  cluster              --> R20
    072A 940E0EDD  CALL	push_gset1
    072C 01A8      MOVW	R20,R16
(0044) }
(0045) BOOL Erase_Cluster(unsigned int cluster)
(0046) {
(0047)   unsigned char v;
(0048)   unsigned int blockPage=cluster*32;
    072D E200      LDI	R16,0x20
    072E E010      LDI	R17,0
    072F 019A      MOVW	R18,R20
    0730 940E0E91  CALL	empy16s
    0732 01A8      MOVW	R20,R16
(0049)   fWPs;
    0733 9A95      SBI	0x12,5
(0050)   FC_CMD=BLOCK_ERASE_1C;
    0734 E680      LDI	R24,0x60
    0735 9380A000  STS	0xA000,R24
(0051)   FC_ADDR=blockPage%256;
    0737 01CA      MOVW	R24,R20
    0738 7090      ANDI	R25,0
    0739 93809000  STS	0x9000,R24
(0052)   FC_ADDR=blockPage/256;
    073B 011A      MOVW	R2,R20
    073C 2C23      MOV	R2,R3
    073D 2433      CLR	R3
    073E 92209000  STS	0x9000,R2
(0053)   FC_CMD=BLOCK_ERASE_2C;
    0740 ED80      LDI	R24,0xD0
    0741 9380A000  STS	0xA000,R24
(0054)   asm("nop \n nop");
    0743 0000      NOP
    0744 0000      NOP
(0055)   WAITRB;
    0745 9B84      SBIS	0x10,4
    0746 CFFE      RJMP	0x0745
(0056)   FC_CMD=READSTATUS;
    0747 E780      LDI	R24,0x70
    0748 9380A000  STS	0xA000,R24
(0057)   v=FC_DATA;
    074A 91408000  LDS	R20,0x8000
(0058)   FC_INACTIVE
    074C 9360FC01  STS	0xFC01,R22
(0059)   fWPc;
    074E 9895      CBI	0x12,5
(0060)   if(v&0x01)
    074F FF40      SBRS	R20,0
    0750 C002      RJMP	0x0753
(0061) 	 return FALSE;
    0751 2700      CLR	R16
    0752 C001      RJMP	0x0754
(0062)   return TRUE;
    0753 E001      LDI	R16,1
    0754 940E0EE0  CALL	pop_gset1
    0756 9508      RET
_ReadPage:
  blockPage            --> R10
  i                    --> R20
  pPage                --> R22
  page                 --> R10
  block                --> R12
    0757 940E0EFC  CALL	push_gset4
    0759 0159      MOVW	R10,R18
    075A 0168      MOVW	R12,R16
    075B 8568      LDD	R22,Y+8
    075C 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;
    075D E040      LDI	R20,0
    075E E052      LDI	R21,2
(0068)   unsigned int blockPage=block*32+page;
    075F E200      LDI	R16,0x20
    0760 E010      LDI	R17,0
    0761 0196      MOVW	R18,R12
    0762 940E0E91  CALL	empy16s
    0764 0118      MOVW	R2,R16
    0765 0C2A      ADD	R2,R10
    0766 1C3B      ADC	R3,R11
    0767 0151      MOVW	R10,R2
(0069)   FC_CMD=READ0;
    0768 2422      CLR	R2
    0769 9220A000  STS	0xA000,R2
(0070)   FC_ADDR=0x00;
    076B 92209000  STS	0x9000,R2
(0071)   FC_ADDR=blockPage%256;
    076D 01C5      MOVW	R24,R10
    076E 7090      ANDI	R25,0
    076F 93809000  STS	0x9000,R24
(0072)   FC_ADDR=blockPage/256;
    0771 0

⌨️ 快捷键说明

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