📄 main.lis
字号:
018A L47:
018A .dbline 180
018A ; TempInt = read_program_memory(PageAddress + i,0x00);
018A 2227 clr R18
018C 00910200 lds R16,_PageAddress
0190 10910300 lds R17,_PageAddress+1
0194 040F add R16,R20
0196 151F adc R17,R21
0198 0E940000 xcall _read_program_memory
019C 5801 movw R10,R16
019E .dbline 181
019E ; RAMPZ = 0;
019E 2224 clr R2
01A0 2BBE out 0x3b,R2
01A2 .dbline 182
01A2 ; TempInt2 = PageBuffer[i] +(PageBuffer[i+1]<<8);
01A2 80E0 ldi R24,<_PageBuffer
01A4 90E0 ldi R25,>_PageBuffer
01A6 FA01 movw R30,R20
01A8 3196 adiw R30,1
01AA E80F add R30,R24
01AC F91F adc R31,R25
01AE 2080 ldd R2,z+0
01B0 3324 clr R3
01B2 322C mov R3,R2
01B4 2224 clr R2
01B6 FA01 movw R30,R20
01B8 E80F add R30,R24
01BA F91F adc R31,R25
01BC 6081 ldd R22,z+0
01BE 7727 clr R23
01C0 620D add R22,R2
01C2 731D adc R23,R3
01C4 .dbline 183
01C4 ; if (TempInt != TempInt2) return 0;
01C4 0617 cp R16,R22
01C6 1707 cpc R17,R23
01C8 11F0 breq L49
01CA .dbline 183
01CA 0027 clr R16
01CC 07C0 xjmp L42
01CE L49:
01CE .dbline 184
01CE L44:
01CE .dbline 177
01CE 4E5F subi R20,254 ; offset = 2
01D0 5F4F sbci R21,255
01D2 L46:
01D2 .dbline 177
01D2 4030 cpi R20,0
01D4 E1E0 ldi R30,1
01D6 5E07 cpc R21,R30
01D8 90F2 brlo L43
01DA .dbline 185
01DA ; }
01DA ; return 1;
01DA 01E0 ldi R16,1
01DC .dbline -2
01DC L42:
01DC 0E940000 xcall pop_gset3
01E0 .dbline 0 ; func end
01E0 0895 ret
01E2 .dbsym r TempInt2 22 i
01E2 .dbsym r TempInt 10 i
01E2 .dbsym r i 20 i
01E2 .dbend
01E2 .dbfunc e IsChar _IsChar fc
.even
01E2 _IsChar::
01E2 .dbline -1
01E2 .dbline 191
01E2 ; }
01E2 ;
01E2 ; /*********************************************************/
01E2 ;
01E2 ; unsigned char IsChar(void)
01E2 ; {
01E2 .dbline 192
01E2 ; if (UCSR0A & 0x80) return 1;
01E2 5F9B sbis 0xb,7
01E4 02C0 rjmp L52
01E6 .dbline 192
01E6 01E0 ldi R16,1
01E8 01C0 xjmp L51
01EA L52:
01EA .dbline 193
01EA ; return 0;
01EA 0027 clr R16
01EC .dbline -2
01EC L51:
01EC .dbline 0 ; func end
01EC 0895 ret
01EE .dbend
01EE .dbfunc e RxChar _RxChar fc
.even
01EE _RxChar::
01EE .dbline -1
01EE .dbline 199
01EE ; }
01EE ;
01EE ; /*********************************************************/
01EE ;
01EE ; unsigned char RxChar(void)
01EE ; {
01EE .dbline 200
01EE ; return UDR0; // Read char
01EE 0CB1 in R16,0xc
01F0 .dbline -2
01F0 L54:
01F0 .dbline 0 ; func end
01F0 0895 ret
01F2 .dbend
01F2 .dbfunc e TxChar _TxChar fV
01F2 ; ch -> R16
.even
01F2 _TxChar::
01F2 .dbline -1
01F2 .dbline 206
01F2 ; }
01F2 ;
01F2 ; /*********************************************************/
01F2 ;
01F2 ; void TxChar(unsigned char ch)
01F2 ; {
01F2 L56:
01F2 .dbline 207
01F2 L57:
01F2 .dbline 207
01F2 ; while (!(UCSR0A & 0x20)); // Wait for empty transmit buffer
01F2 5D9B sbis 0xb,5
01F4 FECF rjmp L56
01F6 .dbline 208
01F6 ; UDR0 = ch; // Write char
01F6 0CB9 out 0xc,R16
01F8 .dbline -2
01F8 .dbline 209
01F8 ; }
01F8 L55:
01F8 .dbline 0 ; func end
01F8 0895 ret
01FA .dbsym r ch 16 c
01FA .dbend
01FA .dbfunc e Wait _Wait fV
01FA ; i -> R16,R17
.even
01FA _Wait::
01FA .dbline -1
01FA .dbline 214
01FA ;
01FA ; /*********************************************************/
01FA ;
01FA ; void Wait()
01FA ; {
01FA .dbline 217
01FA 00E0 ldi R16,-32000
01FC 13E8 ldi R17,-125
01FE L60:
01FE .dbline 217
01FE L61:
01FE .dbline 217
01FE ; int i;
01FE ;
01FE ; for (i=-32000;i<32000;i++); // Minimum for 16Mhz
01FE 0F5F subi R16,255 ; offset = 1
0200 1F4F sbci R17,255
0202 .dbline 217
0202 0030 cpi R16,0
0204 EDE7 ldi R30,125
0206 1E07 cpc R17,R30
0208 D4F3 brlt L60
020A .dbline -2
020A .dbline 218
020A ; }
020A L59:
020A .dbline 0 ; func end
020A 0895 ret
020C .dbsym r i 16 I
020C .dbend
020C .dbfunc e main _main fV
.even
020C _main::
020C .dbline -1
020C .dbline 223
020C ;
020C ; /*********************************************************/
020C ;
020C ; void main(void)
020C ; {
020C .dbline 224
020C ; DDRF = 0xff; // for ata
020C 8FEF ldi R24,255
020E 80936100 sts 97,R24
0212 .dbline 225
0212 ; PORTF = 0xff;
0212 80936200 sts 98,R24
0216 .dbline 226
0216 ; DDRG = 0x02;
0216 82E0 ldi R24,2
0218 80936400 sts 100,R24
021C .dbline 227
021C ; PORTG = 0x02;
021C 80936500 sts 101,R24
0220 .dbline 229
0220 ;
0220 ; PORTE = 0x01; // Pull up on RX line
0220 81E0 ldi R24,1
0222 83B9 out 0x3,R24
0224 .dbline 230
0224 ; UCSR0C = 0x86; // Asyn,NoParity,1StopBit,8Bit,
0224 86E8 ldi R24,134
0226 80939500 sts 149,R24
022A .dbline 231
022A ; UBRR0L = 16; // 8->115200 at 16Mhz // 16->57600 at 16Mhz // 25->38400bps at 16Mhz
022A 80E1 ldi R24,16
022C 89B9 out 0x9,R24
022E .dbline 232
022E ; UCSR0B = 0x18; // Rx enable Tx Enable
022E 88E1 ldi R24,24
0230 8AB9 out 0xa,R24
0232 .dbline 234
0232 ;
0232 ; RxChar();
0232 DDDF xcall _RxChar
0234 .dbline 235
0234 ; TxChar('>');
0234 0EE3 ldi R16,62
0236 DDDF xcall _TxChar
0238 .dbline 236
0238 ; Wait();
0238 E0DF xcall _Wait
023A .dbline 237
023A ; if (RxChar() == '<')
023A D9DF xcall _RxChar
023C 0C33 cpi R16,60
023E 11F4 brne L65
0240 .dbline 238
0240 ; {
0240 .dbline 239
0240 ; BootLoad();
0240 DFDE xcall _BootLoad
0242 .dbline 240
0242 ; ExecCode();
0242 2CDF xcall _ExecCode
0244 .dbline 241
0244 ; }
0244 L65:
0244 .dbline 242
0244 ; ExecCode();
0244 .dbline -2
0244 .dbline 243
0244 ; }
0244 L64:
0244 .dbline 0 ; func end
0244 2BCF xjmp _ExecCode
0246 .dbend
.area bss(ram, con, rel)
0000 .dbfile C:\DATA\MP3\BootLoader\main.c
0000 _RealPageAddress::
0000 .blkb 2
0002 .dbsym e RealPageAddress _RealPageAddress i
0002 _PageAddress::
0002 .blkb 2
0004 .dbsym e PageAddress _PageAddress i
0004 _PageBuffer::
0004 .blkb 256
0104 .dbsym e PageBuffer _PageBuffer A[256:256]c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -