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

📄 nflash32.lis

📁 USB通信程序开发(附源码 精品)包括详细论文说明
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                       ;       对于FLASH的写操作原理是,写之前
                       ;       必须擦除,FLASH写是按页写,但是擦
                       ;       除是按块擦除,1块 = 32页,所以在
                       ;       一块内只有部分页被写入时就需要先
                       ;       将块内其他页保存,代整块擦除后一起
                       ;       写入,这里用0XFA,0X00作为头块缓冲,
                       ;       0XFB,0X00作为最后块缓冲,中间块采
                       ;       用直接擦除处理
                       ;     **********************************/
                       ;     flashErase(0xfa, 0x00);
 007A 2227              clr R18
 007C 0AEF              ldi R16,250
 007E 6F92              push R6
 0080 7F92              push R7
 0082 BEDF              rcall _flashErase
 0084 7F90              pop R7
 0086 6F90              pop R6
 0088                   .dbline 125
                       ;     Sour_addh = XmtBuff.b[19];
 0088 20901300          lds R2,_XmtBuff+19
 008C 2A8A              std y+18,R2
 008E                   .dbline 126
                       ;     Sour_addl = (XmtBuff.b[20]/0x20) * 0x20;
 008E 10E2              ldi R17,32
 0090 00911400          lds R16,_XmtBuff+20
 0094 00D0              rcall div8u
 0096 202E              mov R2,R16
 0098 220C              lsl R2
 009A 220C              lsl R2
 009C 220C              lsl R2
 009E 220C              lsl R2
 00A0 220C              lsl R2
 00A2 2B86              std y+11,R2
 00A4                   .dbline 127
                       ;     Dest_addh = 0xfa;
 00A4 8AEF              ldi R24,250
 00A6 8B8B              std y+19,R24
 00A8                   .dbline 128
                       ;     Dest_addl = (XmtBuff.b[20]/0x20) * 0x20;
 00A8 10E2              ldi R17,32
 00AA 00911400          lds R16,_XmtBuff+20
 00AE 00D0              rcall div8u
 00B0 202E              mov R2,R16
 00B2 220C              lsl R2
 00B4 220C              lsl R2
 00B6 220C              lsl R2
 00B8 220C              lsl R2
 00BA 220C              lsl R2
 00BC 2C86              std y+12,R2
 00BE                   .dbline 129
                       ;     CopyBack_Count = XmtBuff.b[20]%0x20;
 00BE 20E2              ldi R18,32
 00C0 30E0              ldi R19,0
 00C2 00911400          lds R16,_XmtBuff+20
 00C6 1127              clr R17
 00C8 00D0              rcall mod16s
 00CA 0E87              std y+14,R16
 00CC 1F87              std y+15,R17
 00CE                   .dbline 130
 00CE 6624              clr R6
 00D0 7724              clr R7
 00D2 16C0              rjmp L19
 00D4                 L16:
 00D4                   .dbline 130
 00D4                   .dbline 131
 00D4 0C84              ldd R0,y+12
 00D6 0A82              std y+2,R0
 00D8 0B88              ldd R0,y+19
 00DA 0882              std y+0,R0
 00DC 2B85              ldd R18,y+11
 00DE 0A89              ldd R16,y+18
 00E0 6F92              push R6
 00E2 7F92              push R7
 00E4 74D1              rcall _flashCopyBLack
 00E6 7F90              pop R7
 00E8 6F90              pop R6
 00EA                   .dbline 132
 00EA 0B84              ldd R0,y+11
 00EC 0394              inc R0
 00EE 0B86              std y+11,R0
 00F0                   .dbline 133
 00F0 0C84              ldd R0,y+12
 00F2 0394              inc R0
 00F4 0C86              std y+12,R0
 00F6                   .dbline 134
 00F6                 L17:
 00F6                   .dbline 130
 00F6 862D              mov R24,R6
 00F8 972D              mov R25,R7
 00FA 0196              adiw R24,1
 00FC 682E              mov R6,R24
 00FE 792E              mov R7,R25
 0100                 L19:
 0100                   .dbline 130
                       ;     for(i=0;i<CopyBack_Count;i++){
 0100 0E84              ldd R0,y+14
 0102 1F84              ldd R1,y+15
 0104 6014              cp R6,R0
 0106 7104              cpc R7,R1
 0108 28F3              brlo L16
 010A                   .dbline 135
                       ;         flashCopyBLack(Sour_addh,Sour_addl,Dest_addh,Dest_addl);
                       ;         Sour_addl ++;
                       ;         Dest_addl ++;
                       ;     }
                       ;     Erase_addl = (XmtBuff.b[20]/0x20) * 0x20;
 010A 10E2              ldi R17,32
 010C 00911400          lds R16,_XmtBuff+20
 0110 00D0              rcall div8u
 0112 202E              mov R2,R16
 0114 220C              lsl R2
 0116 220C              lsl R2
 0118 220C              lsl R2
 011A 220C              lsl R2
 011C 220C              lsl R2
 011E 2D86              std y+13,R2
 0120                   .dbline 136
                       ;     Erase_addh = XmtBuff.b[19];
 0120 E0901300          lds R14,_XmtBuff+19
 0124                   .dbline 137
                       ;     WritePageNum = (XmtBuff.b[22]<<8)+XmtBuff.b[23];
 0124 20901700          lds R2,_XmtBuff+23
 0128 3324              clr R3
 012A 40901600          lds R4,_XmtBuff+22
 012E 5524              clr R5
 0130 542C              mov R5,R4
 0132 4424              clr R4
 0134 420C              add R4,R2
 0136 531C              adc R5,R3
 0138 4D82              std y+5,R4
 013A 5E82              std y+6,R5
 013C                   .dbline 138
                       ;     Erase_Count = WritePageNum / 0x20;
 013C 25E0              ldi R18,5
 013E 30E0              ldi R19,0
 0140 0D81              ldd R16,y+5
 0142 1E81              ldd R17,y+6
 0144 00D0              rcall lsr16
 0146 0B83              std y+3,R16
 0148 1C83              std y+4,R17
 014A                   .dbline 139
                       ;     if(WritePageNum % 0x20){
 014A 8D81              ldd R24,y+5
 014C 9E81              ldd R25,y+6
 014E 8F71              andi R24,31
 0150 9070              andi R25,0
 0152 8030              cpi R24,0
 0154 8907              cpc R24,R25
 0156 E1F0              breq L24
 0158                   .dbline 139
 0158                   .dbline 140
                       ;         Erase_Count ++;
 0158 8B81              ldd R24,y+3
 015A 9C81              ldd R25,y+4
 015C 0196              adiw R24,1
 015E 8B83              std y+3,R24
 0160 9C83              std y+4,R25
 0162                   .dbline 141
                       ;         if((WritePageNum % 0x20) > (0x20 - (XmtBuff.b[20] % 0x20)))
 0162 20E2              ldi R18,32
 0164 30E0              ldi R19,0
 0166 00911400          lds R16,_XmtBuff+20
 016A 1127              clr R17
 016C 00D0              rcall mod16s
 016E 80E2              ldi R24,32
 0170 90E0              ldi R25,0
 0172 801B              sub R24,R16
 0174 910B              sbc R25,R17
 0176 ED81              ldd R30,y+5
 0178 FE81              ldd R31,y+6
 017A EF71              andi R30,31
 017C F070              andi R31,0
 017E 8E17              cp R24,R30
 0180 9F07              cpc R25,R31
 0182 88F4              brsh L25
 0184                   .dbline 142
                       ;             Erase_Count ++;
 0184 8B81              ldd R24,y+3
 0186 9C81              ldd R25,y+4
 0188 0196              adiw R24,1
 018A 8B83              std y+3,R24
 018C 9C83              std y+4,R25
 018E                   .dbline 143
 018E 0BC0              rjmp L25
 0190                 L24:
 0190                   .dbline 143
                       ;     }else if(XmtBuff.b[20] % 0x20){
 0190 10E2              ldi R17,32
 0192 00911400          lds R16,_XmtBuff+20
 0196 00D0              rcall mod8u
 0198 0023              tst R16
 019A 29F0              breq L29
 019C                   .dbline 143
 019C                   .dbline 144
                       ;         Erase_Count ++;
 019C 8B81              ldd R24,y+3
 019E 9C81              ldd R25,y+4
 01A0 0196              adiw R24,1
 01A2 8B83              std y+3,R24
 01A4 9C83              std y+4,R25
 01A6                   .dbline 145
                       ;     }
 01A6                 L29:
 01A6                 L25:
 01A6                   .dbline 146
                       ;     Start_add.add = (XmtBuff.b[19]<<8)+XmtBuff.b[20];
 01A6 20901400          lds R2,_XmtBuff+20
 01AA 3324              clr R3
 01AC 40901300          lds R4,_XmtBuff+19
 01B0 5524              clr R5
 01B2 542C              mov R5,R4
 01B4 4424              clr R4
 01B6 420C              add R4,R2
 01B8 531C              adc R5,R3
 01BA 4986              std y+9,R4
 01BC 5A86              std y+10,R5
 01BE                   .dbline 147
                       ;     End_add.add = Start_add.add + WritePageNum;
 01BE 2D80              ldd R2,y+5
 01C0 3E80              ldd R3,y+6
 01C2 420C              add R4,R2
 01C4 531C              adc R5,R3
 01C6 4F82              std y+7,R4
 01C8 5886              std y+8,R5
 01CA                   .dbline 148
                       ;     flashErase(0xfb, 0x00);
 01CA 2227              clr R18
 01CC 0BEF              ldi R16,251
 01CE 6F92              push R6
 01D0 7F92              push R7
 01D2 16DF              rcall _flashErase
 01D4 7F90              pop R7
 01D6 6F90              pop R6
 01D8                   .dbline 149
                       ;     Sour_two_addh = End_add.c[1];
 01D8 A884              ldd R10,y+8
 01DA                   .dbline 150
                       ;     Sour_two_addl = End_add.c[0];
 01DA 4F81              ldd R20,y+7
 01DC                   .dbline 151
                       ;     Dest_two_addh = 0xfb;
 01DC 6BEF              ldi R22,251
 01DE                   .dbline 152
                       ;     Dest_two_addl = End_add.c[0];
 01DE CF80              ldd R12,y+7
 01E0                   .dbline 153
                       ;     CopyBack_two_count = (Erase_Count * 0x20) - CopyBack_Count -WritePageNum;
 01E0 25E0              ldi R18,5
 01E2 30E0              ldi R19,0
 01E4 0B81              ldd R16,y+3
 01E6 1C81              ldd R17,y+4
 01E8 00D0              rcall lsl16
 01EA 202E              mov R2,R16
 01EC 312E              mov R3,R17
 01EE 0E84              ldd R0,y+14
 01F0 1F84              ldd R1,y+15
 01F2 2018              sub R2,R0
 01F4 3108              sbc R3,R1
 01F6 4D80              ldd R4,y+5
 01F8 5E80              ldd R5,y+6
 01FA 2418              sub R2,R4
 01FC 3508              sbc R3,R5
 01FE 288A              std y+16,R2
 0200 398A              std y+17,R3
 0202                   .dbline 154
 0202 6624              clr R6
 0204 7724              clr R7
 0206 10C0              rjmp L38
 0208                 L35:
 0208                   .dbline 154
 0208                   .dbline 155
 0208 CA82              std y+2,R12
 020A 6883              std y+0,R22
 020C 242F              mov R18,R20
 020E 0A2D              mov R16,R10
 0210 6F92              push R6
 0212 7F92              push R7
 0214 DCD0              rcall _flashCopyBLack
 0216 7F90              pop R7
 0218 6F90              pop R6
 021A                   .dbline 156
 021A 4395              inc R20
 021C                   .dbline 157
 021C C394              inc R12
 021E                   .dbline 158
 021E                 L36:
 021E                   .dbline 154
 021E 862D              mov R24,R6
 0220 972D              mov R25,R7
 0222 0196              adiw R24,1
 0224 682E              mov R6,R24
 0226 792E              mov R7,R25
 0228                 L38:
 0228                   .dbline 154
                       ;     for(i=0;i<CopyBack_two_count;i++){
 0228 0888              ldd R0,y+16
 022A 1988              ldd R1,y+17
 022C 6014              cp R6,R0
 022E 7104              cpc R7,R1
 0230 58F3              brlo L35
 0232                   .dbline 159
 0232 6624              clr R6
 0234 7724              clr R7
 0236 16C0              rjmp L42

⌨️ 快捷键说明

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