📄 spokepov.lss
字号:
554: 99 27 eor r25, r25
556: 86 38 cpi r24, 0x86 ; 134
558: 91 05 cpc r25, r1
55a: 09 f4 brne .+2 ; 0x55e <main+0x50>
55c: 43 c0 rjmp .+134 ; 0x5e4 <main+0xd6>
55e: 87 38 cpi r24, 0x87 ; 135
560: 91 05 cpc r25, r1
562: 24 f4 brge .+8 ; 0x56c <main+0x5e>
564: 85 38 cpi r24, 0x85 ; 133
566: 91 05 cpc r25, r1
568: 41 f0 breq .+16 ; 0x57a <main+0x6c>
56a: e8 cf rjmp .-48 ; 0x53c <main+0x2e>
56c: 87 38 cpi r24, 0x87 ; 135
56e: 91 05 cpc r25, r1
570: 21 f0 breq .+8 ; 0x57a <main+0x6c>
572: 88 38 cpi r24, 0x88 ; 136
574: 91 05 cpc r25, r1
576: b1 f1 breq .+108 ; 0x5e4 <main+0xd6>
578: e1 cf rjmp .-62 ; 0x53c <main+0x2e>
57a: 07 38 cpi r16, 0x87 ; 135
57c: 19 f4 brne .+6 ; 0x584 <main+0x76>
57e: a0 e1 ldi r26, 0x10 ; 16
580: ba 2e mov r11, r26
582: 02 c0 rjmp .+4 ; 0x588 <main+0x7a>
584: f1 e0 ldi r31, 0x01 ; 1
586: bf 2e mov r11, r31
588: 80 e0 ldi r24, 0x00 ; 0
58a: 95 df rcall .-214 ; 0x4b6 <tx_computer_byte>
58c: e8 2e mov r14, r24
58e: ff 24 eor r15, r15
590: fe 2c mov r15, r14
592: ee 24 eor r14, r14
594: 80 e0 ldi r24, 0x00 ; 0
596: 8f df rcall .-226 ; 0x4b6 <tx_computer_byte>
598: 99 27 eor r25, r25
59a: e8 2a or r14, r24
59c: f9 2a or r15, r25
59e: f7 fe sbrs r15, 7
5a0: 04 c0 rjmp .+8 ; 0x5aa <main+0x9c>
5a2: 8e 2d mov r24, r14
5a4: cf dd rcall .-1122 ; 0x144 <internal_eeprom_read>
5a6: 87 df rcall .-242 ; 0x4b6 <tx_computer_byte>
5a8: 1a c0 rjmp .+52 ; 0x5de <main+0xd0>
5aa: 4b 2d mov r20, r11
5ac: 6c 2f mov r22, r28
5ae: 7d 2f mov r23, r29
5b0: 6f 5f subi r22, 0xFF ; 255
5b2: 7f 4f sbci r23, 0xFF ; 255
5b4: 9f 2d mov r25, r15
5b6: 8e 2d mov r24, r14
5b8: bb d0 rcall .+374 ; 0x730 <spieeprom_read>
5ba: 90 e0 ldi r25, 0x00 ; 0
5bc: 9b 15 cp r25, r11
5be: 78 f4 brcc .+30 ; 0x5de <main+0xd0>
5c0: 00 e0 ldi r16, 0x00 ; 0
5c2: 10 e0 ldi r17, 0x00 ; 0
5c4: fd 2f mov r31, r29
5c6: ec 2f mov r30, r28
5c8: e0 0f add r30, r16
5ca: f1 1f adc r31, r17
5cc: 81 81 ldd r24, Z+1 ; 0x01
5ce: 99 8b std Y+17, r25 ; 0x11
5d0: 72 df rcall .-284 ; 0x4b6 <tx_computer_byte>
5d2: 99 89 ldd r25, Y+17 ; 0x11
5d4: 9f 5f subi r25, 0xFF ; 255
5d6: 0f 5f subi r16, 0xFF ; 255
5d8: 1f 4f sbci r17, 0xFF ; 255
5da: 9b 15 cp r25, r11
5dc: 98 f3 brcs .-26 ; 0x5c4 <main+0xb6>
5de: 80 e8 ldi r24, 0x80 ; 128
5e0: 6a df rcall .-300 ; 0x4b6 <tx_computer_byte>
5e2: ac cf rjmp .-168 ; 0x53c <main+0x2e>
5e4: 08 38 cpi r16, 0x88 ; 136
5e6: 19 f4 brne .+6 ; 0x5ee <main+0xe0>
5e8: 70 e1 ldi r23, 0x10 ; 16
5ea: b7 2e mov r11, r23
5ec: 02 c0 rjmp .+4 ; 0x5f2 <main+0xe4>
5ee: 61 e0 ldi r22, 0x01 ; 1
5f0: b6 2e mov r11, r22
5f2: 80 e0 ldi r24, 0x00 ; 0
5f4: 60 df rcall .-320 ; 0x4b6 <tx_computer_byte>
5f6: e8 2e mov r14, r24
5f8: ff 24 eor r15, r15
5fa: fe 2c mov r15, r14
5fc: ee 24 eor r14, r14
5fe: 80 e0 ldi r24, 0x00 ; 0
600: 5a df rcall .-332 ; 0x4b6 <tx_computer_byte>
602: 99 27 eor r25, r25
604: e8 2a or r14, r24
606: f9 2a or r15, r25
608: 9f 2d mov r25, r15
60a: 8e 2d mov r24, r14
60c: 44 e0 ldi r20, 0x04 ; 4
60e: 96 95 lsr r25
610: 87 95 ror r24
612: 4a 95 dec r20
614: e1 f7 brne .-8 ; 0x60e <main+0x100>
616: 64 e0 ldi r22, 0x04 ; 4
618: 8f 71 andi r24, 0x1F ; 31
61a: ec dd rcall .-1064 ; 0x1f4 <set_led>
61c: 90 e0 ldi r25, 0x00 ; 0
61e: 9b 15 cp r25, r11
620: a8 f4 brcc .+42 ; 0x64c <main+0x13e>
622: cc 24 eor r12, r12
624: dd 24 eor r13, r13
626: 0c 2f mov r16, r28
628: 1d 2f mov r17, r29
62a: 0f 5f subi r16, 0xFF ; 255
62c: 1f 4f sbci r17, 0xFF ; 255
62e: 0c 0d add r16, r12
630: 1d 1d adc r17, r13
632: 80 e0 ldi r24, 0x00 ; 0
634: 99 8b std Y+17, r25 ; 0x11
636: 3f df rcall .-386 ; 0x4b6 <tx_computer_byte>
638: f1 2f mov r31, r17
63a: e0 2f mov r30, r16
63c: 80 83 st Z, r24
63e: 99 89 ldd r25, Y+17 ; 0x11
640: 9f 5f subi r25, 0xFF ; 255
642: 08 94 sec
644: c1 1c adc r12, r1
646: d1 1c adc r13, r1
648: 9b 15 cp r25, r11
64a: 68 f3 brcs .-38 ; 0x626 <main+0x118>
64c: 80 e8 ldi r24, 0x80 ; 128
64e: 33 df rcall .-410 ; 0x4b6 <tx_computer_byte>
650: f7 fe sbrs r15, 7
652: 04 c0 rjmp .+8 ; 0x65c <main+0x14e>
654: 69 81 ldd r22, Y+1 ; 0x01
656: 8e 2d mov r24, r14
658: 51 df rcall .-350 ; 0x4fc <internal_eeprom_write>
65a: 70 cf rjmp .-288 ; 0x53c <main+0x2e>
65c: 4b 2d mov r20, r11
65e: 6c 2f mov r22, r28
660: 7d 2f mov r23, r29
662: 6f 5f subi r22, 0xFF ; 255
664: 7f 4f sbci r23, 0xFF ; 255
666: 9f 2d mov r25, r15
668: 8e 2d mov r24, r14
66a: 1e d0 rcall .+60 ; 0x6a8 <spieeprom_write>
66c: 67 cf rjmp .-306 ; 0x53c <main+0x2e>
66e: 90 9a sbi 0x12, 0 ; 18
670: a8 95 wdr
672: 90 98 cbi 0x12, 0 ; 18
674: 80 91 6a 00 lds r24, 0x006A
678: 90 91 6b 00 lds r25, 0x006B
67c: 8f 5f subi r24, 0xFF ; 255
67e: 9f 4f sbci r25, 0xFF ; 255
680: b1 f7 brne .-20 ; 0x66e <main+0x160>
682: f8 94 cli
684: 64 e0 ldi r22, 0x04 ; 4
686: 80 e0 ldi r24, 0x00 ; 0
688: b5 dd rcall .-1174 ; 0x1f4 <set_led>
68a: 65 e0 ldi r22, 0x05 ; 5
68c: 80 e0 ldi r24, 0x00 ; 0
68e: b2 dd rcall .-1180 ; 0x1f4 <set_led>
690: 96 98 cbi 0x12, 6 ; 18
692: c4 9a sbi 0x18, 4 ; 24
694: 81 b5 in r24, 0x21 ; 33
696: 88 61 ori r24, 0x18 ; 24
698: 81 bd out 0x21, r24 ; 33
69a: 11 bc out 0x21, r1 ; 33
69c: 85 b7 in r24, 0x35 ; 53
69e: 80 67 ori r24, 0x70 ; 112
6a0: 85 bf out 0x35, r24 ; 53
6a2: 78 94 sei
6a4: 88 95 sleep
6a6: e3 cf rjmp .-58 ; 0x66e <main+0x160>
000006a8 <spieeprom_write>:
#include <avr/io.h>
#include "eeprom.h"
#include "main.h"
uint8_t spieeprom_write(uint16_t addr, uint8_t *data, uint8_t len) {
6a8: ef 92 push r14
6aa: ff 92 push r15
6ac: 0f 93 push r16
6ae: 1f 93 push r17
6b0: cf 93 push r28
6b2: df 93 push r29
6b4: d9 2f mov r29, r25
6b6: c8 2f mov r28, r24
6b8: e6 2e mov r14, r22
6ba: f7 2e mov r15, r23
6bc: 04 2f mov r16, r20
uint8_t i;
/* check if there is a write in progress, wait */
do {
asm("wdr");
6be: a8 95 wdr
SPIEE_CS_PORT &= ~_BV(SPIEE_CS); // pull CS low
6c0: c4 98 cbi 0x18, 4 ; 24
...
NOP; NOP; NOP; NOP; // wait 500 ns, CS setup time
spi_transfer(SPI_EEPROM_RDSR); // write "READ STATUS REG" cmd
6ca: 85 e0 ldi r24, 0x05 ; 5
6cc: 5d dd rcall .-1350 ; 0x188 <spi_transfer>
i = spi_transfer(0); // read status
6ce: 80 e0 ldi r24, 0x00 ; 0
6d0: 5b dd rcall .-1354 ; 0x188 <spi_transfer>
SPIEE_CS_PORT |= _BV(SPIEE_CS); // pull CS high
6d2: c4 9a sbi 0x18, 4 ; 24
} while ((i & 0x1) != 0);
6d4: 80 fd sbrc r24, 0
6d6: f3 cf rjmp .-26 ; 0x6be <spieeprom_write+0x16>
/* set the spi write enable latch */
SPIEE_CS_PORT &= ~_BV(SPIEE_CS); // pull CS low
6d8: c4 98 cbi 0x18, 4 ; 24
...
NOP; NOP; NOP; NOP; // wait 500 ns, CS setup time
spi_transfer(SPI_EEPROM_WREN); // send command
6e2: 86 e0 ldi r24, 0x06 ; 6
6e4: 51 dd rcall .-1374 ; 0x188 <spi_transfer>
SPIEE_CS_PORT |= _BV(SPIEE_CS); // pull CS high
6e6: c4 9a sbi 0x18, 4 ; 24
...
NOP; NOP; NOP; NOP; // 500ns hold time
SPIEE_CS_PORT &= ~_BV(SPIEE_CS); // pull CS low
6f0: c4 98 cbi 0x18, 4 ; 24
spi_transfer(SPI_EEPROM_WRITE); // send command
6f2: 82 e0 ldi r24, 0x02 ; 2
6f4: 49 dd rcall .-1390 ; 0x188 <spi_transfer>
spi_transfer(addr >> 8); // send high addr
6f6: 8d 2f mov r24, r29
6f8: 99 27 eor r25, r25
6fa: 46 dd rcall .-1396 ; 0x188 <spi_transfer>
spi_transfer(addr & 0xFF); // send low addr
6fc: 8c 2f mov r24, r28
6fe: 44 dd rcall .-1400 ; 0x188 <spi_transfer>
for (i = 0; i< len; i++)
700: 10 e0 ldi r17, 0x00 ; 0
702: 10 17 cp r17, r16
704: 38 f4 brcc .+14 ; 0x714 <spieeprom_write+0x6c>
706: df 2d mov r29, r15
708: ce 2d mov r28, r14
spi_transfer(data[i]); // send data
70a: 89 91 ld r24, Y+
70c: 3d dd rcall .-1414 ; 0x188 <spi_transfer>
70e: 1f 5f subi r17, 0xFF ; 255
710: 10 17 cp r17, r16
712: d8 f3 brcs .-10 ; 0x70a <spieeprom_write+0x62>
...
NOP; NOP; NOP; NOP; // 500ns hold time
SPIEE_CS_PORT |= _BV(SPIEE_CS); // pull CS high
71c: c4 9a sbi 0x18, 4 ; 24
return 0;
}
71e: 80 e0 ldi r24, 0x00 ; 0
720: 90 e0 ldi r25, 0x00 ; 0
722: df 91 pop r29
724: cf 91 pop r28
726: 1f 91 pop r17
728: 0f 91 pop r16
72a: ff 90 pop r15
72c: ef 90 pop r14
72e: 08 95 ret
00000730 <spieeprom_read>:
void spieeprom_read(uint16_t addr, uint8_t *buff, uint8_t len) {
730: ff 92 push r15
732: 0f 93 push r16
734: 1f 93 push r17
736: cf 93 push r28
738: df 93 push r29
73a: 08 2f mov r16, r24
73c: 19 2f mov r17, r25
73e: d7 2f mov r29, r23
740: c6 2f mov r28, r22
742: f4 2e mov r15, r20
uint8_t data, i;
SPIEE_CS_PORT &= ~_BV(SPIEE_CS); // pull CS low
744: c4 98 cbi 0x18, 4 ; 24
...
NOP; NOP; NOP; NOP;
spi_transfer(SPI_EEPROM_READ); // send READ command
74e: 83 e0 ldi r24, 0x03 ; 3
750: 1b dd rcall .-1482 ; 0x188 <spi_transfer>
spi_transfer(addr >> 8); // send high addr
752: 81 2f mov r24, r17
754: 99 27 eor r25, r25
756: 18 dd rcall .-1488 ; 0x188 <spi_transfer>
spi_transfer(addr & 0xFF); // send low addr
758: 80 2f mov r24, r16
75a: 16 dd rcall .-1492 ; 0x188 <spi_transfer>
for (i=0; i<len; i++)
75c: 00 e0 ldi r16, 0x00 ; 0
75e: 0f 15 cp r16, r15
760: 28 f4 brcc .+10 ; 0x76c <spieeprom_read+0x3c>
buff[i] = spi_transfer(0);
762: 80 e0 ldi r24, 0x00 ; 0
764: 11 dd rcall .-1502 ; 0x188 <spi_transfer>
766: 89 93 st Y+, r24
768: 0f 5f subi r16, 0xFF ; 255
76a: f9 cf rjmp .-14 ; 0x75e <spieeprom_read+0x2e>
SPIEE_CS_PORT |= _BV(SPIEE_CS); // pull CS high
76c: c4 9a sbi 0x18, 4 ; 24
76e: df 91 pop r29
770: cf 91 pop r28
772: 1f 91 pop r17
774: 0f 91 pop r16
776: ff 90 pop r15
778: 08 95 ret
0000077a <spieeprom_read_into_leds>:
}
void spieeprom_read_into_leds(uint16_t addr, uint8_t side) {
77a: ff 92 push r15
77c: 0f 93 push r16
77e: 1f 93 push r17
780: 08 2f mov r16, r24
782: 19 2f mov r17, r25
784: f6 2e mov r15, r22
uint8_t x;
SPIEE_CS_PORT &= ~_BV(SPIEE_CS); // pull CS low
786: c4 98 cbi 0x18, 4 ; 24
...
NOP; NOP; NOP; NOP;
spi_transfer(SPI_EEPROM_READ); // send READ command
790: 83 e0 ldi r24, 0x03 ; 3
792: fa dc rcall .-1548 ; 0x188 <spi_transfer>
spi_transfer(addr >> 8); // send high addr
794: 81 2f mov r24, r17
796: 99 27 eor r25, r25
798: f7 dc rcall .-1554 ; 0x188 <spi_transfer>
spi_transfer(addr & 0xFF); // send low addr
79a: 80 2f mov r24, r16
79c: f5 dc rcall .-1558 ; 0x188 <spi_transfer>
x = spi_transfer(0);
79e: 80 e0 ldi r24, 0x00 ; 0
7a0: f3 dc rcall .-1562 ; 0x188 <spi_transfer>
x = spi_transfer(x);
7a2: f2 dc rcall .-1564 ; 0x188 <spi_transfer>
x = spi_transfer(x);
7a4: f1 dc rcall .-1566 ; 0x188 <spi_transfer>
x = spi_transfer(x);
7a6: f0 dc rcall .-1568 ; 0x188 <spi_transfer>
spi_transfer(x);
7a8: ef dc rcall .-1570 ; 0x188 <spi_transfer>
SPIEE_CS_PORT |= _BV(SPIEE_CS); // pull CS high
7aa: c4 9a sbi 0x18, 4 ; 24
LATCH_SELECT_PORT |= _BV(side);
7ac: 21 e0 ldi r18, 0x01 ; 1
7ae: 30 e0 ldi r19, 0x00 ; 0
7b0: 02 c0 rjmp .+4 ; 0x7b6 <spieeprom_read_into_leds+0x3c>
7b2: 22 0f add r18, r18
7b4: 33 1f adc r19, r19
7b6: fa 94 dec r15
7b8: e2 f7 brpl .-8 ; 0x7b2 <spieeprom_read_into_leds+0x38>
7ba: 82 b3 in r24, 0x12 ; 18
7bc: 82 2b or r24, r18
7be: 82 bb out 0x12, r24 ; 18
...
NOP; NOP; NOP; NOP;
LATCH_SELECT_PORT &= ~_BV(side);
7c8: 92 2f mov r25, r18
7ca: 90 95 com r25
7cc: 82 b3 in r24, 0x12 ; 18
7ce: 89 23 and r24, r25
7d0: 82 bb out 0x12, r24 ; 18
7d2: 1f 91 pop r17
7d4: 0f 91 pop r16
7d6: ff 90 pop r15
7d8: 08 95 ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -