📄 spokepov.lss
字号:
sei();
// Go into sleep mode
asm("sleep");
}
}
// *** PORTD |= 0x2;
}
// Move data over the serial link (to the 1K/4K EEPROM or the
// LED shift registers, or both!) This is black magic to me!
uint8_t spi_transfer(uint8_t c) {
USIDR = c;
174: 8f b9 out 0x0f, r24 ; 15
USISR = _BV(USIOIF);
176: 80 e4 ldi r24, 0x40 ; 64
178: 8e b9 out 0x0e, r24 ; 14
while (! (USISR & _BV(USIOIF))) {
USICR = _BV(USIWM0) | _BV(USICS1) | _BV(USICLK) | _BV(USITC);
17a: 76 99 sbic 0x0e, 6 ; 14
17c: 04 c0 rjmp .+8 ; 0x186 <spi_transfer+0x12>
17e: 8b e1 ldi r24, 0x1B ; 27
180: 8d b9 out 0x0d, r24 ; 13
182: 76 9b sbis 0x0e, 6 ; 14
184: fd cf rjmp .-6 ; 0x180 <spi_transfer+0xc>
//NOP; // slow down so that the eeprom isnt overwhelmed
}
return USIDR;
186: 8f b1 in r24, 0x0f ; 15
}
188: 99 27 eor r25, r25
18a: 08 95 ret
0000018c <clock_leds>:
18c: 80 91 8f 00 lds r24, 0x008F
190: f1 df rcall .-30 ; 0x174 <spi_transfer>
192: 80 91 90 00 lds r24, 0x0090
196: ee df rcall .-36 ; 0x174 <spi_transfer>
198: 80 91 8d 00 lds r24, 0x008D
19c: eb df rcall .-42 ; 0x174 <spi_transfer>
19e: 80 91 8e 00 lds r24, 0x008E
1a2: e8 df rcall .-48 ; 0x174 <spi_transfer>
1a4: 94 9a sbi 0x12, 4 ; 18
...
1ae: 94 98 cbi 0x12, 4 ; 18
1b0: 08 95 ret
000001b2 <set_led>:
1b2: 28 2f mov r18, r24
1b4: 8f ef ldi r24, 0xFF ; 255
1b6: 80 93 90 00 sts 0x0090, r24
1ba: 80 93 8f 00 sts 0x008F, r24
1be: 80 93 8e 00 sts 0x008E, r24
1c2: 80 93 8d 00 sts 0x008D, r24
1c6: 82 2f mov r24, r18
1c8: 86 95 lsr r24
1ca: 86 95 lsr r24
1cc: 86 95 lsr r24
1ce: e8 2f mov r30, r24
1d0: ff 27 eor r31, r31
1d2: e3 57 subi r30, 0x73 ; 115
1d4: ff 4f sbci r31, 0xFF ; 255
1d6: 27 70 andi r18, 0x07 ; 7
1d8: 81 e0 ldi r24, 0x01 ; 1
1da: 90 e0 ldi r25, 0x00 ; 0
1dc: 02 c0 rjmp .+4 ; 0x1e2 <set_led+0x30>
1de: 88 0f add r24, r24
1e0: 99 1f adc r25, r25
1e2: 2a 95 dec r18
1e4: e2 f7 brpl .-8 ; 0x1de <set_led+0x2c>
1e6: 80 95 com r24
1e8: 80 83 st Z, r24
1ea: d0 df rcall .-96 ; 0x18c <clock_leds>
1ec: 08 95 ret
000001ee <__vector_2>:
1ee: 1f 92 push r1
1f0: 0f 92 push r0
1f2: 0f b6 in r0, 0x3f ; 63
1f4: 0f 92 push r0
1f6: 11 24 eor r1, r1
1f8: 2f 93 push r18
1fa: 3f 93 push r19
1fc: 4f 93 push r20
1fe: 5f 93 push r21
200: 6f 93 push r22
202: 7f 93 push r23
204: 8f 93 push r24
206: 9f 93 push r25
208: af 93 push r26
20a: bf 93 push r27
20c: ef 93 push r30
20e: ff 93 push r31
210: 80 91 8a 00 lds r24, 0x008A
214: 85 30 cpi r24, 0x05 ; 5
216: b0 f1 brcs .+108 ; 0x284 <__vector_2+0x96>
218: 81 e0 ldi r24, 0x01 ; 1
21a: 80 93 89 00 sts 0x0089, r24
21e: 1d bc out 0x2d, r1 ; 45
220: 1c bc out 0x2c, r1 ; 44
222: 80 91 8b 00 lds r24, 0x008B
226: 90 91 8c 00 lds r25, 0x008C
22a: 8f 3f cpi r24, 0xFF ; 255
22c: 91 05 cpc r25, r1
22e: 08 f5 brcc .+66 ; 0x272 <__vector_2+0x84>
230: 80 91 8b 00 lds r24, 0x008B
234: 90 91 8c 00 lds r25, 0x008C
238: 04 97 sbiw r24, 0x04 ; 4
23a: d8 f0 brcs .+54 ; 0x272 <__vector_2+0x84>
23c: 80 91 8b 00 lds r24, 0x008B
240: 90 91 8c 00 lds r25, 0x008C
244: 98 2f mov r25, r24
246: 88 27 eor r24, r24
248: 22 b7 in r18, 0x32 ; 50
24a: 33 27 eor r19, r19
24c: 82 2b or r24, r18
24e: 93 2b or r25, r19
250: 9b bd out 0x2b, r25 ; 43
252: 8a bd out 0x2a, r24 ; 42
254: 12 be out 0x32, r1 ; 50
256: 8f e0 ldi r24, 0x0F ; 15
258: 80 93 84 00 sts 0x0084, r24
25c: 80 93 83 00 sts 0x0083, r24
260: 10 92 82 00 sts 0x0082, r1
264: 8e b5 in r24, 0x2e ; 46
266: 81 60 ori r24, 0x01 ; 1
268: 8e bd out 0x2e, r24 ; 46
26a: 89 b7 in r24, 0x39 ; 57
26c: 80 64 ori r24, 0x40 ; 64
26e: 89 bf out 0x39, r24 ; 57
270: 05 c0 rjmp .+10 ; 0x27c <__vector_2+0x8e>
272: 82 e0 ldi r24, 0x02 ; 2
274: 9e df rcall .-196 ; 0x1b2 <set_led>
276: 8e b5 in r24, 0x2e ; 46
278: 8e 7f andi r24, 0xFE ; 254
27a: 8e bd out 0x2e, r24 ; 46
27c: 10 92 8c 00 sts 0x008C, r1
280: 10 92 8b 00 sts 0x008B, r1
284: 10 92 8a 00 sts 0x008A, r1
288: ff 91 pop r31
28a: ef 91 pop r30
28c: bf 91 pop r27
28e: af 91 pop r26
290: 9f 91 pop r25
292: 8f 91 pop r24
294: 7f 91 pop r23
296: 6f 91 pop r22
298: 5f 91 pop r21
29a: 4f 91 pop r20
29c: 3f 91 pop r19
29e: 2f 91 pop r18
2a0: 0f 90 pop r0
2a2: 0f be out 0x3f, r0 ; 63
2a4: 0f 90 pop r0
2a6: 1f 90 pop r1
2a8: 18 95 reti
000002aa <__vector_4>:
2aa: 1f 92 push r1
2ac: 0f 92 push r0
2ae: 0f b6 in r0, 0x3f ; 63
2b0: 0f 92 push r0
2b2: 11 24 eor r1, r1
2b4: ef 92 push r14
2b6: ff 92 push r15
2b8: 0f 93 push r16
2ba: 1f 93 push r17
2bc: 2f 93 push r18
2be: 3f 93 push r19
2c0: 4f 93 push r20
2c2: 5f 93 push r21
2c4: 6f 93 push r22
2c6: 7f 93 push r23
2c8: 8f 93 push r24
2ca: 9f 93 push r25
2cc: af 93 push r26
2ce: bf 93 push r27
2d0: cf 93 push r28
2d2: df 93 push r29
2d4: ef 93 push r30
2d6: ff 93 push r31
2d8: 78 94 sei
2da: 00 91 87 00 lds r16, 0x0087
2de: 10 91 88 00 lds r17, 0x0088
2e2: c0 91 85 00 lds r28, 0x0085
2e6: d0 91 86 00 lds r29, 0x0086
2ea: e0 90 84 00 lds r14, 0x0084
2ee: f0 90 83 00 lds r15, 0x0083
2f2: 80 91 8b 00 lds r24, 0x008B
2f6: 90 91 8c 00 lds r25, 0x008C
2fa: 82 56 subi r24, 0x62 ; 98
2fc: 92 40 sbci r25, 0x02 ; 2
2fe: 08 f0 brcs .+2 ; 0x302 <__vector_4+0x58>
300: 64 c0 rjmp .+200 ; 0x3ca <__vector_4+0x120>
302: f3 94 inc r15
304: 80 e1 ldi r24, 0x10 ; 16
306: f8 16 cp r15, r24
308: c9 f5 brne .+114 ; 0x37c <__vector_4+0xd2>
30a: ff 24 eor r15, r15
30c: 8e 2d mov r24, r14
30e: 99 27 eor r25, r25
310: 01 96 adiw r24, 0x01 ; 1
312: 28 2f mov r18, r24
314: 39 2f mov r19, r25
316: 80 7f andi r24, 0xF0 ; 240
318: 91 70 andi r25, 0x01 ; 1
31a: e2 2e mov r14, r18
31c: e8 1a sub r14, r24
31e: ae 2d mov r26, r14
320: bb 27 eor r27, r27
322: fb 2f mov r31, r27
324: ea 2f mov r30, r26
326: ef 58 subi r30, 0x8F ; 143
328: ff 4f sbci r31, 0xFF ; 255
32a: e0 81 ld r30, Z
32c: e0 52 subi r30, 0x20 ; 32
32e: 8e 2f mov r24, r30
330: 86 95 lsr r24
332: 08 2f mov r16, r24
334: 11 27 eor r17, r17
336: 66 e0 ldi r22, 0x06 ; 6
338: 00 0f add r16, r16
33a: 11 1f adc r17, r17
33c: 6a 95 dec r22
33e: e1 f7 brne .-8 ; 0x338 <__vector_4+0x8e>
340: 8e 2f mov r24, r30
342: 99 27 eor r25, r25
344: 81 70 andi r24, 0x01 ; 1
346: 90 70 andi r25, 0x00 ; 0
348: 88 0f add r24, r24
34a: 99 1f adc r25, r25
34c: 08 2b or r16, r24
34e: 19 2b or r17, r25
350: a0 5a subi r26, 0xA0 ; 160
352: bf 4f sbci r27, 0xFF ; 255
354: ec 91 ld r30, X
356: e0 52 subi r30, 0x20 ; 32
358: 8e 2f mov r24, r30
35a: 86 95 lsr r24
35c: c8 2f mov r28, r24
35e: dd 27 eor r29, r29
360: 46 e0 ldi r20, 0x06 ; 6
362: cc 0f add r28, r28
364: dd 1f adc r29, r29
366: 4a 95 dec r20
368: e1 f7 brne .-8 ; 0x362 <__vector_4+0xb8>
36a: 8e 2f mov r24, r30
36c: 99 27 eor r25, r25
36e: 81 70 andi r24, 0x01 ; 1
370: 90 70 andi r25, 0x00 ; 0
372: 88 0f add r24, r24
374: 99 1f adc r25, r25
376: c8 2b or r28, r24
378: d9 2b or r29, r25
37a: 03 c0 rjmp .+6 ; 0x382 <__vector_4+0xd8>
37c: 0c 5f subi r16, 0xFC ; 252
37e: 1f 4f sbci r17, 0xFF ; 255
380: 24 96 adiw r28, 0x04 ; 4
382: 42 e0 ldi r20, 0x02 ; 2
384: 6f e8 ldi r22, 0x8F ; 143
386: 70 e0 ldi r23, 0x00 ; 0
388: 91 2f mov r25, r17
38a: 80 2f mov r24, r16
38c: 87 d0 rcall .+270 ; 0x49c <spieeprom_read>
38e: 42 e0 ldi r20, 0x02 ; 2
390: 6d e8 ldi r22, 0x8D ; 141
392: 70 e0 ldi r23, 0x00 ; 0
394: 8c 2f mov r24, r28
396: 9d 2f mov r25, r29
398: 81 d0 rcall .+258 ; 0x49c <spieeprom_read>
39a: f8 de rcall .-528 ; 0x18c <clock_leds>
39c: f8 94 cli
39e: 80 91 82 00 lds r24, 0x0082
3a2: 88 23 and r24, r24
3a4: 69 f0 breq .+26 ; 0x3c0 <__vector_4+0x116>
3a6: 10 93 88 00 sts 0x0088, r17
3aa: 00 93 87 00 sts 0x0087, r16
3ae: d0 93 86 00 sts 0x0086, r29
3b2: c0 93 85 00 sts 0x0085, r28
3b6: e0 92 84 00 sts 0x0084, r14
3ba: f0 92 83 00 sts 0x0083, r15
3be: 03 c0 rjmp .+6 ; 0x3c6 <__vector_4+0x11c>
3c0: 81 e0 ldi r24, 0x01 ; 1
3c2: 80 93 82 00 sts 0x0082, r24
3c6: 78 94 sei
3c8: 07 c0 rjmp .+14 ; 0x3d8 <__vector_4+0x12e>
3ca: f8 94 cli
3cc: 8e b5 in r24, 0x2e ; 46
3ce: 88 7f andi r24, 0xF8 ; 248
3d0: 8e bd out 0x2e, r24 ; 46
3d2: 78 94 sei
3d4: 82 e0 ldi r24, 0x02 ; 2
3d6: ed de rcall .-550 ; 0x1b2 <set_led>
3d8: ff 91 pop r31
3da: ef 91 pop r30
3dc: df 91 pop r29
3de: cf 91 pop r28
3e0: bf 91 pop r27
3e2: af 91 pop r26
3e4: 9f 91 pop r25
3e6: 8f 91 pop r24
3e8: 7f 91 pop r23
3ea: 6f 91 pop r22
3ec: 5f 91 pop r21
3ee: 4f 91 pop r20
3f0: 3f 91 pop r19
3f2: 2f 91 pop r18
3f4: 1f 91 pop r17
3f6: 0f 91 pop r16
3f8: ff 90 pop r15
3fa: ef 90 pop r14
3fc: 0f 90 pop r0
3fe: 0f be out 0x3f, r0 ; 63
400: 0f 90 pop r0
402: 1f 90 pop r1
404: 18 95 reti
00000406 <set_all>:
406: 80 93 90 00 sts 0x0090, r24
40a: 80 93 8f 00 sts 0x008F, r24
40e: 80 93 8e 00 sts 0x008E, r24
412: 80 93 8d 00 sts 0x008D, r24
416: ba de rcall .-652 ; 0x18c <clock_leds>
418: 08 95 ret
0000041a <test_leds>:
41a: cf 93 push r28
41c: c0 e0 ldi r28, 0x00 ; 0
41e: 8c 2f mov r24, r28
420: c8 de rcall .-624 ; 0x1b2 <set_led>
422: 8a e0 ldi r24, 0x0A ; 10
424: 44 de rcall .-888 ; 0xae <delay_ms>
426: cf 5f subi r28, 0xFF ; 255
428: c1 32 cpi r28, 0x21 ; 33
42a: c8 f3 brcs .-14 ; 0x41e <test_leds+0x4>
42c: 8a ea ldi r24, 0xAA ; 170
42e: eb df rcall .-42 ; 0x406 <set_all>
430: 82 e3 ldi r24, 0x32 ; 50
432: 3d de rcall .-902 ; 0xae <delay_ms>
434: 85 e5 ldi r24, 0x55 ; 85
436: e7 df rcall .-50 ; 0x406 <set_all>
438: 85 e5 ldi r24, 0x55 ; 85
43a: e5 df rcall .-54 ; 0x406 <set_all>
43c: 82 e3 ldi r24, 0x32 ; 50
43e: 37 de rcall .-914 ; 0xae <delay_ms>
440: 80 e0 ldi r24, 0x00 ; 0
442: e1 df rcall .-62 ; 0x406 <set_all>
444: 8f ef ldi r24, 0xFF ; 255
446: 33 de rcall .-922 ; 0xae <delay_ms>
448: 8f ef ldi r24, 0xFF ; 255
44a: 31 de rcall .-926 ; 0xae <delay_ms>
44c: cf 91 pop r28
44e: 08 95 ret
00000450 <main>:
450: cf ed ldi r28, 0xDF ; 223
452: d0 e0 ldi r29, 0x00 ; 0
454: de bf out 0x3e, r29 ; 62
456: cd bf out 0x3d, r28 ; 61
458: c4 b7 in r28, 0x34 ; 52
45a: 14 be out 0x34, r1 ; 52
45c: 8e e0 ldi r24, 0x0E ; 14
45e: 81 bd out 0x21, r24 ; 33
460: 6e de rcall .-804 ; 0x13e <ioinit>
462: c0 fd sbrc r28, 0
464: da df rcall .-76 ; 0x41a <test_leds>
466: 8c 2f mov r24, r28
468: 8e 5f subi r24, 0xFE ; 254
46a: a3 de rcall .-698 ; 0x1b2 <set_led>
46c: 78 94 sei
46e: a8 95 wdr
470: 80 91 8b 00 lds r24, 0x008B
474: 90 91 8c 00 lds r25, 0x008C
478: 8f 5f subi r24, 0xFF ; 255
47a: 9f 4f sbci r25, 0xFF ; 255
47c: c1 f7 brne .-16 ; 0x46e <main+0x1e>
47e: f8 94 cli
480: 80 e0 ldi r24, 0x00 ; 0
482: 97 de rcall .-722 ; 0x1b2 <set_led>
484: 96 98 cbi 0x12, 6 ; 18
486: c4 9a sbi 0x18, 4 ; 24
488: 81 b5 in r24, 0x21 ; 33
48a: 88 61 ori r24, 0x18 ; 24
48c: 81 bd out 0x21, r24 ; 33
48e: 11 bc out 0x21, r1 ; 33
490: 85 b7 in r24, 0x35 ; 53
492: 80 67 ori r24, 0x70 ; 112
494: 85 bf out 0x35, r24 ; 53
496: 78 94 sei
498: 88 95 sleep
49a: e9 cf rjmp .-46 ; 0x46e <main+0x1e>
0000049c <spieeprom_read>:
#include <avr/io.h>
#include "eeprom.h"
#include "main.h"
void spieeprom_read(uint16_t addr, uint8_t *buff, uint8_t len) {
49c: ff 92 push r15
49e: 0f 93 push r16
4a0: 1f 93 push r17
4a2: cf 93 push r28
4a4: df 93 push r29
4a6: 08 2f mov r16, r24
4a8: 19 2f mov r17, r25
4aa: d7 2f mov r29, r23
4ac: c6 2f mov r28, r22
4ae: f4 2e mov r15, r20
uint8_t data, i;
SPIEE_CS_PORT &= ~_BV(SPIEE_CS); // pull CS low
4b0: c4 98 cbi 0x18, 4 ; 24
...
NOP; NOP; NOP; NOP;
spi_transfer(SPI_EEPROM_READ); // send READ command
4ba: 83 e0 ldi r24, 0x03 ; 3
4bc: 5b de rcall .-842 ; 0x174 <spi_transfer>
spi_transfer(addr >> 8); // send high addr
4be: 81 2f mov r24, r17
4c0: 99 27 eor r25, r25
4c2: 58 de rcall .-848 ; 0x174 <spi_transfer>
spi_transfer(addr & 0xFF); // send low addr
4c4: 80 2f mov r24, r16
4c6: 56 de rcall .-852 ; 0x174 <spi_transfer>
for (i=0; i<len; i++)
4c8: 00 e0 ldi r16, 0x00 ; 0
4ca: 0f 15 cp r16, r15
4cc: 28 f4 brcc .+10 ; 0x4d8 <spieeprom_read+0x3c>
buff[i] = spi_transfer(0);
4ce: 80 e0 ldi r24, 0x00 ; 0
4d0: 51 de rcall .-862 ; 0x174 <spi_transfer>
4d2: 89 93 st Y+, r24
4d4: 0f 5f subi r16, 0xFF ; 255
4d6: f9 cf rjmp .-14 ; 0x4ca <spieeprom_read+0x2e>
SPIEE_CS_PORT |= _BV(SPIEE_CS); // pull CS high
4d8: c4 9a sbi 0x18, 4 ; 24
4da: df 91 pop r29
4dc: cf 91 pop r28
4de: 1f 91 pop r17
4e0: 0f 91 pop r16
4e2: ff 90 pop r15
4e4: 08 95 ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -