📄 main.lst
字号:
\ 00000126 95E8 SPM
426 #pragma diag_default=Pe1053 // Back to default.
427 _WAIT_FOR_SPM();
\ ??BlockLoad_12:
\ 00000128 B707 IN R16, 0x37
\ 0000012A 2F10 MOV R17, R16
\ 0000012C FD10 SBRC R17, 0
\ 0000012E CFFC RJMP ??BlockLoad_12
428 }
429 _ENABLE_RWW_SECTION();
\ ??BlockLoad_11:
\ 00000130 E111 LDI R17, 17
\ 00000132 2400 CLR R0
\ 00000134 BF17 OUT 0x37, R17
\ 00000136 95E8 SPM
430
431 (*address) >>= 1; // Convert address back to Flash words again.
\ 00000138 01F2 MOVW R31:R30, R5:R4
\ 0000013A 8100 LD R16, Z
\ 0000013C 8111 LDD R17, Z+1
\ 0000013E 8122 LDD R18, Z+2
\ 00000140 8133 LDD R19, Z+3
\ 00000142 9535 ASR R19
\ 00000144 9527 ROR R18
\ 00000146 9517 ROR R17
\ 00000148 9507 ROR R16
\ 0000014A 8300 ST Z, R16
\ 0000014C 8311 STD Z+1, R17
\ 0000014E 8322 STD Z+2, R18
\ 00000150 8333 STD Z+3, R19
\ 00000152 CFA2 RJMP ??BlockLoad_7
432 return '\r'; // Report programming OK
433 }
434
435 // Invalid memory type?
436 else
437 {
438 return '?';
\ ??BlockLoad_9:
\ 00000154 E30F LDI R16, 63
\ ??BlockLoad_8:
\ 00000156 5FDF SUBI R29, 255
\ 00000158 E0EA LDI R30, 10
\ 0000015A ........ JMP ?EPILOGUE_B10_L09
439 }
440 }
441
442
443
444 /*! \brief Read block of mem and send to serial port.
445 *
446 * Read 'size' bytes from EEPROM/Flash memory 'address' and
447 * send to serial port. If 'mem' == 'E', then 'address' gives
448 * the byte address in EEPROM. If 'mem' == 'F', then 'address'
449 * gives the word address in Flash.
450 */
\ In segment FARCODE, align 2, keep-with-next
451 void BlockRead(unsigned int size, unsigned char mem, long *address)
\ BlockRead:
452 {
\ 00000000 ........ CALL ?PROLOGUE4_L09
\ 00000004 01C8 MOVW R25:R24, R17:R16
\ 00000006 01DA MOVW R27:R26, R21:R20
453 // EEPROM memory type.
454 if (mem=='E') // Read EEPROM
\ 00000008 3425 CPI R18, 69
\ 0000000A F501 BRNE ??BlockRead_0
455 {
456 do
457 {
458 EEARL = *address; // Setup EEPROM address
\ ??BlockRead_1:
\ 0000000C 910D LD R16, X+
\ 0000000E 911D LD R17, X+
\ 00000010 912D LD R18, X+
\ 00000012 9713 SBIW R27:R26, 3
\ 00000014 BD01 OUT 0x21, R16
459 EEARH = ((*address) >> 8);
\ 00000016 910D LD R16, X+
\ 00000018 911D LD R17, X+
\ 0000001A 912D LD R18, X+
\ 0000001C 9713 SBIW R27:R26, 3
\ 0000001E BD12 OUT 0x22, R17
460 (*address)++; // Select next EEPROM byte
\ 00000020 01FD MOVW R31:R30, R27:R26
\ 00000022 8100 LD R16, Z
\ 00000024 8111 LDD R17, Z+1
\ 00000026 8122 LDD R18, Z+2
\ 00000028 8133 LDD R19, Z+3
\ 0000002A 5F0F SUBI R16, 255
\ 0000002C 4F1F SBCI R17, 255
\ 0000002E 4F2F SBCI R18, 255
\ 00000030 4F3F SBCI R19, 255
\ 00000032 8300 ST Z, R16
\ 00000034 8311 STD Z+1, R17
\ 00000036 8322 STD Z+2, R18
\ 00000038 8333 STD Z+3, R19
461 EECR |= (1<<EERE); // Read EEPROM
\ 0000003A 9AF8 SBI 0x1F, 0x00
462 sendchar(EEDR); // Transmit EEPROM dat ato PC
\ 0000003C B500 IN R16, 0x20
\ 0000003E ........ CALL sendchar
463
464 size--; // Decrease number of bytes to read
\ 00000042 9701 SBIW R25:R24, 1
465 } while (size); // Repeat until all block has been read
\ 00000044 2F08 MOV R16, R24
\ 00000046 2B09 OR R16, R25
\ 00000048 F709 BRNE ??BlockRead_1
\ 0000004A C049 RJMP ??BlockRead_2
466 }
467
468 // Flash memory type.
469 else if(mem=='F')
\ ??BlockRead_0:
\ 0000004C 3426 CPI R18, 70
\ 0000004E F009 BREQ $+2+2
\ 00000050 C046 RJMP ??BlockRead_2
470 {
471 (*address) <<= 1; // Convert address to bytes temporarily.
\ 00000052 910D LD R16, X+
\ 00000054 911D LD R17, X+
\ 00000056 912D LD R18, X+
\ 00000058 913C LD R19, X
\ 0000005A 9713 SBIW R27:R26, 3
\ 0000005C 0F00 LSL R16
\ 0000005E 1F11 ROL R17
\ 00000060 1F22 ROL R18
\ 00000062 1F33 ROL R19
\ 00000064 930D ST X+, R16
\ 00000066 931D ST X+, R17
\ 00000068 932D ST X+, R18
\ 0000006A 933C ST X, R19
\ 0000006C 9713 SBIW R27:R26, 3
472
473 do
474 {
475 #pragma diag_suppress=Pe1053 // Suppress warning for conversion from long-type address to flash ptr.
476 sendchar( _LOAD_PROGRAM_MEMORY(*address) );
\ ??BlockRead_3:
\ 0000006E 910D LD R16, X+
\ 00000070 911D LD R17, X+
\ 00000072 912D LD R18, X+
\ 00000074 9713 SBIW R27:R26, 3
\ 00000076 01F8 MOVW R31:R30, R17:R16
\ 00000078 BF2B OUT 0x3B, R18
\ 0000007A 9006 ELPM R0, Z
\ 0000007C 2D00 MOV R16, R0
\ 0000007E E010 LDI R17, 0
\ 00000080 BF1B OUT 0x3B, R17
\ 00000082 ........ CALL sendchar
477 sendchar( _LOAD_PROGRAM_MEMORY((*address)+1) );
\ 00000086 910D LD R16, X+
\ 00000088 911D LD R17, X+
\ 0000008A 912D LD R18, X+
\ 0000008C 9713 SBIW R27:R26, 3
\ 0000008E 5F0F SUBI R16, 255
\ 00000090 4F1F SBCI R17, 255
\ 00000092 4F2F SBCI R18, 255
\ 00000094 01F8 MOVW R31:R30, R17:R16
\ 00000096 BF2B OUT 0x3B, R18
\ 00000098 9006 ELPM R0, Z
\ 0000009A E000 LDI R16, 0
\ 0000009C BF0B OUT 0x3B, R16
\ 0000009E 2D00 MOV R16, R0
\ 000000A0 ........ CALL sendchar
478 #pragma diag_default=Pe1053 // Back to default.
479 (*address) += 2; // Select next word in memory.
\ 000000A4 910D LD R16, X+
\ 000000A6 911D LD R17, X+
\ 000000A8 912D LD R18, X+
\ 000000AA 913C LD R19, X
\ 000000AC 5F0E SUBI R16, 254
\ 000000AE 4F1F SBCI R17, 255
\ 000000B0 4F2F SBCI R18, 255
\ 000000B2 4F3F SBCI R19, 255
\ 000000B4 933C ST X, R19
\ 000000B6 932E ST -X, R18
\ 000000B8 931E ST -X, R17
\ 000000BA 930E ST -X, R16
480 size -= 2; // Subtract two bytes from number of bytes to read
\ 000000BC 9702 SBIW R25:R24, 2
481 } while (size); // Repeat until all block has been read
\ 000000BE 2F08 MOV R16, R24
\ 000000C0 2B09 OR R16, R25
\ 000000C2 F6A9 BRNE ??BlockRead_3
482
483 (*address) >>= 1; // Convert address back to Flash words again.
\ 000000C4 910D LD R16, X+
\ 000000C6 911D LD R17, X+
\ 000000C8 912D LD R18, X+
\ 000000CA 913C LD R19, X
\ 000000CC 9713 SBIW R27:R26, 3
\ 000000CE 9535 ASR R19
\ 000000D0 9527 ROR R18
\ 000000D2 9517 ROR R17
\ 000000D4 9507 ROR R16
\ 000000D6 930D ST X+, R16
\ 000000D8 931D ST X+, R17
\ 000000DA 932D ST X+, R18
\ 000000DC 933C ST X, R19
484 }
485 }
\ ??BlockRead_2:
\ 000000DE E0E4 LDI R30, 4
\ 000000E0 ........ JMP ?EPILOGUE_B4_L09
486 #endif
487
488
489 /* end of file */
490
Maximum stack usage in bytes:
Function CSTACK RSTACK
-------- ------ ------
BlockLoad 266 3
-> recchar 266 3
-> recchar 266 3
-> recchar 266 3
BlockRead 4 3
-> sendchar 4 3
-> sendchar 4 3
-> sendchar 4 3
main 4 3
-> initbootuart 4 3
-> Indirect call 4 3
-> sendchar 4 3
-> recchar 4 3
-> recchar 4 3
-> recchar 4 3
-> recchar 4 3
-> recchar 4 3
-> recchar 4 3
-> sendchar 4 3
-> sendchar 4 3
-> sendchar 4 3
-> sendchar 4 3
-> recchar 4 3
-> recchar 4 3
-> recchar 4 3
-> BlockLoad 4 3
-> sendchar 4 3
-> recchar 4 3
-> recchar 4 3
-> recchar 4 3
-> BlockRead 4 3
-> sendchar 4 3
-> sendchar 4 3
-> recchar 4 3
-> recchar 4 3
-> sendchar 4 3
-> recchar 4 3
-> sendchar 4 3
-> recchar 4 3
-> sendchar 4 3
-> sendchar 4 3
-> sendchar 4 3
-> sendchar 4 3
-> sendchar 4 3
-> sendchar 4 3
-> sendchar
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -