📄 main.lss
字号:
main.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 0000109c 00000000 00000000 00000094 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 00000098 00800060 0000109c 00001130 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .bss 0000000a 008000f8 008000f8 000011c8 2**0
ALLOC
3 .noinit 00000000 00800102 00800102 000011c8 2**0
CONTENTS
4 .eeprom 00000000 00810000 00810000 000011c8 2**0
CONTENTS
5 .stab 00000cfc 00000000 00000000 000011c8 2**2
CONTENTS, READONLY, DEBUGGING
6 .stabstr 00000833 00000000 00000000 00001ec4 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 12 c0 rjmp .+36 ; 0x26
2: 2b c0 rjmp .+86 ; 0x5a
4: 2a c0 rjmp .+84 ; 0x5a
6: 29 c0 rjmp .+82 ; 0x5a
8: 28 c0 rjmp .+80 ; 0x5a
a: 27 c0 rjmp .+78 ; 0x5a
c: 26 c0 rjmp .+76 ; 0x5a
e: 25 c0 rjmp .+74 ; 0x5a
10: 24 c0 rjmp .+72 ; 0x5a
12: 23 c0 rjmp .+70 ; 0x5a
14: 22 c0 rjmp .+68 ; 0x5a
16: 21 c0 rjmp .+66 ; 0x5a
18: 20 c0 rjmp .+64 ; 0x5a
1a: 1f c0 rjmp .+62 ; 0x5a
1c: 1e c0 rjmp .+60 ; 0x5a
1e: 1d c0 rjmp .+58 ; 0x5a
20: 1c c0 rjmp .+56 ; 0x5a
22: 1b c0 rjmp .+54 ; 0x5a
24: 1a c0 rjmp .+52 ; 0x5a
00000026 <__ctors_end>:
26: 11 24 eor r1, r1
28: 1f be out 0x3f, r1 ; 63
2a: cf e5 ldi r28, 0x5F ; 95
2c: d4 e0 ldi r29, 0x04 ; 4
2e: de bf out 0x3e, r29 ; 62
30: cd bf out 0x3d, r28 ; 61
00000032 <__do_copy_data>:
32: 10 e0 ldi r17, 0x00 ; 0
34: a0 e6 ldi r26, 0x60 ; 96
36: b0 e0 ldi r27, 0x00 ; 0
38: ec e9 ldi r30, 0x9C ; 156
3a: f0 e1 ldi r31, 0x10 ; 16
3c: 02 c0 rjmp .+4 ; 0x42
0000003e <.do_copy_data_loop>:
3e: 05 90 lpm r0, Z+
40: 0d 92 st X+, r0
00000042 <.do_copy_data_start>:
42: a8 3f cpi r26, 0xF8 ; 248
44: b1 07 cpc r27, r17
46: d9 f7 brne .-10 ; 0x3e
00000048 <__do_clear_bss>:
48: 11 e0 ldi r17, 0x01 ; 1
4a: a8 ef ldi r26, 0xF8 ; 248
4c: b0 e0 ldi r27, 0x00 ; 0
4e: 01 c0 rjmp .+2 ; 0x52
00000050 <.do_clear_bss_loop>:
50: 1d 92 st X+, r1
00000052 <.do_clear_bss_start>:
52: a2 30 cpi r26, 0x02 ; 2
54: b1 07 cpc r27, r17
56: e1 f7 brne .-8 ; 0x50
58: 8c c1 rjmp .+792 ; 0x372
0000005a <__bad_interrupt>:
5a: d2 cf rjmp .-92 ; 0x0
0000005c <Init_MMC>:
char Write_Command_MMC (char *CMD);
//Routine zur Initialisierung der MMC/SD-Karte (SPI-MODE)
char Init_MMC ()
{
5c: ff 92 push r15
5e: 0f 93 push r16
60: 1f 93 push r17
62: cf 93 push r28
64: df 93 push r29
66: cd b7 in r28, 0x3d ; 61
68: de b7 in r29, 0x3e ; 62
6a: 26 97 sbiw r28, 0x06 ; 6
6c: 0f b6 in r0, 0x3f ; 63
6e: f8 94 cli
70: de bf out 0x3e, r29 ; 62
72: 0f be out 0x3f, r0 ; 63
74: cd bf out 0x3d, r28 ; 61
char tmp = 0;
76: ff 24 eor r15, r15
char Timeout;
//Konfiguration des Ports an der die MMC/SD-Karte angeschlossen wurde
cbi(MMC_Direction_REG,SPI_DI); //Setzen von Pin MMC_DI auf Input
78: bc 98 cbi 0x17, 4 ; 23
sbi(MMC_Direction_REG,SPI_Clock); //Setzen von Pin MMC_Clock auf Output
7a: bd 9a sbi 0x17, 5 ; 23
sbi(MMC_Direction_REG,SPI_DO); //Setzen von Pin MMC_DO auf Output
7c: bb 9a sbi 0x17, 3 ; 23
sbi(MMC_Direction_REG,MMC_Chip_Select); //Setzen von Pin MMC_Chip_Select auf Output
7e: b9 9a sbi 0x17, 1 ; 23
sbi(MMC_Direction_REG,SPI_SS);
80: ba 9a sbi 0x17, 2 ; 23
sbi(MMC_Write,MMC_Chip_Select); //Setzt den Pin MMC_Chip_Select auf High Pegel
82: c1 9a sbi 0x18, 1 ; 24
for(int a=0;a<600;a++){}; //Wartet eine kurze Zeit
84: 87 e5 ldi r24, 0x57 ; 87
86: 92 e0 ldi r25, 0x02 ; 2
88: 49 97 sbiw r24, 0x19 ; 25
8a: 97 ff sbrs r25, 7
8c: fd cf rjmp .-6 ; 0x88
//Aktiviren des SPI - Bus, Clock = Idel High
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0); //Enable SPI, SPI in Master Mode
8e: 81 e5 ldi r24, 0x51 ; 81
90: 8d b9 out 0x0d, r24 ; 13
//Initialisiere MMC/SD-Karte in den SPI-Mode
for (int b = 0;b<0x0f;b++) //Sendet min 74+ Clocks an die MMC/SD-Karte
92: 0e e0 ldi r16, 0x0E ; 14
94: 10 e0 ldi r17, 0x00 ; 0
{
Write_Byte_MMC(0x0f);
96: 8f e0 ldi r24, 0x0F ; 15
98: 78 d0 rcall .+240 ; 0x18a
9a: 01 50 subi r16, 0x01 ; 1
9c: 10 40 sbci r17, 0x00 ; 0
9e: 17 ff sbrs r17, 7
a0: fa cf rjmp .-12 ; 0x96
}
//Sendet Commando CMD0 an MMC/SD-Karte
Timeout = 0;
a2: 10 e0 ldi r17, 0x00 ; 0
char CMD[] = {0x40,0x00,0x00,0x00,0x00,0x95};
a4: 86 e0 ldi r24, 0x06 ; 6
a6: de 01 movw r26, r28
a8: 11 96 adiw r26, 0x01 ; 1
aa: e0 e6 ldi r30, 0x60 ; 96
ac: f0 e0 ldi r31, 0x00 ; 0
ae: 01 90 ld r0, Z+
b0: 0d 92 st X+, r0
b2: 8a 95 dec r24
b4: e1 f7 brne .-8 ; 0xae
while(tmp!=1)
b6: 81 e0 ldi r24, 0x01 ; 1
b8: f8 16 cp r15, r24
ba: 69 f0 breq .+26 ; 0xd6
{
tmp = Write_Command_MMC (CMD);
bc: ce 01 movw r24, r28
be: 01 96 adiw r24, 0x01 ; 1
c0: 2a d0 rcall .+84 ; 0x116
c2: f8 2e mov r15, r24
//printf ("Return Code from MMC/SD Init CMD0 %x\n",tmp);
Timeout++;
c4: 1f 5f subi r17, 0xFF ; 255
if (Timeout > 20)
c6: 15 31 cpi r17, 0x15 ; 21
c8: 18 f0 brcs .+6 ; 0xd0
{
return(1); //Abbruch bei Commando1 (Return Code1)
ca: 81 e0 ldi r24, 0x01 ; 1
cc: 90 e0 ldi r25, 0x00 ; 0
ce: 17 c0 rjmp .+46 ; 0xfe
d0: 81 e0 ldi r24, 0x01 ; 1
d2: f8 16 cp r15, r24
d4: 99 f7 brne .-26 ; 0xbc
}
}
//Sendet Commando CMD1 an MMC/SD-Karte
Timeout = 0;
d6: 10 e0 ldi r17, 0x00 ; 0
CMD[0] = 0x41;//Commando 1
d8: 81 e4 ldi r24, 0x41 ; 65
da: 89 83 std Y+1, r24 ; 0x01
CMD[5] = 0xFF;
dc: 8f ef ldi r24, 0xFF ; 255
de: 8e 83 std Y+6, r24 ; 0x06
while(tmp!=0)
e0: ff 20 and r15, r15
e2: 59 f0 breq .+22 ; 0xfa
{
tmp = Write_Command_MMC (CMD);
e4: ce 01 movw r24, r28
e6: 01 96 adiw r24, 0x01 ; 1
e8: 16 d0 rcall .+44 ; 0x116
//printf ("Return Code from MMC/SD Init CMD1 %x\n",tmp);
Timeout++;
ea: 1f 5f subi r17, 0xFF ; 255
if (Timeout > 10)
ec: 1b 30 cpi r17, 0x0B ; 11
ee: 18 f0 brcs .+6 ; 0xf6
{
return(2); //Abbruch bei Commando2 (Return Code2)
f0: 82 e0 ldi r24, 0x02 ; 2
f2: 90 e0 ldi r25, 0x00 ; 0
f4: 04 c0 rjmp .+8 ; 0xfe
f6: 88 23 and r24, r24
f8: a9 f7 brne .-22 ; 0xe4
}
}
return(0);
fa: 80 e0 ldi r24, 0x00 ; 0
fc: 90 e0 ldi r25, 0x00 ; 0
}
fe: 26 96 adiw r28, 0x06 ; 6
100: 0f b6 in r0, 0x3f ; 63
102: f8 94 cli
104: de bf out 0x3e, r29 ; 62
106: 0f be out 0x3f, r0 ; 63
108: cd bf out 0x3d, r28 ; 61
10a: df 91 pop r29
10c: cf 91 pop r28
10e: 1f 91 pop r17
110: 0f 91 pop r16
112: ff 90 pop r15
114: 08 95 ret
00000116 <Write_Command_MMC>:
//Sendet ein Commando an die MMC/SD-Karte
char Write_Command_MMC (char *CMD)
{
116: df 92 push r13
118: ef 92 push r14
11a: ff 92 push r15
11c: 0f 93 push r16
11e: 1f 93 push r17
120: cf 93 push r28
122: df 93 push r29
124: 8c 01 movw r16, r24
char tmp = 0xff;
126: 8f ef ldi r24, 0xFF ; 255
128: d8 2e mov r13, r24
unsigned int Timeout = 0;
12a: ee 24 eor r14, r14
12c: ff 24 eor r15, r15
//sendet 8 Clock Impulse
sbi(MMC_Write,MMC_Chip_Select);//set MMC_Chip_Select to high (MMC/SD-Karte Inaktiv)
12e: c1 9a sbi 0x18, 1 ; 24
Write_Byte_MMC(0x00);
130: 80 e0 ldi r24, 0x00 ; 0
132: 2b d0 rcall .+86 ; 0x18a
//sendet 6 Byte Commando
cbi(MMC_Write,MMC_Chip_Select);//set MMC_Chip_Select to low (MMC/SD-Karte Aktiv)
134: c1 98 cbi 0x18, 1 ; 24
for (int a = 0;a<0x06;a++) //sendet 6 Byte Commando zur MMC/SD-Karte
136: c5 e0 ldi r28, 0x05 ; 5
138: d0 e0 ldi r29, 0x00 ; 0
{
Write_Byte_MMC(*CMD++);
13a: f8 01 movw r30, r16
13c: 81 91 ld r24, Z+
13e: 8f 01 movw r16, r30
140: 24 d0 rcall .+72 ; 0x18a
142: 21 97 sbiw r28, 0x01 ; 1
144: d7 ff sbrs r29, 7
146: f9 cf rjmp .-14 ; 0x13a
}
while (tmp == 0xff) //Wartet auf ein g黮tige Antwort von der MMC/SD-Karte
148: ff ef ldi r31, 0xFF ; 255
14a: df 16 cp r13, r31
14c: 69 f4 brne .+26 ; 0x168
{
tmp = Read_Byte_MMC();
14e: 16 d0 rcall .+44 ; 0x17c
150: d8 2e mov r13, r24
Timeout++;
152: 08 94 sec
154: e1 1c adc r14, r1
156: f1 1c adc r15, r1
if (Timeout > 400)
158: 81 e9 ldi r24, 0x91 ; 145
15a: e8 16 cp r14, r24
15c: 81 e0 ldi r24, 0x01 ; 1
15e: f8 06 cpc r15, r24
160: 18 f4 brcc .+6 ; 0x168
{
break; //Abbruch da die MMC/SD-Karte nicht Antwortet
162: ef ef ldi r30, 0xFF ; 255
164: de 16 cp r13, r30
166: 99 f3 breq .-26 ; 0x14e
}
}
return(tmp);
168: 8d 2d mov r24, r13
16a: 99 27 eor r25, r25
}
16c: df 91 pop r29
16e: cf 91 pop r28
170: 1f 91 pop r17
172: 0f 91 pop r16
174: ff 90 pop r15
176: ef 90 pop r14
178: df 90 pop r13
17a: 08 95 ret
0000017c <Read_Byte_MMC>:
//Routine zum Empfangen eines Bytes von der MMC-Karte (Soft_SPI)
char Read_Byte_MMC (void)
{
char Byte = 0;
outb(SPDR,0xff);
17c: 8f ef ldi r24, 0xFF ; 255
17e: 8f b9 out 0x0f, r24 ; 15
while(!(SPSR & (1<<SPIF)))
180: 77 9b sbis 0x0e, 7 ; 14
182: fe cf rjmp .-4 ; 0x180
{
}
Byte = inp(SPDR);
184: 8f b1 in r24, 0x0f ; 15
return (Byte);
186: 99 27 eor r25, r25
}
188: 08 95 ret
0000018a <Write_Byte_MMC>:
//Routine zum Senden eines Bytes zur MMC-Karte (Soft_SPI)
void Write_Byte_MMC (char Byte)
{
outb(SPDR,Byte);
18a: 8f b9 out 0x0f, r24 ; 15
while(!(SPSR & (1<<SPIF)))
18c: 77 9b sbis 0x0e, 7 ; 14
18e: fe cf rjmp .-4 ; 0x18c
{
}
}
190: 08 95 ret
00000192 <Read_Block_MMC>:
//Routine zum lesen eines Blocks(512Byte) von der MMC/SD-Karte
char Read_Block_MMC (unsigned long addr,char *Buffer)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -