2695 lines
116 KiB
Plaintext
2695 lines
116 KiB
Plaintext
1 .syntax unified
|
|
2 .cpu cortex-m3
|
|
3 .fpu softvfp
|
|
4 .eabi_attribute 20, 1
|
|
5 .eabi_attribute 21, 1
|
|
6 .eabi_attribute 23, 3
|
|
7 .eabi_attribute 24, 1
|
|
8 .eabi_attribute 25, 1
|
|
9 .eabi_attribute 26, 1
|
|
10 .eabi_attribute 30, 1
|
|
11 .eabi_attribute 34, 1
|
|
12 .eabi_attribute 18, 4
|
|
13 .thumb
|
|
14 .file "mmc.c"
|
|
15 .text
|
|
16 .Ltext0:
|
|
17 .cfi_sections .debug_frame
|
|
18 .section .text.xchg_spi,"ax",%progbits
|
|
19 .align 2
|
|
20 .thumb
|
|
21 .thumb_func
|
|
23 xchg_spi:
|
|
24 .LFB33:
|
|
25 .file 1 "./lib/fatfs/mmc.c"
|
|
1:./lib/fatfs/mmc.c **** /*------------------------------------------------------------------------/
|
|
2:./lib/fatfs/mmc.c **** / MMCv3/SDv1/SDv2 (in SPI mode) control module
|
|
3:./lib/fatfs/mmc.c **** /-------------------------------------------------------------------------/
|
|
4:./lib/fatfs/mmc.c **** /
|
|
5:./lib/fatfs/mmc.c **** / Copyright (C) 2013, ChaN, all right reserved.
|
|
6:./lib/fatfs/mmc.c **** /
|
|
7:./lib/fatfs/mmc.c **** / * This software is a free software and there is NO WARRANTY.
|
|
8:./lib/fatfs/mmc.c **** / * No restriction on use. You can use, modify and redistribute it for
|
|
9:./lib/fatfs/mmc.c **** / personal, non-profit or commercial products UNDER YOUR RESPONSIBILITY.
|
|
10:./lib/fatfs/mmc.c **** / * Redistributions of source code must retain the above copyright notice.
|
|
11:./lib/fatfs/mmc.c **** /
|
|
12:./lib/fatfs/mmc.c **** /-------------------------------------------------------------------------*/
|
|
13:./lib/fatfs/mmc.c ****
|
|
14:./lib/fatfs/mmc.c ****
|
|
15:./lib/fatfs/mmc.c **** /*
|
|
16:./lib/fatfs/mmc.c **** * This file was modified from a sample available from the FatFs
|
|
17:./lib/fatfs/mmc.c **** * web site. It was modified to work with a Olimex STM32-P103
|
|
18:./lib/fatfs/mmc.c **** * evaluation board.
|
|
19:./lib/fatfs/mmc.c **** *
|
|
20:./lib/fatfs/mmc.c **** */
|
|
21:./lib/fatfs/mmc.c **** #include "diskio.h"
|
|
22:./lib/fatfs/mmc.c **** #include "stm32f10x.h" /* STM32 registers */
|
|
23:./lib/fatfs/mmc.c **** #include "stm32f10x_conf.h" /* STM32 peripheral drivers */
|
|
24:./lib/fatfs/mmc.c **** #include "boot.h"
|
|
25:./lib/fatfs/mmc.c ****
|
|
26:./lib/fatfs/mmc.c ****
|
|
27:./lib/fatfs/mmc.c ****
|
|
28:./lib/fatfs/mmc.c **** /*--------------------------------------------------------------------------
|
|
29:./lib/fatfs/mmc.c ****
|
|
30:./lib/fatfs/mmc.c **** Module Private Functions
|
|
31:./lib/fatfs/mmc.c ****
|
|
32:./lib/fatfs/mmc.c **** ---------------------------------------------------------------------------*/
|
|
33:./lib/fatfs/mmc.c ****
|
|
34:./lib/fatfs/mmc.c **** /* Definitions for MMC/SDC command */
|
|
35:./lib/fatfs/mmc.c **** #define CMD0 (0) /* GO_IDLE_STATE */
|
|
36:./lib/fatfs/mmc.c **** #define CMD1 (1) /* SEND_OP_COND */
|
|
37:./lib/fatfs/mmc.c **** #define ACMD41 (41|0x80) /* SEND_OP_COND (SDC) */
|
|
38:./lib/fatfs/mmc.c **** #define CMD8 (8) /* SEND_IF_COND */
|
|
39:./lib/fatfs/mmc.c **** #define CMD9 (9) /* SEND_CSD */
|
|
40:./lib/fatfs/mmc.c **** #define CMD10 (10) /* SEND_CID */
|
|
41:./lib/fatfs/mmc.c **** #define CMD12 (12) /* STOP_TRANSMISSION */
|
|
42:./lib/fatfs/mmc.c **** #define ACMD13 (13|0x80) /* SD_STATUS (SDC) */
|
|
43:./lib/fatfs/mmc.c **** #define CMD16 (16) /* SET_BLOCKLEN */
|
|
44:./lib/fatfs/mmc.c **** #define CMD17 (17) /* READ_SINGLE_BLOCK */
|
|
45:./lib/fatfs/mmc.c **** #define CMD18 (18) /* READ_MULTIPLE_BLOCK */
|
|
46:./lib/fatfs/mmc.c **** #define CMD23 (23) /* SET_BLOCK_COUNT */
|
|
47:./lib/fatfs/mmc.c **** #define ACMD23 (23|0x80) /* SET_WR_BLK_ERASE_COUNT (SDC) */
|
|
48:./lib/fatfs/mmc.c **** #define CMD24 (24) /* WRITE_BLOCK */
|
|
49:./lib/fatfs/mmc.c **** #define CMD25 (25) /* WRITE_MULTIPLE_BLOCK */
|
|
50:./lib/fatfs/mmc.c **** #define CMD41 (41) /* SEND_OP_COND (ACMD) */
|
|
51:./lib/fatfs/mmc.c **** #define CMD55 (55) /* APP_CMD */
|
|
52:./lib/fatfs/mmc.c **** #define CMD58 (58) /* READ_OCR */
|
|
53:./lib/fatfs/mmc.c ****
|
|
54:./lib/fatfs/mmc.c ****
|
|
55:./lib/fatfs/mmc.c **** /* Control signals (Platform dependent) */
|
|
56:./lib/fatfs/mmc.c **** #define CS_LOW() GPIO_ResetBits(GPIOB, GPIO_Pin_12) /* MMC CS = L */
|
|
57:./lib/fatfs/mmc.c **** #define CS_HIGH() GPIO_SetBits(GPIOB, GPIO_Pin_12) /* MMC CS = H */
|
|
58:./lib/fatfs/mmc.c ****
|
|
59:./lib/fatfs/mmc.c ****
|
|
60:./lib/fatfs/mmc.c ****
|
|
61:./lib/fatfs/mmc.c **** #define FCLK_SLOW() /* Set slow clock (100k-400k) */
|
|
62:./lib/fatfs/mmc.c **** #define FCLK_FAST() set_max_speed() /* Set fast clock (depends on the CSD) */
|
|
63:./lib/fatfs/mmc.c ****
|
|
64:./lib/fatfs/mmc.c **** static volatile
|
|
65:./lib/fatfs/mmc.c **** DSTATUS Stat = STA_NOINIT; /* Disk status */
|
|
66:./lib/fatfs/mmc.c ****
|
|
67:./lib/fatfs/mmc.c **** static
|
|
68:./lib/fatfs/mmc.c **** UINT CardType;
|
|
69:./lib/fatfs/mmc.c ****
|
|
70:./lib/fatfs/mmc.c ****
|
|
71:./lib/fatfs/mmc.c **** /*-----------------------------------------------------------------------*/
|
|
72:./lib/fatfs/mmc.c **** /* Send 80 or so clock transitions with CS and DI held high. This is */
|
|
73:./lib/fatfs/mmc.c **** /* required after card power up to get it into SPI mode */
|
|
74:./lib/fatfs/mmc.c **** /*-----------------------------------------------------------------------*/
|
|
75:./lib/fatfs/mmc.c **** static
|
|
76:./lib/fatfs/mmc.c **** void send_initial_clock_train(void)
|
|
77:./lib/fatfs/mmc.c **** {
|
|
78:./lib/fatfs/mmc.c **** GPIO_InitTypeDef GPIO_InitStructure;
|
|
79:./lib/fatfs/mmc.c **** unsigned int i;
|
|
80:./lib/fatfs/mmc.c ****
|
|
81:./lib/fatfs/mmc.c **** /* Ensure CS is held high. */
|
|
82:./lib/fatfs/mmc.c **** CS_HIGH();
|
|
83:./lib/fatfs/mmc.c ****
|
|
84:./lib/fatfs/mmc.c **** /* Switch the SSI TX line to a GPIO and drive it high too. */
|
|
85:./lib/fatfs/mmc.c **** GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
|
|
86:./lib/fatfs/mmc.c **** GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
|
87:./lib/fatfs/mmc.c **** GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
|
|
88:./lib/fatfs/mmc.c **** GPIO_Init(GPIOB, &GPIO_InitStructure);
|
|
89:./lib/fatfs/mmc.c **** GPIO_SetBits(GPIOB, GPIO_Pin_15);
|
|
90:./lib/fatfs/mmc.c ****
|
|
91:./lib/fatfs/mmc.c **** /* Send 10 bytes over the SSI. This causes the clock to wiggle the */
|
|
92:./lib/fatfs/mmc.c **** /* required number of times. */
|
|
93:./lib/fatfs/mmc.c **** for(i = 0 ; i < 10 ; i++)
|
|
94:./lib/fatfs/mmc.c **** {
|
|
95:./lib/fatfs/mmc.c **** /* Loop while DR register in not empty */
|
|
96:./lib/fatfs/mmc.c **** while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET) { ; }
|
|
97:./lib/fatfs/mmc.c ****
|
|
98:./lib/fatfs/mmc.c **** /* Send byte through the SPI peripheral */
|
|
99:./lib/fatfs/mmc.c **** SPI_I2S_SendData(SPI2, 0xff);
|
|
100:./lib/fatfs/mmc.c ****
|
|
101:./lib/fatfs/mmc.c **** /* Wait to receive a byte */
|
|
102:./lib/fatfs/mmc.c **** while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET) { ; }
|
|
103:./lib/fatfs/mmc.c **** }
|
|
104:./lib/fatfs/mmc.c ****
|
|
105:./lib/fatfs/mmc.c **** /* Revert to hardware control of the SSI TX line. */
|
|
106:./lib/fatfs/mmc.c **** GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
|
|
107:./lib/fatfs/mmc.c **** GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
|
108:./lib/fatfs/mmc.c **** GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
|
|
109:./lib/fatfs/mmc.c **** GPIO_Init(GPIOB, &GPIO_InitStructure);
|
|
110:./lib/fatfs/mmc.c **** }
|
|
111:./lib/fatfs/mmc.c ****
|
|
112:./lib/fatfs/mmc.c ****
|
|
113:./lib/fatfs/mmc.c **** /*-----------------------------------------------------------------------*/
|
|
114:./lib/fatfs/mmc.c **** /* Power Control (Platform dependent) */
|
|
115:./lib/fatfs/mmc.c **** /*-----------------------------------------------------------------------*/
|
|
116:./lib/fatfs/mmc.c **** /* When the target system does not support socket power control, there */
|
|
117:./lib/fatfs/mmc.c **** /* is nothing to do in these functions. */
|
|
118:./lib/fatfs/mmc.c ****
|
|
119:./lib/fatfs/mmc.c **** static
|
|
120:./lib/fatfs/mmc.c **** void power_on (void)
|
|
121:./lib/fatfs/mmc.c **** {
|
|
122:./lib/fatfs/mmc.c **** SPI_InitTypeDef SPI_InitStructure;
|
|
123:./lib/fatfs/mmc.c **** GPIO_InitTypeDef GPIO_InitStructure;
|
|
124:./lib/fatfs/mmc.c ****
|
|
125:./lib/fatfs/mmc.c **** /*
|
|
126:./lib/fatfs/mmc.c **** * This doesn't really turn the power on, but initializes the
|
|
127:./lib/fatfs/mmc.c **** * SSI port and pins needed to talk to the card.
|
|
128:./lib/fatfs/mmc.c **** */
|
|
129:./lib/fatfs/mmc.c ****
|
|
130:./lib/fatfs/mmc.c **** /* Enable GPIO clock for CS */
|
|
131:./lib/fatfs/mmc.c **** RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
|
|
132:./lib/fatfs/mmc.c **** /* Enable SPI clock, SPI2: APB1 */
|
|
133:./lib/fatfs/mmc.c **** RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
|
|
134:./lib/fatfs/mmc.c **** /* Configure I/O for Flash Chip select (PB12) */
|
|
135:./lib/fatfs/mmc.c **** GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
|
|
136:./lib/fatfs/mmc.c **** GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
|
|
137:./lib/fatfs/mmc.c **** GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
|
138:./lib/fatfs/mmc.c **** GPIO_Init(GPIOB, &GPIO_InitStructure);
|
|
139:./lib/fatfs/mmc.c ****
|
|
140:./lib/fatfs/mmc.c **** /* De-select the Card: Chip Select high */
|
|
141:./lib/fatfs/mmc.c **** GPIO_SetBits(GPIOB, GPIO_Pin_12);
|
|
142:./lib/fatfs/mmc.c ****
|
|
143:./lib/fatfs/mmc.c **** /* Configure SPI pins: SCK (PB13) and MOSI (PB15) with default alternate function (not re-mapped)
|
|
144:./lib/fatfs/mmc.c **** GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15;
|
|
145:./lib/fatfs/mmc.c **** GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
|
146:./lib/fatfs/mmc.c **** GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
|
|
147:./lib/fatfs/mmc.c **** GPIO_Init(GPIOB, &GPIO_InitStructure);
|
|
148:./lib/fatfs/mmc.c **** /* Configure MISO (PB14) as Input with internal pull-up */
|
|
149:./lib/fatfs/mmc.c **** GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
|
|
150:./lib/fatfs/mmc.c **** GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
|
|
151:./lib/fatfs/mmc.c **** GPIO_Init(GPIOB, &GPIO_InitStructure);
|
|
152:./lib/fatfs/mmc.c ****
|
|
153:./lib/fatfs/mmc.c **** /* SPI configuration */
|
|
154:./lib/fatfs/mmc.c **** SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
|
|
155:./lib/fatfs/mmc.c **** SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
|
|
156:./lib/fatfs/mmc.c **** SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
|
|
157:./lib/fatfs/mmc.c **** SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
|
|
158:./lib/fatfs/mmc.c **** SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
|
|
159:./lib/fatfs/mmc.c **** SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
|
|
160:./lib/fatfs/mmc.c **** SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; // 72000kHz/256=281kHz < 400
|
|
161:./lib/fatfs/mmc.c **** SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
|
|
162:./lib/fatfs/mmc.c **** SPI_InitStructure.SPI_CRCPolynomial = 7;
|
|
163:./lib/fatfs/mmc.c ****
|
|
164:./lib/fatfs/mmc.c **** SPI_Init(SPI2, &SPI_InitStructure);
|
|
165:./lib/fatfs/mmc.c **** SPI_CalculateCRC(SPI2, DISABLE);
|
|
166:./lib/fatfs/mmc.c **** SPI_Cmd(SPI2, ENABLE);
|
|
167:./lib/fatfs/mmc.c ****
|
|
168:./lib/fatfs/mmc.c **** /* Set DI and CS high and apply more than 74 pulses to SCLK for the card */
|
|
169:./lib/fatfs/mmc.c **** /* to be able to accept a native command. */
|
|
170:./lib/fatfs/mmc.c **** send_initial_clock_train();
|
|
171:./lib/fatfs/mmc.c ****
|
|
172:./lib/fatfs/mmc.c **** }
|
|
173:./lib/fatfs/mmc.c **** // set the SSI speed to the max setting
|
|
174:./lib/fatfs/mmc.c **** static
|
|
175:./lib/fatfs/mmc.c **** void set_max_speed(void)
|
|
176:./lib/fatfs/mmc.c **** {
|
|
177:./lib/fatfs/mmc.c **** SPI_InitTypeDef SPI_InitStructure;
|
|
178:./lib/fatfs/mmc.c ****
|
|
179:./lib/fatfs/mmc.c **** /* Disable the SPI system */
|
|
180:./lib/fatfs/mmc.c **** SPI_Cmd(SPI2, DISABLE);
|
|
181:./lib/fatfs/mmc.c ****
|
|
182:./lib/fatfs/mmc.c **** /* MMC/SDC can work at the clock frequency up to 20/25MHz so pick a speed close to
|
|
183:./lib/fatfs/mmc.c **** * this but not higher
|
|
184:./lib/fatfs/mmc.c **** */
|
|
185:./lib/fatfs/mmc.c **** SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
|
|
186:./lib/fatfs/mmc.c **** SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
|
|
187:./lib/fatfs/mmc.c **** SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
|
|
188:./lib/fatfs/mmc.c **** SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
|
|
189:./lib/fatfs/mmc.c **** SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
|
|
190:./lib/fatfs/mmc.c **** SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
|
|
191:./lib/fatfs/mmc.c **** SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4; // 72MHz/4=18MHz < 20MHz
|
|
192:./lib/fatfs/mmc.c **** SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
|
|
193:./lib/fatfs/mmc.c **** SPI_InitStructure.SPI_CRCPolynomial = 7;
|
|
194:./lib/fatfs/mmc.c **** SPI_Init(SPI2, &SPI_InitStructure);
|
|
195:./lib/fatfs/mmc.c **** SPI_CalculateCRC(SPI2, DISABLE);
|
|
196:./lib/fatfs/mmc.c ****
|
|
197:./lib/fatfs/mmc.c **** /* Enable the SPI system */
|
|
198:./lib/fatfs/mmc.c **** SPI_Cmd(SPI2, ENABLE);
|
|
199:./lib/fatfs/mmc.c **** }
|
|
200:./lib/fatfs/mmc.c ****
|
|
201:./lib/fatfs/mmc.c **** static
|
|
202:./lib/fatfs/mmc.c **** void power_off (void)
|
|
203:./lib/fatfs/mmc.c **** {
|
|
204:./lib/fatfs/mmc.c **** Stat |= STA_NOINIT; /* Force uninitialized */
|
|
205:./lib/fatfs/mmc.c **** }
|
|
206:./lib/fatfs/mmc.c ****
|
|
207:./lib/fatfs/mmc.c ****
|
|
208:./lib/fatfs/mmc.c **** /*-----------------------------------------------------------------------*/
|
|
209:./lib/fatfs/mmc.c **** /* Transmit/Receive data to/from MMC via SPI (Platform dependent) */
|
|
210:./lib/fatfs/mmc.c **** /*-----------------------------------------------------------------------*/
|
|
211:./lib/fatfs/mmc.c ****
|
|
212:./lib/fatfs/mmc.c **** static
|
|
213:./lib/fatfs/mmc.c **** BYTE xchg_spi (BYTE dat)
|
|
214:./lib/fatfs/mmc.c **** {
|
|
26 .loc 1 214 0
|
|
27 .cfi_startproc
|
|
28 @ args = 0, pretend = 0, frame = 0
|
|
29 @ frame_needed = 0, uses_anonymous_args = 0
|
|
30 .LVL0:
|
|
31 0000 38B5 push {r3, r4, r5, lr}
|
|
32 .cfi_def_cfa_offset 16
|
|
33 .cfi_offset 3, -16
|
|
34 .cfi_offset 4, -12
|
|
35 .cfi_offset 5, -8
|
|
36 .cfi_offset 14, -4
|
|
215:./lib/fatfs/mmc.c **** /* Send byte through the SPI peripheral */
|
|
216:./lib/fatfs/mmc.c **** SPI_I2S_SendData(SPI2, dat);
|
|
37 .loc 1 216 0
|
|
38 0002 0146 mov r1, r0
|
|
39 0004 0748 ldr r0, .L5
|
|
40 .LVL1:
|
|
41 0006 FFF7FEFF bl SPI_I2S_SendData
|
|
42 .LVL2:
|
|
217:./lib/fatfs/mmc.c ****
|
|
218:./lib/fatfs/mmc.c **** /* Wait to receive a byte */
|
|
219:./lib/fatfs/mmc.c **** while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET) { ; }
|
|
43 .loc 1 219 0
|
|
44 000a 064D ldr r5, .L5
|
|
45 000c 0124 movs r4, #1
|
|
46 .L2:
|
|
47 .loc 1 219 0 is_stmt 0 discriminator 1
|
|
48 000e 2846 mov r0, r5
|
|
49 0010 2146 mov r1, r4
|
|
50 0012 FFF7FEFF bl SPI_I2S_GetFlagStatus
|
|
51 .LVL3:
|
|
52 0016 0028 cmp r0, #0
|
|
53 0018 F9D0 beq .L2
|
|
220:./lib/fatfs/mmc.c ****
|
|
221:./lib/fatfs/mmc.c **** /* Return the byte read from the SPI bus */
|
|
222:./lib/fatfs/mmc.c **** return (BYTE)SPI_I2S_ReceiveData(SPI2);
|
|
54 .loc 1 222 0 is_stmt 1
|
|
55 001a 0248 ldr r0, .L5
|
|
56 001c FFF7FEFF bl SPI_I2S_ReceiveData
|
|
57 .LVL4:
|
|
223:./lib/fatfs/mmc.c **** }
|
|
58 .loc 1 223 0
|
|
59 0020 C0B2 uxtb r0, r0
|
|
60 0022 38BD pop {r3, r4, r5, pc}
|
|
61 .L6:
|
|
62 .align 2
|
|
63 .L5:
|
|
64 0024 00380040 .word 1073756160
|
|
65 .cfi_endproc
|
|
66 .LFE33:
|
|
68 .section .text.wait_ready,"ax",%progbits
|
|
69 .align 2
|
|
70 .thumb
|
|
71 .thumb_func
|
|
73 wait_ready:
|
|
74 .LFB35:
|
|
224:./lib/fatfs/mmc.c ****
|
|
225:./lib/fatfs/mmc.c **** static
|
|
226:./lib/fatfs/mmc.c **** void rcvr_spi_m (BYTE *dst)
|
|
227:./lib/fatfs/mmc.c **** {
|
|
228:./lib/fatfs/mmc.c **** *dst = xchg_spi(0xFF);
|
|
229:./lib/fatfs/mmc.c **** }
|
|
230:./lib/fatfs/mmc.c ****
|
|
231:./lib/fatfs/mmc.c ****
|
|
232:./lib/fatfs/mmc.c **** /*-----------------------------------------------------------------------*/
|
|
233:./lib/fatfs/mmc.c **** /* Wait for card ready */
|
|
234:./lib/fatfs/mmc.c **** /*-----------------------------------------------------------------------*/
|
|
235:./lib/fatfs/mmc.c ****
|
|
236:./lib/fatfs/mmc.c **** static
|
|
237:./lib/fatfs/mmc.c **** int wait_ready (void)
|
|
238:./lib/fatfs/mmc.c **** {
|
|
75 .loc 1 238 0
|
|
76 .cfi_startproc
|
|
77 @ args = 0, pretend = 0, frame = 0
|
|
78 @ frame_needed = 0, uses_anonymous_args = 0
|
|
79 0000 70B5 push {r4, r5, r6, lr}
|
|
80 .cfi_def_cfa_offset 16
|
|
81 .cfi_offset 4, -16
|
|
82 .cfi_offset 5, -12
|
|
83 .cfi_offset 6, -8
|
|
84 .cfi_offset 14, -4
|
|
239:./lib/fatfs/mmc.c **** BYTE d;
|
|
240:./lib/fatfs/mmc.c **** ULONG timeOutTime;
|
|
241:./lib/fatfs/mmc.c ****
|
|
242:./lib/fatfs/mmc.c **** /* set timeout for 500 ms from now */
|
|
243:./lib/fatfs/mmc.c **** timeOutTime = TimerGet() + 500;
|
|
85 .loc 1 243 0
|
|
86 0002 FFF7FEFF bl TimerGet
|
|
87 .LVL5:
|
|
88 0006 00F5FA76 add r6, r0, #500
|
|
89 .LVL6:
|
|
244:./lib/fatfs/mmc.c ****
|
|
245:./lib/fatfs/mmc.c **** do {
|
|
246:./lib/fatfs/mmc.c **** d = xchg_spi(0xFF);
|
|
90 .loc 1 246 0
|
|
91 000a FF25 movs r5, #255
|
|
92 .L9:
|
|
93 .loc 1 246 0 is_stmt 0 discriminator 2
|
|
94 000c 2846 mov r0, r5
|
|
95 000e FFF7FEFF bl xchg_spi
|
|
96 .LVL7:
|
|
97 0012 0446 mov r4, r0
|
|
98 .LVL8:
|
|
247:./lib/fatfs/mmc.c **** } while ((d != 0xFF) && (TimerGet() < timeOutTime));
|
|
99 .loc 1 247 0 is_stmt 1 discriminator 2
|
|
100 0014 FF28 cmp r0, #255
|
|
101 0016 03D0 beq .L8
|
|
102 .loc 1 247 0 is_stmt 0 discriminator 1
|
|
103 0018 FFF7FEFF bl TimerGet
|
|
104 .LVL9:
|
|
105 001c 8642 cmp r6, r0
|
|
106 001e F5D8 bhi .L9
|
|
107 .L8:
|
|
248:./lib/fatfs/mmc.c ****
|
|
249:./lib/fatfs/mmc.c **** return (d == 0xFF) ? 1 : 0;
|
|
250:./lib/fatfs/mmc.c **** }
|
|
108 .loc 1 250 0 is_stmt 1
|
|
109 0020 FF2C cmp r4, #255
|
|
110 0022 14BF ite ne
|
|
111 0024 0020 movne r0, #0
|
|
112 0026 0120 moveq r0, #1
|
|
113 0028 70BD pop {r4, r5, r6, pc}
|
|
114 .cfi_endproc
|
|
115 .LFE35:
|
|
117 002a 00BF .section .text.deselect,"ax",%progbits
|
|
118 .align 2
|
|
119 .thumb
|
|
120 .thumb_func
|
|
122 deselect:
|
|
123 .LFB36:
|
|
251:./lib/fatfs/mmc.c ****
|
|
252:./lib/fatfs/mmc.c ****
|
|
253:./lib/fatfs/mmc.c **** /*-----------------------------------------------------------------------*/
|
|
254:./lib/fatfs/mmc.c **** /* Deselect the card and release SPI bus */
|
|
255:./lib/fatfs/mmc.c **** /*-----------------------------------------------------------------------*/
|
|
256:./lib/fatfs/mmc.c ****
|
|
257:./lib/fatfs/mmc.c **** static
|
|
258:./lib/fatfs/mmc.c **** void deselect (void)
|
|
259:./lib/fatfs/mmc.c **** {
|
|
124 .loc 1 259 0
|
|
125 .cfi_startproc
|
|
126 @ args = 0, pretend = 0, frame = 0
|
|
127 @ frame_needed = 0, uses_anonymous_args = 0
|
|
128 0000 08B5 push {r3, lr}
|
|
129 .cfi_def_cfa_offset 8
|
|
130 .cfi_offset 3, -8
|
|
131 .cfi_offset 14, -4
|
|
260:./lib/fatfs/mmc.c **** CS_HIGH();
|
|
132 .loc 1 260 0
|
|
133 0002 0448 ldr r0, .L14
|
|
134 0004 4FF48051 mov r1, #4096
|
|
135 0008 FFF7FEFF bl GPIO_SetBits
|
|
136 .LVL10:
|
|
261:./lib/fatfs/mmc.c **** xchg_spi(0xFF); /* Dummy clock (force DO hi-z for multiple slave SPI) */
|
|
137 .loc 1 261 0
|
|
138 000c FF20 movs r0, #255
|
|
139 000e FFF7FEFF bl xchg_spi
|
|
140 .LVL11:
|
|
141 0012 08BD pop {r3, pc}
|
|
142 .L15:
|
|
143 .align 2
|
|
144 .L14:
|
|
145 0014 000C0140 .word 1073810432
|
|
146 .cfi_endproc
|
|
147 .LFE36:
|
|
149 .section .text.select,"ax",%progbits
|
|
150 .align 2
|
|
151 .thumb
|
|
152 .thumb_func
|
|
154 select:
|
|
155 .LFB37:
|
|
262:./lib/fatfs/mmc.c **** }
|
|
263:./lib/fatfs/mmc.c ****
|
|
264:./lib/fatfs/mmc.c ****
|
|
265:./lib/fatfs/mmc.c ****
|
|
266:./lib/fatfs/mmc.c **** /*-----------------------------------------------------------------------*/
|
|
267:./lib/fatfs/mmc.c **** /* Select the card and wait ready */
|
|
268:./lib/fatfs/mmc.c **** /*-----------------------------------------------------------------------*/
|
|
269:./lib/fatfs/mmc.c ****
|
|
270:./lib/fatfs/mmc.c **** static
|
|
271:./lib/fatfs/mmc.c **** int select (void) /* 1:Successful, 0:Timeout */
|
|
272:./lib/fatfs/mmc.c **** {
|
|
156 .loc 1 272 0
|
|
157 .cfi_startproc
|
|
158 @ args = 0, pretend = 0, frame = 0
|
|
159 @ frame_needed = 0, uses_anonymous_args = 0
|
|
160 0000 10B5 push {r4, lr}
|
|
161 .cfi_def_cfa_offset 8
|
|
162 .cfi_offset 4, -8
|
|
163 .cfi_offset 14, -4
|
|
273:./lib/fatfs/mmc.c **** CS_LOW();
|
|
164 .loc 1 273 0
|
|
165 0002 0948 ldr r0, .L20
|
|
166 0004 4FF48051 mov r1, #4096
|
|
167 0008 FFF7FEFF bl GPIO_ResetBits
|
|
168 .LVL12:
|
|
274:./lib/fatfs/mmc.c **** xchg_spi(0xFF); /* Dummy clock (force DO enabled) */
|
|
169 .loc 1 274 0
|
|
170 000c FF20 movs r0, #255
|
|
171 000e FFF7FEFF bl xchg_spi
|
|
172 .LVL13:
|
|
275:./lib/fatfs/mmc.c ****
|
|
276:./lib/fatfs/mmc.c **** if (wait_ready()) return 1; /* OK */
|
|
173 .loc 1 276 0
|
|
174 0012 FFF7FEFF bl wait_ready
|
|
175 .LVL14:
|
|
176 0016 18B9 cbnz r0, .L18
|
|
177 0018 0446 mov r4, r0
|
|
277:./lib/fatfs/mmc.c **** deselect();
|
|
178 .loc 1 277 0
|
|
179 001a FFF7FEFF bl deselect
|
|
180 .LVL15:
|
|
278:./lib/fatfs/mmc.c **** return 0; /* Timeout */
|
|
181 .loc 1 278 0
|
|
182 001e 00E0 b .L17
|
|
183 .L18:
|
|
276:./lib/fatfs/mmc.c **** deselect();
|
|
184 .loc 1 276 0
|
|
185 0020 0124 movs r4, #1
|
|
186 .L17:
|
|
279:./lib/fatfs/mmc.c **** }
|
|
187 .loc 1 279 0
|
|
188 0022 2046 mov r0, r4
|
|
189 0024 10BD pop {r4, pc}
|
|
190 .L21:
|
|
191 0026 00BF .align 2
|
|
192 .L20:
|
|
193 0028 000C0140 .word 1073810432
|
|
194 .cfi_endproc
|
|
195 .LFE37:
|
|
197 .section .text.send_cmd,"ax",%progbits
|
|
198 .align 2
|
|
199 .thumb
|
|
200 .thumb_func
|
|
202 send_cmd:
|
|
203 .LFB40:
|
|
280:./lib/fatfs/mmc.c ****
|
|
281:./lib/fatfs/mmc.c ****
|
|
282:./lib/fatfs/mmc.c ****
|
|
283:./lib/fatfs/mmc.c **** /*-----------------------------------------------------------------------*/
|
|
284:./lib/fatfs/mmc.c **** /* Receive a data packet from MMC */
|
|
285:./lib/fatfs/mmc.c **** /*-----------------------------------------------------------------------*/
|
|
286:./lib/fatfs/mmc.c ****
|
|
287:./lib/fatfs/mmc.c **** static
|
|
288:./lib/fatfs/mmc.c **** int rcvr_datablock ( /* 1:OK, 0:Failed */
|
|
289:./lib/fatfs/mmc.c **** BYTE *buff, /* Data buffer to store received data */
|
|
290:./lib/fatfs/mmc.c **** UINT btr /* Byte count (must be multiple of 4) */
|
|
291:./lib/fatfs/mmc.c **** )
|
|
292:./lib/fatfs/mmc.c **** {
|
|
293:./lib/fatfs/mmc.c **** BYTE token;
|
|
294:./lib/fatfs/mmc.c **** ULONG timeOutTime;
|
|
295:./lib/fatfs/mmc.c ****
|
|
296:./lib/fatfs/mmc.c **** /* set timeout for 100 ms from now */
|
|
297:./lib/fatfs/mmc.c **** timeOutTime = TimerGet() + 100;
|
|
298:./lib/fatfs/mmc.c ****
|
|
299:./lib/fatfs/mmc.c **** do { /* Wait for data packet in timeout of 100ms */
|
|
300:./lib/fatfs/mmc.c **** token = xchg_spi(0xFF);
|
|
301:./lib/fatfs/mmc.c **** } while ((token == 0xFF) && (TimerGet() < timeOutTime));
|
|
302:./lib/fatfs/mmc.c ****
|
|
303:./lib/fatfs/mmc.c **** if(token != 0xFE) return 0; /* If not valid data token, retutn with error */
|
|
304:./lib/fatfs/mmc.c ****
|
|
305:./lib/fatfs/mmc.c **** do { /* Receive the data block into buffer */
|
|
306:./lib/fatfs/mmc.c **** rcvr_spi_m(buff++);
|
|
307:./lib/fatfs/mmc.c **** rcvr_spi_m(buff++);
|
|
308:./lib/fatfs/mmc.c **** } while (btr -= 2);
|
|
309:./lib/fatfs/mmc.c **** xchg_spi(0xFF); /* Discard CRC */
|
|
310:./lib/fatfs/mmc.c **** xchg_spi(0xFF);
|
|
311:./lib/fatfs/mmc.c ****
|
|
312:./lib/fatfs/mmc.c **** return 1; /* Return with success */
|
|
313:./lib/fatfs/mmc.c **** }
|
|
314:./lib/fatfs/mmc.c ****
|
|
315:./lib/fatfs/mmc.c ****
|
|
316:./lib/fatfs/mmc.c ****
|
|
317:./lib/fatfs/mmc.c **** /*-----------------------------------------------------------------------*/
|
|
318:./lib/fatfs/mmc.c **** /* Send a data packet to MMC */
|
|
319:./lib/fatfs/mmc.c **** /*-----------------------------------------------------------------------*/
|
|
320:./lib/fatfs/mmc.c ****
|
|
321:./lib/fatfs/mmc.c **** #if _USE_WRITE
|
|
322:./lib/fatfs/mmc.c **** static
|
|
323:./lib/fatfs/mmc.c **** int xmit_datablock ( /* 1:OK, 0:Failed */
|
|
324:./lib/fatfs/mmc.c **** const BYTE *buff, /* 512 byte data block to be transmitted */
|
|
325:./lib/fatfs/mmc.c **** BYTE token /* Data token */
|
|
326:./lib/fatfs/mmc.c **** )
|
|
327:./lib/fatfs/mmc.c **** {
|
|
328:./lib/fatfs/mmc.c **** BYTE resp;
|
|
329:./lib/fatfs/mmc.c **** UINT wc;
|
|
330:./lib/fatfs/mmc.c ****
|
|
331:./lib/fatfs/mmc.c ****
|
|
332:./lib/fatfs/mmc.c **** if (!wait_ready()) return 0;
|
|
333:./lib/fatfs/mmc.c ****
|
|
334:./lib/fatfs/mmc.c **** xchg_spi(token); /* Xmit a token */
|
|
335:./lib/fatfs/mmc.c **** if (token != 0xFD) { /* Not StopTran token */
|
|
336:./lib/fatfs/mmc.c **** wc = 512;
|
|
337:./lib/fatfs/mmc.c **** do { /* Xmit the 512 byte data block to MMC */
|
|
338:./lib/fatfs/mmc.c **** xchg_spi(*buff++);
|
|
339:./lib/fatfs/mmc.c **** xchg_spi(*buff++);
|
|
340:./lib/fatfs/mmc.c **** } while (wc -= 2);
|
|
341:./lib/fatfs/mmc.c **** xchg_spi(0xFF); /* CRC (Dummy) */
|
|
342:./lib/fatfs/mmc.c **** xchg_spi(0xFF);
|
|
343:./lib/fatfs/mmc.c **** resp = xchg_spi(0xFF); /* Receive a data response */
|
|
344:./lib/fatfs/mmc.c **** if ((resp & 0x1F) != 0x05) /* If not accepted, return with error */
|
|
345:./lib/fatfs/mmc.c **** return 0;
|
|
346:./lib/fatfs/mmc.c **** }
|
|
347:./lib/fatfs/mmc.c ****
|
|
348:./lib/fatfs/mmc.c **** return 1;
|
|
349:./lib/fatfs/mmc.c **** }
|
|
350:./lib/fatfs/mmc.c **** #endif
|
|
351:./lib/fatfs/mmc.c ****
|
|
352:./lib/fatfs/mmc.c ****
|
|
353:./lib/fatfs/mmc.c ****
|
|
354:./lib/fatfs/mmc.c **** /*-----------------------------------------------------------------------*/
|
|
355:./lib/fatfs/mmc.c **** /* Send a command packet to MMC */
|
|
356:./lib/fatfs/mmc.c **** /*-----------------------------------------------------------------------*/
|
|
357:./lib/fatfs/mmc.c ****
|
|
358:./lib/fatfs/mmc.c **** static
|
|
359:./lib/fatfs/mmc.c **** BYTE send_cmd (
|
|
360:./lib/fatfs/mmc.c **** BYTE cmd, /* Command byte */
|
|
361:./lib/fatfs/mmc.c **** DWORD arg /* Argument */
|
|
362:./lib/fatfs/mmc.c **** )
|
|
363:./lib/fatfs/mmc.c **** {
|
|
204 .loc 1 363 0
|
|
205 .cfi_startproc
|
|
206 @ args = 0, pretend = 0, frame = 0
|
|
207 @ frame_needed = 0, uses_anonymous_args = 0
|
|
208 .LVL16:
|
|
209 0000 38B5 push {r3, r4, r5, lr}
|
|
210 .cfi_def_cfa_offset 16
|
|
211 .cfi_offset 3, -16
|
|
212 .cfi_offset 4, -12
|
|
213 .cfi_offset 5, -8
|
|
214 .cfi_offset 14, -4
|
|
215 0002 0446 mov r4, r0
|
|
216 0004 0D46 mov r5, r1
|
|
364:./lib/fatfs/mmc.c **** BYTE n, res;
|
|
365:./lib/fatfs/mmc.c ****
|
|
366:./lib/fatfs/mmc.c ****
|
|
367:./lib/fatfs/mmc.c **** if (cmd & 0x80) { /* ACMD<n> is the command sequense of CMD55-CMD<n> */
|
|
217 .loc 1 367 0
|
|
218 0006 10F0800F tst r0, #128
|
|
219 000a 07D0 beq .L23
|
|
220 .LVL17:
|
|
368:./lib/fatfs/mmc.c **** cmd &= 0x7F;
|
|
369:./lib/fatfs/mmc.c **** res = send_cmd(CMD55, 0);
|
|
221 .loc 1 369 0
|
|
222 000c 3720 movs r0, #55
|
|
223 000e 0021 movs r1, #0
|
|
224 .LVL18:
|
|
225 0010 FFF7F6FF bl send_cmd
|
|
226 .LVL19:
|
|
370:./lib/fatfs/mmc.c **** if (res > 1) return res;
|
|
227 .loc 1 370 0
|
|
228 0014 0128 cmp r0, #1
|
|
229 0016 3AD8 bhi .L33
|
|
368:./lib/fatfs/mmc.c **** cmd &= 0x7F;
|
|
230 .loc 1 368 0
|
|
231 0018 04F07F04 and r4, r4, #127
|
|
232 .LVL20:
|
|
233 .L23:
|
|
371:./lib/fatfs/mmc.c **** }
|
|
372:./lib/fatfs/mmc.c ****
|
|
373:./lib/fatfs/mmc.c **** /* Select the card and wait for ready */
|
|
374:./lib/fatfs/mmc.c **** deselect();
|
|
234 .loc 1 374 0
|
|
235 001c FFF7FEFF bl deselect
|
|
236 .LVL21:
|
|
375:./lib/fatfs/mmc.c **** if (!select()) return 0xFF;
|
|
237 .loc 1 375 0
|
|
238 0020 FFF7FEFF bl select
|
|
239 .LVL22:
|
|
240 0024 48B3 cbz r0, .L30
|
|
376:./lib/fatfs/mmc.c ****
|
|
377:./lib/fatfs/mmc.c **** /* Send command packet */
|
|
378:./lib/fatfs/mmc.c **** xchg_spi(0x40 | cmd); /* Start + Command index */
|
|
241 .loc 1 378 0
|
|
242 0026 44F04000 orr r0, r4, #64
|
|
243 002a FFF7FEFF bl xchg_spi
|
|
244 .LVL23:
|
|
379:./lib/fatfs/mmc.c **** xchg_spi((BYTE)(arg >> 24)); /* Argument[31..24] */
|
|
245 .loc 1 379 0
|
|
246 002e 280E lsrs r0, r5, #24
|
|
247 0030 FFF7FEFF bl xchg_spi
|
|
248 .LVL24:
|
|
380:./lib/fatfs/mmc.c **** xchg_spi((BYTE)(arg >> 16)); /* Argument[23..16] */
|
|
249 .loc 1 380 0
|
|
250 0034 C5F30740 ubfx r0, r5, #16, #8
|
|
251 0038 FFF7FEFF bl xchg_spi
|
|
252 .LVL25:
|
|
381:./lib/fatfs/mmc.c **** xchg_spi((BYTE)(arg >> 8)); /* Argument[15..8] */
|
|
253 .loc 1 381 0
|
|
254 003c C5F30720 ubfx r0, r5, #8, #8
|
|
255 0040 FFF7FEFF bl xchg_spi
|
|
256 .LVL26:
|
|
382:./lib/fatfs/mmc.c **** xchg_spi((BYTE)arg); /* Argument[7..0] */
|
|
257 .loc 1 382 0
|
|
258 0044 E8B2 uxtb r0, r5
|
|
259 0046 FFF7FEFF bl xchg_spi
|
|
260 .LVL27:
|
|
383:./lib/fatfs/mmc.c **** n = 0x01; /* Dummy CRC + Stop */
|
|
384:./lib/fatfs/mmc.c **** if (cmd == CMD0) n = 0x95; /* Valid CRC for CMD0(0) + Stop */
|
|
261 .loc 1 384 0
|
|
262 004a E4B1 cbz r4, .L25
|
|
385:./lib/fatfs/mmc.c **** if (cmd == CMD8) n = 0x87; /* Valid CRC for CMD8(0x1AA) + Stop */
|
|
263 .loc 1 385 0
|
|
264 004c 082C cmp r4, #8
|
|
265 004e 16D0 beq .L26
|
|
386:./lib/fatfs/mmc.c **** xchg_spi(n);
|
|
266 .loc 1 386 0
|
|
267 0050 0120 movs r0, #1
|
|
268 0052 FFF7FEFF bl xchg_spi
|
|
269 .LVL28:
|
|
387:./lib/fatfs/mmc.c ****
|
|
388:./lib/fatfs/mmc.c **** /* Receive command response */
|
|
389:./lib/fatfs/mmc.c **** if (cmd == CMD12) xchg_spi(0xFF); /* Skip a stuff byte on stop to read */
|
|
270 .loc 1 389 0
|
|
271 0056 0C2C cmp r4, #12
|
|
272 0058 02D1 bne .L27
|
|
273 .loc 1 389 0 is_stmt 0 discriminator 1
|
|
274 005a FF20 movs r0, #255
|
|
275 005c FFF7FEFF bl xchg_spi
|
|
276 .LVL29:
|
|
277 .L27:
|
|
363:./lib/fatfs/mmc.c **** BYTE n, res;
|
|
278 .loc 1 363 0 is_stmt 1 discriminator 2
|
|
279 0060 0A24 movs r4, #10
|
|
280 .LVL30:
|
|
390:./lib/fatfs/mmc.c **** n = 10; /* Wait for a valid response in timeout of 10 attempts */
|
|
391:./lib/fatfs/mmc.c **** do
|
|
392:./lib/fatfs/mmc.c **** res = xchg_spi(0xFF);
|
|
281 .loc 1 392 0 discriminator 2
|
|
282 0062 FF25 movs r5, #255
|
|
283 .LVL31:
|
|
284 .L28:
|
|
285 0064 2846 mov r0, r5
|
|
286 0066 FFF7FEFF bl xchg_spi
|
|
287 .LVL32:
|
|
393:./lib/fatfs/mmc.c **** while ((res & 0x80) && --n);
|
|
288 .loc 1 393 0 discriminator 2
|
|
289 006a 10F0800F tst r0, #128
|
|
290 006e 0ED0 beq .L33
|
|
291 .LVL33:
|
|
292 0070 631E subs r3, r4, #1
|
|
293 .loc 1 393 0 is_stmt 0 discriminator 1
|
|
294 0072 13F0FF04 ands r4, r3, #255
|
|
295 .LVL34:
|
|
296 0076 F5D1 bne .L28
|
|
297 0078 38BD pop {r3, r4, r5, pc}
|
|
298 .LVL35:
|
|
299 .L30:
|
|
375:./lib/fatfs/mmc.c ****
|
|
300 .loc 1 375 0 is_stmt 1
|
|
301 007a FF20 movs r0, #255
|
|
302 007c 38BD pop {r3, r4, r5, pc}
|
|
303 .LVL36:
|
|
304 .L26:
|
|
386:./lib/fatfs/mmc.c ****
|
|
305 .loc 1 386 0
|
|
306 007e 8720 movs r0, #135
|
|
307 0080 FFF7FEFF bl xchg_spi
|
|
308 .LVL37:
|
|
309 0084 ECE7 b .L27
|
|
310 .LVL38:
|
|
311 .L25:
|
|
312 0086 9520 movs r0, #149
|
|
313 0088 FFF7FEFF bl xchg_spi
|
|
314 .LVL39:
|
|
315 008c E8E7 b .L27
|
|
316 .LVL40:
|
|
317 .L33:
|
|
394:./lib/fatfs/mmc.c ****
|
|
395:./lib/fatfs/mmc.c **** return res; /* Return with the response value */
|
|
396:./lib/fatfs/mmc.c **** }
|
|
318 .loc 1 396 0
|
|
319 008e 38BD pop {r3, r4, r5, pc}
|
|
320 .cfi_endproc
|
|
321 .LFE40:
|
|
323 .section .text.xmit_datablock,"ax",%progbits
|
|
324 .align 2
|
|
325 .thumb
|
|
326 .thumb_func
|
|
328 xmit_datablock:
|
|
329 .LFB39:
|
|
327:./lib/fatfs/mmc.c **** BYTE resp;
|
|
330 .loc 1 327 0
|
|
331 .cfi_startproc
|
|
332 @ args = 0, pretend = 0, frame = 0
|
|
333 @ frame_needed = 0, uses_anonymous_args = 0
|
|
334 .LVL41:
|
|
335 0000 38B5 push {r3, r4, r5, lr}
|
|
336 .cfi_def_cfa_offset 16
|
|
337 .cfi_offset 3, -16
|
|
338 .cfi_offset 4, -12
|
|
339 .cfi_offset 5, -8
|
|
340 .cfi_offset 14, -4
|
|
341 0002 0546 mov r5, r0
|
|
342 0004 0C46 mov r4, r1
|
|
332:./lib/fatfs/mmc.c ****
|
|
343 .loc 1 332 0
|
|
344 0006 FFF7FEFF bl wait_ready
|
|
345 .LVL42:
|
|
346 000a 0346 mov r3, r0
|
|
347 000c 18B3 cbz r0, .L36
|
|
334:./lib/fatfs/mmc.c **** if (token != 0xFD) { /* Not StopTran token */
|
|
348 .loc 1 334 0
|
|
349 000e 2046 mov r0, r4
|
|
350 0010 FFF7FEFF bl xchg_spi
|
|
351 .LVL43:
|
|
335:./lib/fatfs/mmc.c **** wc = 512;
|
|
352 .loc 1 335 0
|
|
353 0014 FD2C cmp r4, #253
|
|
354 0016 1DD0 beq .L38
|
|
355 0018 AC1C adds r4, r5, #2
|
|
356 001a 05F20225 addw r5, r5, #514
|
|
357 .LVL44:
|
|
358 .L37:
|
|
338:./lib/fatfs/mmc.c **** xchg_spi(*buff++);
|
|
359 .loc 1 338 0 discriminator 1
|
|
360 001e 14F8020C ldrb r0, [r4, #-2] @ zero_extendqisi2
|
|
361 0022 FFF7FEFF bl xchg_spi
|
|
362 .LVL45:
|
|
339:./lib/fatfs/mmc.c **** } while (wc -= 2);
|
|
363 .loc 1 339 0 discriminator 1
|
|
364 0026 14F8010C ldrb r0, [r4, #-1] @ zero_extendqisi2
|
|
365 002a FFF7FEFF bl xchg_spi
|
|
366 .LVL46:
|
|
367 002e 0234 adds r4, r4, #2
|
|
368 .LVL47:
|
|
340:./lib/fatfs/mmc.c **** xchg_spi(0xFF); /* CRC (Dummy) */
|
|
369 .loc 1 340 0 discriminator 1
|
|
370 0030 AC42 cmp r4, r5
|
|
371 0032 F4D1 bne .L37
|
|
341:./lib/fatfs/mmc.c **** xchg_spi(0xFF);
|
|
372 .loc 1 341 0
|
|
373 0034 FF20 movs r0, #255
|
|
374 0036 FFF7FEFF bl xchg_spi
|
|
375 .LVL48:
|
|
342:./lib/fatfs/mmc.c **** resp = xchg_spi(0xFF); /* Receive a data response */
|
|
376 .loc 1 342 0
|
|
377 003a FF20 movs r0, #255
|
|
378 003c FFF7FEFF bl xchg_spi
|
|
379 .LVL49:
|
|
343:./lib/fatfs/mmc.c **** if ((resp & 0x1F) != 0x05) /* If not accepted, return with error */
|
|
380 .loc 1 343 0
|
|
381 0040 FF20 movs r0, #255
|
|
382 0042 FFF7FEFF bl xchg_spi
|
|
383 .LVL50:
|
|
344:./lib/fatfs/mmc.c **** return 0;
|
|
384 .loc 1 344 0
|
|
385 0046 00F01F00 and r0, r0, #31
|
|
386 .LVL51:
|
|
387 004a 0528 cmp r0, #5
|
|
388 004c 14BF ite ne
|
|
389 004e 0023 movne r3, #0
|
|
390 0050 0123 moveq r3, #1
|
|
391 0052 00E0 b .L36
|
|
392 .LVL52:
|
|
393 .L38:
|
|
348:./lib/fatfs/mmc.c **** }
|
|
394 .loc 1 348 0
|
|
395 0054 0123 movs r3, #1
|
|
396 .LVL53:
|
|
397 .L36:
|
|
349:./lib/fatfs/mmc.c **** #endif
|
|
398 .loc 1 349 0
|
|
399 0056 1846 mov r0, r3
|
|
400 0058 38BD pop {r3, r4, r5, pc}
|
|
401 .cfi_endproc
|
|
402 .LFE39:
|
|
404 005a 00BF .section .text.rcvr_datablock,"ax",%progbits
|
|
405 .align 2
|
|
406 .thumb
|
|
407 .thumb_func
|
|
409 rcvr_datablock:
|
|
410 .LFB38:
|
|
292:./lib/fatfs/mmc.c **** BYTE token;
|
|
411 .loc 1 292 0
|
|
412 .cfi_startproc
|
|
413 @ args = 0, pretend = 0, frame = 0
|
|
414 @ frame_needed = 0, uses_anonymous_args = 0
|
|
415 .LVL54:
|
|
416 0000 F8B5 push {r3, r4, r5, r6, r7, lr}
|
|
417 .cfi_def_cfa_offset 24
|
|
418 .cfi_offset 3, -24
|
|
419 .cfi_offset 4, -20
|
|
420 .cfi_offset 5, -16
|
|
421 .cfi_offset 6, -12
|
|
422 .cfi_offset 7, -8
|
|
423 .cfi_offset 14, -4
|
|
424 0002 0446 mov r4, r0
|
|
425 0004 0D46 mov r5, r1
|
|
297:./lib/fatfs/mmc.c ****
|
|
426 .loc 1 297 0
|
|
427 0006 FFF7FEFF bl TimerGet
|
|
428 .LVL55:
|
|
429 000a 00F16407 add r7, r0, #100
|
|
430 .LVL56:
|
|
300:./lib/fatfs/mmc.c **** } while ((token == 0xFF) && (TimerGet() < timeOutTime));
|
|
431 .loc 1 300 0
|
|
432 000e FF26 movs r6, #255
|
|
433 .L43:
|
|
300:./lib/fatfs/mmc.c **** } while ((token == 0xFF) && (TimerGet() < timeOutTime));
|
|
434 .loc 1 300 0 is_stmt 0 discriminator 2
|
|
435 0010 3046 mov r0, r6
|
|
436 0012 FFF7FEFF bl xchg_spi
|
|
437 .LVL57:
|
|
301:./lib/fatfs/mmc.c ****
|
|
438 .loc 1 301 0 is_stmt 1 discriminator 2
|
|
439 0016 FF28 cmp r0, #255
|
|
440 0018 05D1 bne .L42
|
|
301:./lib/fatfs/mmc.c ****
|
|
441 .loc 1 301 0 is_stmt 0 discriminator 1
|
|
442 001a FFF7FEFF bl TimerGet
|
|
443 .LVL58:
|
|
444 001e 8742 cmp r7, r0
|
|
445 0020 F6D8 bhi .L43
|
|
303:./lib/fatfs/mmc.c ****
|
|
446 .loc 1 303 0 is_stmt 1
|
|
447 0022 0020 movs r0, #0
|
|
448 0024 F8BD pop {r3, r4, r5, r6, r7, pc}
|
|
449 .LVL59:
|
|
450 .L42:
|
|
451 0026 FE28 cmp r0, #254
|
|
452 0028 16D1 bne .L46
|
|
453 002a 0234 adds r4, r4, #2
|
|
454 .LVL60:
|
|
455 .LBB6:
|
|
456 .LBB7:
|
|
228:./lib/fatfs/mmc.c **** }
|
|
457 .loc 1 228 0
|
|
458 002c FF26 movs r6, #255
|
|
459 .LVL61:
|
|
460 .L45:
|
|
228:./lib/fatfs/mmc.c **** }
|
|
461 .loc 1 228 0 is_stmt 0 discriminator 1
|
|
462 002e 3046 mov r0, r6
|
|
463 0030 FFF7FEFF bl xchg_spi
|
|
464 .LVL62:
|
|
465 0034 04F8020C strb r0, [r4, #-2]
|
|
466 .LVL63:
|
|
467 .LBE7:
|
|
468 .LBE6:
|
|
469 .LBB8:
|
|
470 .LBB9:
|
|
471 0038 3046 mov r0, r6
|
|
472 003a FFF7FEFF bl xchg_spi
|
|
473 .LVL64:
|
|
474 003e 04F8010C strb r0, [r4, #-1]
|
|
475 .LVL65:
|
|
476 0042 0234 adds r4, r4, #2
|
|
477 .LVL66:
|
|
478 .LBE9:
|
|
479 .LBE8:
|
|
308:./lib/fatfs/mmc.c **** xchg_spi(0xFF); /* Discard CRC */
|
|
480 .loc 1 308 0 is_stmt 1 discriminator 1
|
|
481 0044 023D subs r5, r5, #2
|
|
482 .LVL67:
|
|
483 0046 F2D1 bne .L45
|
|
309:./lib/fatfs/mmc.c **** xchg_spi(0xFF);
|
|
484 .loc 1 309 0
|
|
485 0048 FF20 movs r0, #255
|
|
486 004a FFF7FEFF bl xchg_spi
|
|
487 .LVL68:
|
|
310:./lib/fatfs/mmc.c ****
|
|
488 .loc 1 310 0
|
|
489 004e FF20 movs r0, #255
|
|
490 0050 FFF7FEFF bl xchg_spi
|
|
491 .LVL69:
|
|
312:./lib/fatfs/mmc.c **** }
|
|
492 .loc 1 312 0
|
|
493 0054 0120 movs r0, #1
|
|
494 0056 F8BD pop {r3, r4, r5, r6, r7, pc}
|
|
495 .LVL70:
|
|
496 .L46:
|
|
303:./lib/fatfs/mmc.c ****
|
|
497 .loc 1 303 0
|
|
498 0058 0020 movs r0, #0
|
|
499 .LVL71:
|
|
313:./lib/fatfs/mmc.c ****
|
|
500 .loc 1 313 0
|
|
501 005a F8BD pop {r3, r4, r5, r6, r7, pc}
|
|
502 .cfi_endproc
|
|
503 .LFE38:
|
|
505 .section .text.disk_initialize,"ax",%progbits
|
|
506 .align 2
|
|
507 .global disk_initialize
|
|
508 .thumb
|
|
509 .thumb_func
|
|
511 disk_initialize:
|
|
512 .LFB41:
|
|
397:./lib/fatfs/mmc.c ****
|
|
398:./lib/fatfs/mmc.c ****
|
|
399:./lib/fatfs/mmc.c ****
|
|
400:./lib/fatfs/mmc.c **** /*--------------------------------------------------------------------------
|
|
401:./lib/fatfs/mmc.c ****
|
|
402:./lib/fatfs/mmc.c **** Public Functions
|
|
403:./lib/fatfs/mmc.c ****
|
|
404:./lib/fatfs/mmc.c **** ---------------------------------------------------------------------------*/
|
|
405:./lib/fatfs/mmc.c ****
|
|
406:./lib/fatfs/mmc.c ****
|
|
407:./lib/fatfs/mmc.c **** /*-----------------------------------------------------------------------*/
|
|
408:./lib/fatfs/mmc.c **** /* Initialize Disk Drive */
|
|
409:./lib/fatfs/mmc.c **** /*-----------------------------------------------------------------------*/
|
|
410:./lib/fatfs/mmc.c ****
|
|
411:./lib/fatfs/mmc.c **** DSTATUS disk_initialize (
|
|
412:./lib/fatfs/mmc.c **** BYTE pdrv /* Physical drive nmuber (0) */
|
|
413:./lib/fatfs/mmc.c **** )
|
|
414:./lib/fatfs/mmc.c **** {
|
|
513 .loc 1 414 0
|
|
514 .cfi_startproc
|
|
515 @ args = 0, pretend = 0, frame = 32
|
|
516 @ frame_needed = 0, uses_anonymous_args = 0
|
|
517 .LVL72:
|
|
415:./lib/fatfs/mmc.c **** BYTE n, cmd, ty, ocr[4];
|
|
416:./lib/fatfs/mmc.c **** ULONG timeOutTime;
|
|
417:./lib/fatfs/mmc.c ****
|
|
418:./lib/fatfs/mmc.c ****
|
|
419:./lib/fatfs/mmc.c **** if (pdrv) return STA_NOINIT; /* Supports only single drive */
|
|
518 .loc 1 419 0
|
|
519 0000 0028 cmp r0, #0
|
|
520 0002 40F05A81 bne .L69
|
|
420:./lib/fatfs/mmc.c **** if (Stat & STA_NODISK) return Stat; /* No card in the socket */
|
|
521 .loc 1 420 0
|
|
522 0006 B24B ldr r3, .L84
|
|
523 0008 1B78 ldrb r3, [r3] @ zero_extendqisi2
|
|
524 000a 13F0020F tst r3, #2
|
|
525 000e 03D0 beq .L52
|
|
526 .loc 1 420 0 is_stmt 0 discriminator 1
|
|
527 0010 AF4B ldr r3, .L84
|
|
528 0012 1878 ldrb r0, [r3] @ zero_extendqisi2
|
|
529 .LVL73:
|
|
530 0014 C0B2 uxtb r0, r0
|
|
421:./lib/fatfs/mmc.c ****
|
|
422:./lib/fatfs/mmc.c **** power_on(); /* Force socket power on */
|
|
423:./lib/fatfs/mmc.c ****
|
|
424:./lib/fatfs/mmc.c **** CS_LOW(); /* CS = L */
|
|
425:./lib/fatfs/mmc.c ****
|
|
426:./lib/fatfs/mmc.c **** ty = 0;
|
|
427:./lib/fatfs/mmc.c **** if (send_cmd(CMD0, 0) == 1) { /* Enter Idle state */
|
|
428:./lib/fatfs/mmc.c **** timeOutTime = TimerGet() + 1000; /* Initialization timeout of 1000 msec */
|
|
429:./lib/fatfs/mmc.c ****
|
|
430:./lib/fatfs/mmc.c **** if (send_cmd(CMD8, 0x1AA) == 1) { /* SDv2? */
|
|
431:./lib/fatfs/mmc.c **** for (n = 0; n < 4; n++) ocr[n] = xchg_spi(0xFF); /* Get trailing return value of R7 resp */
|
|
432:./lib/fatfs/mmc.c **** if (ocr[2] == 0x01 && ocr[3] == 0xAA) { /* The card can work at vdd range of 2.7-3.6V */
|
|
433:./lib/fatfs/mmc.c **** while ((TimerGet() < timeOutTime) && send_cmd(ACMD41, 0x40000000)); /* Wait for leaving idle st
|
|
434:./lib/fatfs/mmc.c **** if ((TimerGet() < timeOutTime) && send_cmd(CMD58, 0) == 0) { /* Check CCS bit in the OCR */
|
|
435:./lib/fatfs/mmc.c **** for (n = 0; n < 4; n++) ocr[n] = xchg_spi(0xFF);
|
|
436:./lib/fatfs/mmc.c **** ty = (ocr[0] & 0x40) ? CT_SD2|CT_BLOCK : CT_SD2; /* SDv2 */
|
|
437:./lib/fatfs/mmc.c **** }
|
|
438:./lib/fatfs/mmc.c **** }
|
|
439:./lib/fatfs/mmc.c **** } else { /* SDv1 or MMCv3 */
|
|
440:./lib/fatfs/mmc.c **** if (send_cmd(ACMD41, 0) <= 1) {
|
|
441:./lib/fatfs/mmc.c **** ty = CT_SD1; cmd = ACMD41; /* SDv1 */
|
|
442:./lib/fatfs/mmc.c **** } else {
|
|
443:./lib/fatfs/mmc.c **** ty = CT_MMC; cmd = CMD1; /* MMCv3 */
|
|
444:./lib/fatfs/mmc.c **** }
|
|
445:./lib/fatfs/mmc.c **** while ((TimerGet() < timeOutTime) && send_cmd(cmd, 0)); /* Wait for leaving idle state */
|
|
446:./lib/fatfs/mmc.c **** if (!(TimerGet() < timeOutTime) || send_cmd(CMD16, 512) != 0) /* Set read/write block length to
|
|
447:./lib/fatfs/mmc.c **** ty = 0;
|
|
448:./lib/fatfs/mmc.c **** }
|
|
449:./lib/fatfs/mmc.c **** }
|
|
450:./lib/fatfs/mmc.c **** CardType = ty;
|
|
451:./lib/fatfs/mmc.c **** deselect();
|
|
452:./lib/fatfs/mmc.c ****
|
|
453:./lib/fatfs/mmc.c **** if (ty) { /* Initialization succeded */
|
|
454:./lib/fatfs/mmc.c **** Stat &= ~STA_NOINIT; /* Clear STA_NOINIT */
|
|
455:./lib/fatfs/mmc.c **** FCLK_FAST();
|
|
456:./lib/fatfs/mmc.c **** } else { /* Initialization failed */
|
|
457:./lib/fatfs/mmc.c **** power_off();
|
|
458:./lib/fatfs/mmc.c **** }
|
|
459:./lib/fatfs/mmc.c ****
|
|
460:./lib/fatfs/mmc.c **** return Stat;
|
|
461:./lib/fatfs/mmc.c **** }
|
|
531 .loc 1 461 0 is_stmt 1 discriminator 1
|
|
532 0016 7047 bx lr
|
|
533 .LVL74:
|
|
534 .L52:
|
|
414:./lib/fatfs/mmc.c **** BYTE n, cmd, ty, ocr[4];
|
|
535 .loc 1 414 0
|
|
536 0018 2DE9F043 push {r4, r5, r6, r7, r8, r9, lr}
|
|
537 .cfi_def_cfa_offset 28
|
|
538 .cfi_offset 4, -28
|
|
539 .cfi_offset 5, -24
|
|
540 .cfi_offset 6, -20
|
|
541 .cfi_offset 7, -16
|
|
542 .cfi_offset 8, -12
|
|
543 .cfi_offset 9, -8
|
|
544 .cfi_offset 14, -4
|
|
545 001c 89B0 sub sp, sp, #36
|
|
546 .cfi_def_cfa_offset 64
|
|
547 .LBB18:
|
|
548 .LBB19:
|
|
131:./lib/fatfs/mmc.c **** /* Enable SPI clock, SPI2: APB1 */
|
|
549 .loc 1 131 0
|
|
550 001e 0820 movs r0, #8
|
|
551 .LVL75:
|
|
552 0020 0121 movs r1, #1
|
|
553 0022 FFF7FEFF bl RCC_APB2PeriphClockCmd
|
|
554 .LVL76:
|
|
133:./lib/fatfs/mmc.c **** /* Configure I/O for Flash Chip select (PB12) */
|
|
555 .loc 1 133 0
|
|
556 0026 4FF48040 mov r0, #16384
|
|
557 002a 0121 movs r1, #1
|
|
558 002c FFF7FEFF bl RCC_APB1PeriphClockCmd
|
|
559 .LVL77:
|
|
135:./lib/fatfs/mmc.c **** GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
|
|
560 .loc 1 135 0
|
|
561 0030 4FF48057 mov r7, #4096
|
|
562 0034 ADF80070 strh r7, [sp] @ movhi
|
|
136:./lib/fatfs/mmc.c **** GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
|
563 .loc 1 136 0
|
|
564 0038 4FF01009 mov r9, #16
|
|
565 003c 8DF80390 strb r9, [sp, #3]
|
|
137:./lib/fatfs/mmc.c **** GPIO_Init(GPIOB, &GPIO_InitStructure);
|
|
566 .loc 1 137 0
|
|
567 0040 0326 movs r6, #3
|
|
568 0042 8DF80260 strb r6, [sp, #2]
|
|
138:./lib/fatfs/mmc.c ****
|
|
569 .loc 1 138 0
|
|
570 0046 A34C ldr r4, .L84+4
|
|
571 0048 2046 mov r0, r4
|
|
572 004a 6946 mov r1, sp
|
|
573 004c FFF7FEFF bl GPIO_Init
|
|
574 .LVL78:
|
|
141:./lib/fatfs/mmc.c ****
|
|
575 .loc 1 141 0
|
|
576 0050 2046 mov r0, r4
|
|
577 0052 3946 mov r1, r7
|
|
578 0054 FFF7FEFF bl GPIO_SetBits
|
|
579 .LVL79:
|
|
144:./lib/fatfs/mmc.c **** GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
|
580 .loc 1 144 0
|
|
581 0058 4FF42043 mov r3, #40960
|
|
582 005c ADF80030 strh r3, [sp] @ movhi
|
|
145:./lib/fatfs/mmc.c **** GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
|
|
583 .loc 1 145 0
|
|
584 0060 8DF80260 strb r6, [sp, #2]
|
|
146:./lib/fatfs/mmc.c **** GPIO_Init(GPIOB, &GPIO_InitStructure);
|
|
585 .loc 1 146 0
|
|
586 0064 1823 movs r3, #24
|
|
587 0066 8DF80330 strb r3, [sp, #3]
|
|
147:./lib/fatfs/mmc.c **** /* Configure MISO (PB14) as Input with internal pull-up */
|
|
588 .loc 1 147 0
|
|
589 006a 2046 mov r0, r4
|
|
590 006c 6946 mov r1, sp
|
|
591 006e FFF7FEFF bl GPIO_Init
|
|
592 .LVL80:
|
|
149:./lib/fatfs/mmc.c **** GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
|
|
593 .loc 1 149 0
|
|
594 0072 4FF48043 mov r3, #16384
|
|
595 0076 ADF80030 strh r3, [sp] @ movhi
|
|
150:./lib/fatfs/mmc.c **** GPIO_Init(GPIOB, &GPIO_InitStructure);
|
|
596 .loc 1 150 0
|
|
597 007a 4823 movs r3, #72
|
|
598 007c 8DF80330 strb r3, [sp, #3]
|
|
151:./lib/fatfs/mmc.c ****
|
|
599 .loc 1 151 0
|
|
600 0080 2046 mov r0, r4
|
|
601 0082 6946 mov r1, sp
|
|
602 0084 FFF7FEFF bl GPIO_Init
|
|
603 .LVL81:
|
|
154:./lib/fatfs/mmc.c **** SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
|
|
604 .loc 1 154 0
|
|
605 0088 0025 movs r5, #0
|
|
606 008a ADF80850 strh r5, [sp, #8] @ movhi
|
|
155:./lib/fatfs/mmc.c **** SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
|
|
607 .loc 1 155 0
|
|
608 008e 4FF48273 mov r3, #260
|
|
609 0092 ADF80A30 strh r3, [sp, #10] @ movhi
|
|
156:./lib/fatfs/mmc.c **** SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
|
|
610 .loc 1 156 0
|
|
611 0096 ADF80C50 strh r5, [sp, #12] @ movhi
|
|
157:./lib/fatfs/mmc.c **** SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
|
|
612 .loc 1 157 0
|
|
613 009a ADF80E50 strh r5, [sp, #14] @ movhi
|
|
158:./lib/fatfs/mmc.c **** SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
|
|
614 .loc 1 158 0
|
|
615 009e ADF81050 strh r5, [sp, #16] @ movhi
|
|
159:./lib/fatfs/mmc.c **** SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; // 72000kHz/256=281kHz < 400
|
|
616 .loc 1 159 0
|
|
617 00a2 4FF40073 mov r3, #512
|
|
618 00a6 ADF81230 strh r3, [sp, #18] @ movhi
|
|
160:./lib/fatfs/mmc.c **** SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
|
|
619 .loc 1 160 0
|
|
620 00aa 3823 movs r3, #56
|
|
621 00ac ADF81430 strh r3, [sp, #20] @ movhi
|
|
161:./lib/fatfs/mmc.c **** SPI_InitStructure.SPI_CRCPolynomial = 7;
|
|
622 .loc 1 161 0
|
|
623 00b0 ADF81650 strh r5, [sp, #22] @ movhi
|
|
162:./lib/fatfs/mmc.c ****
|
|
624 .loc 1 162 0
|
|
625 00b4 0723 movs r3, #7
|
|
626 00b6 ADF81830 strh r3, [sp, #24] @ movhi
|
|
164:./lib/fatfs/mmc.c **** SPI_CalculateCRC(SPI2, DISABLE);
|
|
627 .loc 1 164 0
|
|
628 00ba DFF82082 ldr r8, .L84+12
|
|
629 00be 4046 mov r0, r8
|
|
630 00c0 02A9 add r1, sp, #8
|
|
631 00c2 FFF7FEFF bl SPI_Init
|
|
632 .LVL82:
|
|
165:./lib/fatfs/mmc.c **** SPI_Cmd(SPI2, ENABLE);
|
|
633 .loc 1 165 0
|
|
634 00c6 4046 mov r0, r8
|
|
635 00c8 2946 mov r1, r5
|
|
636 00ca FFF7FEFF bl SPI_CalculateCRC
|
|
637 .LVL83:
|
|
166:./lib/fatfs/mmc.c ****
|
|
638 .loc 1 166 0
|
|
639 00ce 4046 mov r0, r8
|
|
640 00d0 0121 movs r1, #1
|
|
641 00d2 FFF7FEFF bl SPI_Cmd
|
|
642 .LVL84:
|
|
643 .LBB20:
|
|
644 .LBB21:
|
|
82:./lib/fatfs/mmc.c ****
|
|
645 .loc 1 82 0
|
|
646 00d6 2046 mov r0, r4
|
|
647 00d8 3946 mov r1, r7
|
|
648 00da FFF7FEFF bl GPIO_SetBits
|
|
649 .LVL85:
|
|
85:./lib/fatfs/mmc.c **** GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
|
650 .loc 1 85 0
|
|
651 00de 4FF40045 mov r5, #32768
|
|
652 00e2 ADF80450 strh r5, [sp, #4] @ movhi
|
|
86:./lib/fatfs/mmc.c **** GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
|
|
653 .loc 1 86 0
|
|
654 00e6 8DF80660 strb r6, [sp, #6]
|
|
87:./lib/fatfs/mmc.c **** GPIO_Init(GPIOB, &GPIO_InitStructure);
|
|
655 .loc 1 87 0
|
|
656 00ea 8DF80790 strb r9, [sp, #7]
|
|
88:./lib/fatfs/mmc.c **** GPIO_SetBits(GPIOB, GPIO_Pin_15);
|
|
657 .loc 1 88 0
|
|
658 00ee 2046 mov r0, r4
|
|
659 00f0 01A9 add r1, sp, #4
|
|
660 00f2 FFF7FEFF bl GPIO_Init
|
|
661 .LVL86:
|
|
89:./lib/fatfs/mmc.c ****
|
|
662 .loc 1 89 0
|
|
663 00f6 2046 mov r0, r4
|
|
664 00f8 2946 mov r1, r5
|
|
665 00fa FFF7FEFF bl GPIO_SetBits
|
|
666 .LVL87:
|
|
667 00fe 0A27 movs r7, #10
|
|
96:./lib/fatfs/mmc.c ****
|
|
668 .loc 1 96 0
|
|
669 0100 0226 movs r6, #2
|
|
670 0102 4446 mov r4, r8
|
|
671 .LVL88:
|
|
672 .L53:
|
|
673 0104 2046 mov r0, r4
|
|
674 0106 3146 mov r1, r6
|
|
675 0108 FFF7FEFF bl SPI_I2S_GetFlagStatus
|
|
676 .LVL89:
|
|
677 010c 0028 cmp r0, #0
|
|
678 010e F9D0 beq .L53
|
|
99:./lib/fatfs/mmc.c ****
|
|
679 .loc 1 99 0
|
|
680 0110 2046 mov r0, r4
|
|
681 0112 FF21 movs r1, #255
|
|
682 0114 FFF7FEFF bl SPI_I2S_SendData
|
|
683 .LVL90:
|
|
102:./lib/fatfs/mmc.c **** }
|
|
684 .loc 1 102 0
|
|
685 0118 0125 movs r5, #1
|
|
686 .L54:
|
|
687 011a 2046 mov r0, r4
|
|
688 011c 2946 mov r1, r5
|
|
689 011e FFF7FEFF bl SPI_I2S_GetFlagStatus
|
|
690 .LVL91:
|
|
691 0122 0028 cmp r0, #0
|
|
692 0124 F9D0 beq .L54
|
|
693 .LVL92:
|
|
93:./lib/fatfs/mmc.c **** {
|
|
694 .loc 1 93 0
|
|
695 0126 013F subs r7, r7, #1
|
|
696 .LVL93:
|
|
697 0128 ECD1 bne .L53
|
|
106:./lib/fatfs/mmc.c **** GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
|
698 .loc 1 106 0
|
|
699 012a 4FF40043 mov r3, #32768
|
|
700 012e ADF80430 strh r3, [sp, #4] @ movhi
|
|
107:./lib/fatfs/mmc.c **** GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
|
|
701 .loc 1 107 0
|
|
702 0132 0323 movs r3, #3
|
|
703 0134 8DF80630 strb r3, [sp, #6]
|
|
108:./lib/fatfs/mmc.c **** GPIO_Init(GPIOB, &GPIO_InitStructure);
|
|
704 .loc 1 108 0
|
|
705 0138 1823 movs r3, #24
|
|
706 013a 8DF80730 strb r3, [sp, #7]
|
|
109:./lib/fatfs/mmc.c **** }
|
|
707 .loc 1 109 0
|
|
708 013e 654C ldr r4, .L84+4
|
|
709 0140 2046 mov r0, r4
|
|
710 0142 01A9 add r1, sp, #4
|
|
711 0144 FFF7FEFF bl GPIO_Init
|
|
712 .LVL94:
|
|
713 .LBE21:
|
|
714 .LBE20:
|
|
715 .LBE19:
|
|
716 .LBE18:
|
|
424:./lib/fatfs/mmc.c ****
|
|
717 .loc 1 424 0
|
|
718 0148 2046 mov r0, r4
|
|
719 014a 4FF48051 mov r1, #4096
|
|
720 014e FFF7FEFF bl GPIO_ResetBits
|
|
721 .LVL95:
|
|
427:./lib/fatfs/mmc.c **** timeOutTime = TimerGet() + 1000; /* Initialization timeout of 1000 msec */
|
|
722 .loc 1 427 0
|
|
723 0152 0020 movs r0, #0
|
|
724 0154 0146 mov r1, r0
|
|
725 0156 FFF7FEFF bl send_cmd
|
|
726 .LVL96:
|
|
727 015a 0128 cmp r0, #1
|
|
728 015c 40F0AF80 bne .L56
|
|
428:./lib/fatfs/mmc.c ****
|
|
729 .loc 1 428 0
|
|
730 0160 FFF7FEFF bl TimerGet
|
|
731 .LVL97:
|
|
732 0164 00F57A74 add r4, r0, #1000
|
|
733 .LVL98:
|
|
430:./lib/fatfs/mmc.c **** for (n = 0; n < 4; n++) ocr[n] = xchg_spi(0xFF); /* Get trailing return value of R7 resp */
|
|
734 .loc 1 430 0
|
|
735 0168 0820 movs r0, #8
|
|
736 016a 4FF4D571 mov r1, #426
|
|
737 016e FFF7FEFF bl send_cmd
|
|
738 .LVL99:
|
|
739 0172 0128 cmp r0, #1
|
|
740 0174 43D1 bne .L57
|
|
741 0176 07AE add r6, sp, #28
|
|
742 0178 08AF add r7, sp, #32
|
|
743 .LVL100:
|
|
744 017a 3546 mov r5, r6
|
|
431:./lib/fatfs/mmc.c **** if (ocr[2] == 0x01 && ocr[3] == 0xAA) { /* The card can work at vdd range of 2.7-3.6V */
|
|
745 .loc 1 431 0
|
|
746 017c 4FF0FF08 mov r8, #255
|
|
747 .L58:
|
|
748 .LVL101:
|
|
431:./lib/fatfs/mmc.c **** if (ocr[2] == 0x01 && ocr[3] == 0xAA) { /* The card can work at vdd range of 2.7-3.6V */
|
|
749 .loc 1 431 0 is_stmt 0 discriminator 3
|
|
750 0180 4046 mov r0, r8
|
|
751 0182 FFF7FEFF bl xchg_spi
|
|
752 .LVL102:
|
|
753 0186 05F8010B strb r0, [r5], #1
|
|
754 .LVL103:
|
|
755 018a BD42 cmp r5, r7
|
|
756 018c F8D1 bne .L58
|
|
432:./lib/fatfs/mmc.c **** while ((TimerGet() < timeOutTime) && send_cmd(ACMD41, 0x40000000)); /* Wait for leaving idle st
|
|
757 .loc 1 432 0 is_stmt 1
|
|
758 018e 9DF81E30 ldrb r3, [sp, #30] @ zero_extendqisi2
|
|
759 0192 012B cmp r3, #1
|
|
760 0194 40F09380 bne .L56
|
|
432:./lib/fatfs/mmc.c **** while ((TimerGet() < timeOutTime) && send_cmd(ACMD41, 0x40000000)); /* Wait for leaving idle st
|
|
761 .loc 1 432 0 is_stmt 0 discriminator 1
|
|
762 0198 9DF81F30 ldrb r3, [sp, #31] @ zero_extendqisi2
|
|
763 019c AA2B cmp r3, #170
|
|
764 019e 40F08E80 bne .L56
|
|
433:./lib/fatfs/mmc.c **** if ((TimerGet() < timeOutTime) && send_cmd(CMD58, 0) == 0) { /* Check CCS bit in the OCR */
|
|
765 .loc 1 433 0 is_stmt 1 discriminator 2
|
|
766 01a2 4FF0A908 mov r8, #169
|
|
767 01a6 4FF08045 mov r5, #1073741824
|
|
768 .LVL104:
|
|
769 .L73:
|
|
770 01aa FFF7FEFF bl TimerGet
|
|
771 .LVL105:
|
|
772 01ae 8442 cmp r4, r0
|
|
773 01b0 05D9 bls .L59
|
|
433:./lib/fatfs/mmc.c **** if ((TimerGet() < timeOutTime) && send_cmd(CMD58, 0) == 0) { /* Check CCS bit in the OCR */
|
|
774 .loc 1 433 0 is_stmt 0 discriminator 1
|
|
775 01b2 4046 mov r0, r8
|
|
776 01b4 2946 mov r1, r5
|
|
777 01b6 FFF7FEFF bl send_cmd
|
|
778 .LVL106:
|
|
779 01ba 0028 cmp r0, #0
|
|
780 01bc F5D1 bne .L73
|
|
781 .L59:
|
|
434:./lib/fatfs/mmc.c **** for (n = 0; n < 4; n++) ocr[n] = xchg_spi(0xFF);
|
|
782 .loc 1 434 0 is_stmt 1
|
|
783 01be FFF7FEFF bl TimerGet
|
|
784 .LVL107:
|
|
785 01c2 8442 cmp r4, r0
|
|
786 01c4 7BD9 bls .L56
|
|
434:./lib/fatfs/mmc.c **** for (n = 0; n < 4; n++) ocr[n] = xchg_spi(0xFF);
|
|
787 .loc 1 434 0 is_stmt 0 discriminator 1
|
|
788 01c6 3A20 movs r0, #58
|
|
789 01c8 0021 movs r1, #0
|
|
790 01ca FFF7FEFF bl send_cmd
|
|
791 .LVL108:
|
|
792 01ce 0028 cmp r0, #0
|
|
793 01d0 75D1 bne .L56
|
|
435:./lib/fatfs/mmc.c **** ty = (ocr[0] & 0x40) ? CT_SD2|CT_BLOCK : CT_SD2; /* SDv2 */
|
|
794 .loc 1 435 0 is_stmt 1 discriminator 3
|
|
795 01d2 FF24 movs r4, #255
|
|
796 .LVL109:
|
|
797 .L72:
|
|
798 01d4 2046 mov r0, r4
|
|
799 01d6 FFF7FEFF bl xchg_spi
|
|
800 .LVL110:
|
|
801 01da 06F8010B strb r0, [r6], #1
|
|
802 .LVL111:
|
|
803 01de BE42 cmp r6, r7
|
|
804 01e0 F8D1 bne .L72
|
|
436:./lib/fatfs/mmc.c **** }
|
|
805 .loc 1 436 0
|
|
806 01e2 9DF81C30 ldrb r3, [sp, #28] @ zero_extendqisi2
|
|
807 01e6 03F04003 and r3, r3, #64
|
|
808 01ea DBB2 uxtb r3, r3
|
|
809 01ec 002B cmp r3, #0
|
|
810 01ee 14BF ite ne
|
|
811 01f0 0C22 movne r2, #12
|
|
812 01f2 0422 moveq r2, #4
|
|
813 .LVL112:
|
|
450:./lib/fatfs/mmc.c **** deselect();
|
|
814 .loc 1 450 0
|
|
815 01f4 384B ldr r3, .L84+8
|
|
816 01f6 1A60 str r2, [r3]
|
|
451:./lib/fatfs/mmc.c ****
|
|
817 .loc 1 451 0
|
|
818 01f8 FFF7FEFF bl deselect
|
|
819 .LVL113:
|
|
820 01fc 24E0 b .L68
|
|
821 .LVL114:
|
|
822 .L57:
|
|
440:./lib/fatfs/mmc.c **** ty = CT_SD1; cmd = ACMD41; /* SDv1 */
|
|
823 .loc 1 440 0
|
|
824 01fe A920 movs r0, #169
|
|
825 0200 0021 movs r1, #0
|
|
826 0202 FFF7FEFF bl send_cmd
|
|
827 .LVL115:
|
|
828 0206 0128 cmp r0, #1
|
|
443:./lib/fatfs/mmc.c **** }
|
|
829 .loc 1 443 0
|
|
830 0208 87BF ittee hi
|
|
831 020a 0127 movhi r7, #1
|
|
832 .LVL116:
|
|
833 020c 3D46 movhi r5, r7
|
|
441:./lib/fatfs/mmc.c **** } else {
|
|
834 .loc 1 441 0
|
|
835 020e 0227 movls r7, #2
|
|
836 0210 A925 movls r5, #169
|
|
445:./lib/fatfs/mmc.c **** if (!(TimerGet() < timeOutTime) || send_cmd(CMD16, 512) != 0) /* Set read/write block length to
|
|
837 .loc 1 445 0
|
|
838 0212 0026 movs r6, #0
|
|
839 .LVL117:
|
|
840 .L65:
|
|
445:./lib/fatfs/mmc.c **** if (!(TimerGet() < timeOutTime) || send_cmd(CMD16, 512) != 0) /* Set read/write block length to
|
|
841 .loc 1 445 0 is_stmt 0 discriminator 2
|
|
842 0214 FFF7FEFF bl TimerGet
|
|
843 .LVL118:
|
|
844 0218 8442 cmp r4, r0
|
|
845 021a 05D9 bls .L64
|
|
445:./lib/fatfs/mmc.c **** if (!(TimerGet() < timeOutTime) || send_cmd(CMD16, 512) != 0) /* Set read/write block length to
|
|
846 .loc 1 445 0 discriminator 1
|
|
847 021c 2846 mov r0, r5
|
|
848 021e 3146 mov r1, r6
|
|
849 0220 FFF7FEFF bl send_cmd
|
|
850 .LVL119:
|
|
851 0224 0028 cmp r0, #0
|
|
852 0226 F5D1 bne .L65
|
|
853 .L64:
|
|
446:./lib/fatfs/mmc.c **** ty = 0;
|
|
854 .loc 1 446 0 is_stmt 1
|
|
855 0228 FFF7FEFF bl TimerGet
|
|
856 .LVL120:
|
|
857 022c 8442 cmp r4, r0
|
|
858 022e 46D9 bls .L56
|
|
446:./lib/fatfs/mmc.c **** ty = 0;
|
|
859 .loc 1 446 0 is_stmt 0 discriminator 1
|
|
860 0230 1020 movs r0, #16
|
|
861 0232 4FF40071 mov r1, #512
|
|
862 0236 FFF7FEFF bl send_cmd
|
|
863 .LVL121:
|
|
864 023a 0028 cmp r0, #0
|
|
865 023c 3FD1 bne .L56
|
|
866 .LVL122:
|
|
450:./lib/fatfs/mmc.c **** deselect();
|
|
867 .loc 1 450 0 is_stmt 1
|
|
868 023e 264B ldr r3, .L84+8
|
|
869 0240 1F60 str r7, [r3]
|
|
451:./lib/fatfs/mmc.c ****
|
|
870 .loc 1 451 0
|
|
871 0242 FFF7FEFF bl deselect
|
|
872 .LVL123:
|
|
453:./lib/fatfs/mmc.c **** Stat &= ~STA_NOINIT; /* Clear STA_NOINIT */
|
|
873 .loc 1 453 0
|
|
874 0246 7FB3 cbz r7, .L66
|
|
875 .LVL124:
|
|
876 .L68:
|
|
454:./lib/fatfs/mmc.c **** FCLK_FAST();
|
|
877 .loc 1 454 0
|
|
878 0248 214A ldr r2, .L84
|
|
879 024a 1378 ldrb r3, [r2] @ zero_extendqisi2
|
|
880 024c 03F0FE03 and r3, r3, #254
|
|
881 0250 1370 strb r3, [r2]
|
|
882 .LBB22:
|
|
883 .LBB23:
|
|
180:./lib/fatfs/mmc.c ****
|
|
884 .loc 1 180 0
|
|
885 0252 224D ldr r5, .L84+12
|
|
886 0254 2846 mov r0, r5
|
|
887 0256 0021 movs r1, #0
|
|
888 0258 FFF7FEFF bl SPI_Cmd
|
|
889 .LVL125:
|
|
185:./lib/fatfs/mmc.c **** SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
|
|
890 .loc 1 185 0
|
|
891 025c 0024 movs r4, #0
|
|
892 025e ADF80840 strh r4, [sp, #8] @ movhi
|
|
186:./lib/fatfs/mmc.c **** SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
|
|
893 .loc 1 186 0
|
|
894 0262 4FF48273 mov r3, #260
|
|
895 0266 ADF80A30 strh r3, [sp, #10] @ movhi
|
|
187:./lib/fatfs/mmc.c **** SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
|
|
896 .loc 1 187 0
|
|
897 026a ADF80C40 strh r4, [sp, #12] @ movhi
|
|
188:./lib/fatfs/mmc.c **** SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
|
|
898 .loc 1 188 0
|
|
899 026e ADF80E40 strh r4, [sp, #14] @ movhi
|
|
189:./lib/fatfs/mmc.c **** SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
|
|
900 .loc 1 189 0
|
|
901 0272 ADF81040 strh r4, [sp, #16] @ movhi
|
|
190:./lib/fatfs/mmc.c **** SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4; // 72MHz/4=18MHz < 20MHz
|
|
902 .loc 1 190 0
|
|
903 0276 4FF40073 mov r3, #512
|
|
904 027a ADF81230 strh r3, [sp, #18] @ movhi
|
|
191:./lib/fatfs/mmc.c **** SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
|
|
905 .loc 1 191 0
|
|
906 027e 0823 movs r3, #8
|
|
907 0280 ADF81430 strh r3, [sp, #20] @ movhi
|
|
192:./lib/fatfs/mmc.c **** SPI_InitStructure.SPI_CRCPolynomial = 7;
|
|
908 .loc 1 192 0
|
|
909 0284 ADF81640 strh r4, [sp, #22] @ movhi
|
|
193:./lib/fatfs/mmc.c **** SPI_Init(SPI2, &SPI_InitStructure);
|
|
910 .loc 1 193 0
|
|
911 0288 0723 movs r3, #7
|
|
912 028a ADF81830 strh r3, [sp, #24] @ movhi
|
|
194:./lib/fatfs/mmc.c **** SPI_CalculateCRC(SPI2, DISABLE);
|
|
913 .loc 1 194 0
|
|
914 028e 2846 mov r0, r5
|
|
915 0290 02A9 add r1, sp, #8
|
|
916 0292 FFF7FEFF bl SPI_Init
|
|
917 .LVL126:
|
|
195:./lib/fatfs/mmc.c ****
|
|
918 .loc 1 195 0
|
|
919 0296 2846 mov r0, r5
|
|
920 0298 2146 mov r1, r4
|
|
921 029a FFF7FEFF bl SPI_CalculateCRC
|
|
922 .LVL127:
|
|
198:./lib/fatfs/mmc.c **** }
|
|
923 .loc 1 198 0
|
|
924 029e 2846 mov r0, r5
|
|
925 02a0 0121 movs r1, #1
|
|
926 02a2 FFF7FEFF bl SPI_Cmd
|
|
927 .LVL128:
|
|
928 02a6 04E0 b .L67
|
|
929 .L66:
|
|
930 .LVL129:
|
|
931 .LBE23:
|
|
932 .LBE22:
|
|
933 .LBB24:
|
|
934 .LBB25:
|
|
204:./lib/fatfs/mmc.c **** }
|
|
935 .loc 1 204 0
|
|
936 02a8 094A ldr r2, .L84
|
|
937 02aa 1378 ldrb r3, [r2] @ zero_extendqisi2
|
|
938 02ac 43F00103 orr r3, r3, #1
|
|
939 02b0 1370 strb r3, [r2]
|
|
940 .LVL130:
|
|
941 .L67:
|
|
942 .LBE25:
|
|
943 .LBE24:
|
|
460:./lib/fatfs/mmc.c **** }
|
|
944 .loc 1 460 0
|
|
945 02b2 074B ldr r3, .L84
|
|
946 02b4 1878 ldrb r0, [r3] @ zero_extendqisi2
|
|
947 02b6 C0B2 uxtb r0, r0
|
|
948 02b8 07E0 b .L81
|
|
949 .LVL131:
|
|
950 .L69:
|
|
951 .cfi_def_cfa_offset 0
|
|
952 .cfi_restore 4
|
|
953 .cfi_restore 5
|
|
954 .cfi_restore 6
|
|
955 .cfi_restore 7
|
|
956 .cfi_restore 8
|
|
957 .cfi_restore 9
|
|
958 .cfi_restore 14
|
|
419:./lib/fatfs/mmc.c **** if (Stat & STA_NODISK) return Stat; /* No card in the socket */
|
|
959 .loc 1 419 0
|
|
960 02ba 0120 movs r0, #1
|
|
961 .LVL132:
|
|
962 02bc 7047 bx lr
|
|
963 .L56:
|
|
964 .cfi_def_cfa_offset 64
|
|
965 .cfi_offset 4, -28
|
|
966 .cfi_offset 5, -24
|
|
967 .cfi_offset 6, -20
|
|
968 .cfi_offset 7, -16
|
|
969 .cfi_offset 8, -12
|
|
970 .cfi_offset 9, -8
|
|
971 .cfi_offset 14, -4
|
|
972 .LVL133:
|
|
450:./lib/fatfs/mmc.c **** deselect();
|
|
973 .loc 1 450 0
|
|
974 02be 0022 movs r2, #0
|
|
975 02c0 054B ldr r3, .L84+8
|
|
976 02c2 1A60 str r2, [r3]
|
|
451:./lib/fatfs/mmc.c ****
|
|
977 .loc 1 451 0
|
|
978 02c4 FFF7FEFF bl deselect
|
|
979 .LVL134:
|
|
980 02c8 EEE7 b .L66
|
|
981 .LVL135:
|
|
982 .L81:
|
|
983 .loc 1 461 0
|
|
984 02ca 09B0 add sp, sp, #36
|
|
985 .cfi_def_cfa_offset 28
|
|
986 @ sp needed
|
|
987 02cc BDE8F083 pop {r4, r5, r6, r7, r8, r9, pc}
|
|
988 .L85:
|
|
989 .align 2
|
|
990 .L84:
|
|
991 02d0 00000000 .word .LANCHOR0
|
|
992 02d4 000C0140 .word 1073810432
|
|
993 02d8 00000000 .word .LANCHOR1
|
|
994 02dc 00380040 .word 1073756160
|
|
995 .cfi_endproc
|
|
996 .LFE41:
|
|
998 .section .text.disk_status,"ax",%progbits
|
|
999 .align 2
|
|
1000 .global disk_status
|
|
1001 .thumb
|
|
1002 .thumb_func
|
|
1004 disk_status:
|
|
1005 .LFB42:
|
|
462:./lib/fatfs/mmc.c ****
|
|
463:./lib/fatfs/mmc.c ****
|
|
464:./lib/fatfs/mmc.c ****
|
|
465:./lib/fatfs/mmc.c **** /*-----------------------------------------------------------------------*/
|
|
466:./lib/fatfs/mmc.c **** /* Get Disk Status */
|
|
467:./lib/fatfs/mmc.c **** /*-----------------------------------------------------------------------*/
|
|
468:./lib/fatfs/mmc.c ****
|
|
469:./lib/fatfs/mmc.c **** DSTATUS disk_status (
|
|
470:./lib/fatfs/mmc.c **** BYTE pdrv /* Physical drive nmuber (0) */
|
|
471:./lib/fatfs/mmc.c **** )
|
|
472:./lib/fatfs/mmc.c **** {
|
|
1006 .loc 1 472 0
|
|
1007 .cfi_startproc
|
|
1008 @ args = 0, pretend = 0, frame = 0
|
|
1009 @ frame_needed = 0, uses_anonymous_args = 0
|
|
1010 @ link register save eliminated.
|
|
1011 .LVL136:
|
|
473:./lib/fatfs/mmc.c **** if (pdrv) return STA_NOINIT; /* Supports only single drive */
|
|
1012 .loc 1 473 0
|
|
1013 0000 18B9 cbnz r0, .L88
|
|
474:./lib/fatfs/mmc.c **** return Stat;
|
|
1014 .loc 1 474 0
|
|
1015 0002 034B ldr r3, .L89
|
|
1016 0004 1878 ldrb r0, [r3] @ zero_extendqisi2
|
|
1017 .LVL137:
|
|
1018 0006 C0B2 uxtb r0, r0
|
|
1019 0008 7047 bx lr
|
|
1020 .LVL138:
|
|
1021 .L88:
|
|
473:./lib/fatfs/mmc.c **** if (pdrv) return STA_NOINIT; /* Supports only single drive */
|
|
1022 .loc 1 473 0
|
|
1023 000a 0120 movs r0, #1
|
|
1024 .LVL139:
|
|
475:./lib/fatfs/mmc.c **** }
|
|
1025 .loc 1 475 0
|
|
1026 000c 7047 bx lr
|
|
1027 .L90:
|
|
1028 000e 00BF .align 2
|
|
1029 .L89:
|
|
1030 0010 00000000 .word .LANCHOR0
|
|
1031 .cfi_endproc
|
|
1032 .LFE42:
|
|
1034 .section .text.disk_read,"ax",%progbits
|
|
1035 .align 2
|
|
1036 .global disk_read
|
|
1037 .thumb
|
|
1038 .thumb_func
|
|
1040 disk_read:
|
|
1041 .LFB43:
|
|
476:./lib/fatfs/mmc.c ****
|
|
477:./lib/fatfs/mmc.c ****
|
|
478:./lib/fatfs/mmc.c ****
|
|
479:./lib/fatfs/mmc.c **** /*-----------------------------------------------------------------------*/
|
|
480:./lib/fatfs/mmc.c **** /* Read Sector(s) */
|
|
481:./lib/fatfs/mmc.c **** /*-----------------------------------------------------------------------*/
|
|
482:./lib/fatfs/mmc.c ****
|
|
483:./lib/fatfs/mmc.c **** DRESULT disk_read (
|
|
484:./lib/fatfs/mmc.c **** BYTE pdrv, /* Physical drive number (0) */
|
|
485:./lib/fatfs/mmc.c **** BYTE *buff, /* Pointer to the data buffer to store read data */
|
|
486:./lib/fatfs/mmc.c **** DWORD sector, /* Start sector number (LBA) */
|
|
487:./lib/fatfs/mmc.c **** BYTE count /* Sector count (1..255) */
|
|
488:./lib/fatfs/mmc.c **** )
|
|
489:./lib/fatfs/mmc.c **** {
|
|
1042 .loc 1 489 0
|
|
1043 .cfi_startproc
|
|
1044 @ args = 0, pretend = 0, frame = 0
|
|
1045 @ frame_needed = 0, uses_anonymous_args = 0
|
|
1046 .LVL140:
|
|
490:./lib/fatfs/mmc.c **** if (pdrv || !count) return RES_PARERR;
|
|
1047 .loc 1 490 0
|
|
1048 0000 0028 cmp r0, #0
|
|
1049 0002 3BD1 bne .L98
|
|
489:./lib/fatfs/mmc.c **** if (pdrv || !count) return RES_PARERR;
|
|
1050 .loc 1 489 0 discriminator 2
|
|
1051 0004 70B5 push {r4, r5, r6, lr}
|
|
1052 .cfi_def_cfa_offset 16
|
|
1053 .cfi_offset 4, -16
|
|
1054 .cfi_offset 5, -12
|
|
1055 .cfi_offset 6, -8
|
|
1056 .cfi_offset 14, -4
|
|
1057 0006 0D46 mov r5, r1
|
|
1058 0008 1C46 mov r4, r3
|
|
1059 .loc 1 490 0 discriminator 2
|
|
1060 000a 002B cmp r3, #0
|
|
1061 000c 38D0 beq .L99
|
|
491:./lib/fatfs/mmc.c **** if (Stat & STA_NOINIT) return RES_NOTRDY;
|
|
1062 .loc 1 491 0
|
|
1063 000e 1E4B ldr r3, .L104
|
|
1064 .LVL141:
|
|
1065 0010 1B78 ldrb r3, [r3] @ zero_extendqisi2
|
|
1066 0012 13F0010F tst r3, #1
|
|
1067 0016 35D1 bne .L100
|
|
492:./lib/fatfs/mmc.c ****
|
|
493:./lib/fatfs/mmc.c **** if (!(CardType & CT_BLOCK)) sector *= 512; /* Convert to byte address if needed */
|
|
1068 .loc 1 493 0
|
|
1069 0018 1C4B ldr r3, .L104+4
|
|
1070 001a 1B68 ldr r3, [r3]
|
|
1071 001c 13F0080F tst r3, #8
|
|
1072 0020 08BF it eq
|
|
1073 0022 5202 lsleq r2, r2, #9
|
|
1074 .LVL142:
|
|
494:./lib/fatfs/mmc.c ****
|
|
495:./lib/fatfs/mmc.c **** if (count == 1) { /* Single block read */
|
|
1075 .loc 1 495 0
|
|
1076 0024 012C cmp r4, #1
|
|
1077 0026 0DD1 bne .L94
|
|
496:./lib/fatfs/mmc.c **** if ((send_cmd(CMD17, sector) == 0) /* READ_SINGLE_BLOCK */
|
|
1078 .loc 1 496 0
|
|
1079 0028 1120 movs r0, #17
|
|
1080 .LVL143:
|
|
1081 002a 1146 mov r1, r2
|
|
1082 .LVL144:
|
|
1083 002c FFF7FEFF bl send_cmd
|
|
1084 .LVL145:
|
|
1085 0030 F0B9 cbnz r0, .L95
|
|
497:./lib/fatfs/mmc.c **** && rcvr_datablock(buff, 512))
|
|
1086 .loc 1 497 0
|
|
1087 0032 2846 mov r0, r5
|
|
1088 0034 4FF40071 mov r1, #512
|
|
1089 0038 FFF7FEFF bl rcvr_datablock
|
|
1090 .LVL146:
|
|
1091 003c B0FA80F4 clz r4, r0
|
|
1092 0040 6409 lsrs r4, r4, #5
|
|
1093 0042 15E0 b .L95
|
|
1094 .LVL147:
|
|
1095 .L94:
|
|
498:./lib/fatfs/mmc.c **** count = 0;
|
|
499:./lib/fatfs/mmc.c **** }
|
|
500:./lib/fatfs/mmc.c **** else { /* Multiple block read */
|
|
501:./lib/fatfs/mmc.c **** if (send_cmd(CMD18, sector) == 0) { /* READ_MULTIPLE_BLOCK */
|
|
1096 .loc 1 501 0
|
|
1097 0044 1220 movs r0, #18
|
|
1098 .LVL148:
|
|
1099 0046 1146 mov r1, r2
|
|
1100 .LVL149:
|
|
1101 0048 FFF7FEFF bl send_cmd
|
|
1102 .LVL150:
|
|
1103 004c 80B9 cbnz r0, .L95
|
|
502:./lib/fatfs/mmc.c **** do {
|
|
503:./lib/fatfs/mmc.c **** if (!rcvr_datablock(buff, 512)) break;
|
|
1104 .loc 1 503 0
|
|
1105 004e 4FF40076 mov r6, #512
|
|
1106 .LVL151:
|
|
1107 .L101:
|
|
1108 0052 2846 mov r0, r5
|
|
1109 0054 3146 mov r1, r6
|
|
1110 0056 FFF7FEFF bl rcvr_datablock
|
|
1111 .LVL152:
|
|
1112 005a 28B1 cbz r0, .L96
|
|
504:./lib/fatfs/mmc.c **** buff += 512;
|
|
1113 .loc 1 504 0
|
|
1114 005c 05F50075 add r5, r5, #512
|
|
1115 .LVL153:
|
|
505:./lib/fatfs/mmc.c **** } while (--count);
|
|
1116 .loc 1 505 0
|
|
1117 0060 601E subs r0, r4, #1
|
|
1118 .LVL154:
|
|
1119 0062 10F0FF04 ands r4, r0, #255
|
|
1120 0066 F4D1 bne .L101
|
|
1121 .LVL155:
|
|
1122 .L96:
|
|
506:./lib/fatfs/mmc.c **** send_cmd(CMD12, 0); /* STOP_TRANSMISSION */
|
|
1123 .loc 1 506 0
|
|
1124 0068 0C20 movs r0, #12
|
|
1125 006a 0021 movs r1, #0
|
|
1126 006c FFF7FEFF bl send_cmd
|
|
1127 .LVL156:
|
|
1128 .L95:
|
|
507:./lib/fatfs/mmc.c **** }
|
|
508:./lib/fatfs/mmc.c **** }
|
|
509:./lib/fatfs/mmc.c **** deselect();
|
|
1129 .loc 1 509 0
|
|
1130 0070 FFF7FEFF bl deselect
|
|
1131 .LVL157:
|
|
510:./lib/fatfs/mmc.c ****
|
|
511:./lib/fatfs/mmc.c **** return count ? RES_ERROR : RES_OK;
|
|
1132 .loc 1 511 0
|
|
1133 0074 201C adds r0, r4, #0
|
|
1134 0076 18BF it ne
|
|
1135 0078 0120 movne r0, #1
|
|
1136 007a 70BD pop {r4, r5, r6, pc}
|
|
1137 .LVL158:
|
|
1138 .L98:
|
|
1139 .cfi_def_cfa_offset 0
|
|
1140 .cfi_restore 4
|
|
1141 .cfi_restore 5
|
|
1142 .cfi_restore 6
|
|
1143 .cfi_restore 14
|
|
490:./lib/fatfs/mmc.c **** if (Stat & STA_NOINIT) return RES_NOTRDY;
|
|
1144 .loc 1 490 0
|
|
1145 007c 0420 movs r0, #4
|
|
1146 .LVL159:
|
|
512:./lib/fatfs/mmc.c **** }
|
|
1147 .loc 1 512 0
|
|
1148 007e 7047 bx lr
|
|
1149 .LVL160:
|
|
1150 .L99:
|
|
1151 .cfi_def_cfa_offset 16
|
|
1152 .cfi_offset 4, -16
|
|
1153 .cfi_offset 5, -12
|
|
1154 .cfi_offset 6, -8
|
|
1155 .cfi_offset 14, -4
|
|
490:./lib/fatfs/mmc.c **** if (Stat & STA_NOINIT) return RES_NOTRDY;
|
|
1156 .loc 1 490 0
|
|
1157 0080 0420 movs r0, #4
|
|
1158 .LVL161:
|
|
1159 0082 70BD pop {r4, r5, r6, pc}
|
|
1160 .LVL162:
|
|
1161 .L100:
|
|
491:./lib/fatfs/mmc.c ****
|
|
1162 .loc 1 491 0
|
|
1163 0084 0320 movs r0, #3
|
|
1164 .LVL163:
|
|
1165 .loc 1 512 0
|
|
1166 0086 70BD pop {r4, r5, r6, pc}
|
|
1167 .L105:
|
|
1168 .align 2
|
|
1169 .L104:
|
|
1170 0088 00000000 .word .LANCHOR0
|
|
1171 008c 00000000 .word .LANCHOR1
|
|
1172 .cfi_endproc
|
|
1173 .LFE43:
|
|
1175 .section .text.disk_write,"ax",%progbits
|
|
1176 .align 2
|
|
1177 .global disk_write
|
|
1178 .thumb
|
|
1179 .thumb_func
|
|
1181 disk_write:
|
|
1182 .LFB44:
|
|
513:./lib/fatfs/mmc.c ****
|
|
514:./lib/fatfs/mmc.c ****
|
|
515:./lib/fatfs/mmc.c ****
|
|
516:./lib/fatfs/mmc.c **** /*-----------------------------------------------------------------------*/
|
|
517:./lib/fatfs/mmc.c **** /* Write Sector(s) */
|
|
518:./lib/fatfs/mmc.c **** /*-----------------------------------------------------------------------*/
|
|
519:./lib/fatfs/mmc.c ****
|
|
520:./lib/fatfs/mmc.c **** #if _USE_WRITE
|
|
521:./lib/fatfs/mmc.c **** DRESULT disk_write (
|
|
522:./lib/fatfs/mmc.c **** BYTE pdrv, /* Physical drive nmuber (0) */
|
|
523:./lib/fatfs/mmc.c **** const BYTE *buff, /* Pointer to the data to be written */
|
|
524:./lib/fatfs/mmc.c **** DWORD sector, /* Start sector number (LBA) */
|
|
525:./lib/fatfs/mmc.c **** BYTE count /* Sector count (1..255) */
|
|
526:./lib/fatfs/mmc.c **** )
|
|
527:./lib/fatfs/mmc.c **** {
|
|
1183 .loc 1 527 0
|
|
1184 .cfi_startproc
|
|
1185 @ args = 0, pretend = 0, frame = 0
|
|
1186 @ frame_needed = 0, uses_anonymous_args = 0
|
|
1187 .LVL164:
|
|
528:./lib/fatfs/mmc.c **** if (pdrv || !count) return RES_PARERR;
|
|
1188 .loc 1 528 0
|
|
1189 0000 0028 cmp r0, #0
|
|
1190 0002 49D1 bne .L114
|
|
527:./lib/fatfs/mmc.c **** if (pdrv || !count) return RES_PARERR;
|
|
1191 .loc 1 527 0 discriminator 2
|
|
1192 0004 70B5 push {r4, r5, r6, lr}
|
|
1193 .cfi_def_cfa_offset 16
|
|
1194 .cfi_offset 4, -16
|
|
1195 .cfi_offset 5, -12
|
|
1196 .cfi_offset 6, -8
|
|
1197 .cfi_offset 14, -4
|
|
1198 0006 0E46 mov r6, r1
|
|
1199 0008 1546 mov r5, r2
|
|
1200 000a 1C46 mov r4, r3
|
|
1201 .loc 1 528 0 discriminator 2
|
|
1202 000c 002B cmp r3, #0
|
|
1203 000e 45D0 beq .L115
|
|
529:./lib/fatfs/mmc.c **** if (Stat & STA_NOINIT) return RES_NOTRDY;
|
|
1204 .loc 1 529 0
|
|
1205 0010 254B ldr r3, .L121
|
|
1206 .LVL165:
|
|
1207 0012 1B78 ldrb r3, [r3] @ zero_extendqisi2
|
|
1208 0014 13F0010F tst r3, #1
|
|
1209 0018 42D1 bne .L116
|
|
530:./lib/fatfs/mmc.c **** if (Stat & STA_PROTECT) return RES_WRPRT;
|
|
1210 .loc 1 530 0
|
|
1211 001a 234B ldr r3, .L121
|
|
1212 001c 1B78 ldrb r3, [r3] @ zero_extendqisi2
|
|
1213 001e 13F0040F tst r3, #4
|
|
1214 0022 3FD1 bne .L117
|
|
531:./lib/fatfs/mmc.c ****
|
|
532:./lib/fatfs/mmc.c **** if (!(CardType & CT_BLOCK)) sector *= 512; /* Convert to byte address if needed */
|
|
1215 .loc 1 532 0
|
|
1216 0024 214B ldr r3, .L121+4
|
|
1217 0026 1B68 ldr r3, [r3]
|
|
1218 0028 13F0080F tst r3, #8
|
|
1219 002c 08BF it eq
|
|
1220 002e 5502 lsleq r5, r2, #9
|
|
1221 .LVL166:
|
|
533:./lib/fatfs/mmc.c ****
|
|
534:./lib/fatfs/mmc.c **** if (count == 1) { /* Single block write */
|
|
1222 .loc 1 534 0
|
|
1223 0030 012C cmp r4, #1
|
|
1224 0032 0CD1 bne .L109
|
|
535:./lib/fatfs/mmc.c **** if ((send_cmd(CMD24, sector) == 0) /* WRITE_BLOCK */
|
|
1225 .loc 1 535 0
|
|
1226 0034 1820 movs r0, #24
|
|
1227 .LVL167:
|
|
1228 0036 2946 mov r1, r5
|
|
1229 .LVL168:
|
|
1230 0038 FFF7FEFF bl send_cmd
|
|
1231 .LVL169:
|
|
1232 003c 30BB cbnz r0, .L110
|
|
536:./lib/fatfs/mmc.c **** && xmit_datablock(buff, 0xFE))
|
|
1233 .loc 1 536 0
|
|
1234 003e 3046 mov r0, r6
|
|
1235 0040 FE21 movs r1, #254
|
|
1236 0042 FFF7FEFF bl xmit_datablock
|
|
1237 .LVL170:
|
|
1238 0046 B0FA80F4 clz r4, r0
|
|
1239 004a 6409 lsrs r4, r4, #5
|
|
1240 004c 1EE0 b .L110
|
|
1241 .LVL171:
|
|
1242 .L109:
|
|
537:./lib/fatfs/mmc.c **** count = 0;
|
|
538:./lib/fatfs/mmc.c **** }
|
|
539:./lib/fatfs/mmc.c **** else { /* Multiple block write */
|
|
540:./lib/fatfs/mmc.c **** if (CardType & CT_SDC) send_cmd(ACMD23, count);
|
|
1243 .loc 1 540 0
|
|
1244 004e 13F0060F tst r3, #6
|
|
1245 0052 03D0 beq .L111
|
|
1246 .loc 1 540 0 is_stmt 0 discriminator 1
|
|
1247 0054 9720 movs r0, #151
|
|
1248 .LVL172:
|
|
1249 0056 2146 mov r1, r4
|
|
1250 .LVL173:
|
|
1251 0058 FFF7FEFF bl send_cmd
|
|
1252 .LVL174:
|
|
1253 .L111:
|
|
541:./lib/fatfs/mmc.c **** if (send_cmd(CMD25, sector) == 0) { /* WRITE_MULTIPLE_BLOCK */
|
|
1254 .loc 1 541 0 is_stmt 1
|
|
1255 005c 1920 movs r0, #25
|
|
1256 005e 2946 mov r1, r5
|
|
1257 0060 FFF7FEFF bl send_cmd
|
|
1258 .LVL175:
|
|
1259 0064 90B9 cbnz r0, .L110
|
|
542:./lib/fatfs/mmc.c **** do {
|
|
543:./lib/fatfs/mmc.c **** if (!xmit_datablock(buff, 0xFC)) break;
|
|
1260 .loc 1 543 0
|
|
1261 0066 FC25 movs r5, #252
|
|
1262 .LVL176:
|
|
1263 .L118:
|
|
1264 0068 3046 mov r0, r6
|
|
1265 006a 2946 mov r1, r5
|
|
1266 006c FFF7FEFF bl xmit_datablock
|
|
1267 .LVL177:
|
|
1268 0070 28B1 cbz r0, .L112
|
|
544:./lib/fatfs/mmc.c **** buff += 512;
|
|
1269 .loc 1 544 0
|
|
1270 0072 06F50076 add r6, r6, #512
|
|
1271 .LVL178:
|
|
545:./lib/fatfs/mmc.c **** } while (--count);
|
|
1272 .loc 1 545 0
|
|
1273 0076 601E subs r0, r4, #1
|
|
1274 .LVL179:
|
|
1275 0078 10F0FF04 ands r4, r0, #255
|
|
1276 007c F4D1 bne .L118
|
|
1277 .LVL180:
|
|
1278 .L112:
|
|
546:./lib/fatfs/mmc.c **** if (!xmit_datablock(0, 0xFD)) /* STOP_TRAN token */
|
|
1279 .loc 1 546 0
|
|
1280 007e 0020 movs r0, #0
|
|
1281 0080 FD21 movs r1, #253
|
|
1282 0082 FFF7FEFF bl xmit_datablock
|
|
1283 .LVL181:
|
|
1284 0086 0028 cmp r0, #0
|
|
547:./lib/fatfs/mmc.c **** count = 1;
|
|
1285 .loc 1 547 0
|
|
1286 0088 08BF it eq
|
|
1287 008a 0124 moveq r4, #1
|
|
1288 .LVL182:
|
|
1289 .L110:
|
|
548:./lib/fatfs/mmc.c **** }
|
|
549:./lib/fatfs/mmc.c **** }
|
|
550:./lib/fatfs/mmc.c **** deselect();
|
|
1290 .loc 1 550 0
|
|
1291 008c FFF7FEFF bl deselect
|
|
1292 .LVL183:
|
|
551:./lib/fatfs/mmc.c ****
|
|
552:./lib/fatfs/mmc.c **** return count ? RES_ERROR : RES_OK;
|
|
1293 .loc 1 552 0
|
|
1294 0090 201C adds r0, r4, #0
|
|
1295 0092 18BF it ne
|
|
1296 0094 0120 movne r0, #1
|
|
1297 0096 70BD pop {r4, r5, r6, pc}
|
|
1298 .LVL184:
|
|
1299 .L114:
|
|
1300 .cfi_def_cfa_offset 0
|
|
1301 .cfi_restore 4
|
|
1302 .cfi_restore 5
|
|
1303 .cfi_restore 6
|
|
1304 .cfi_restore 14
|
|
528:./lib/fatfs/mmc.c **** if (Stat & STA_NOINIT) return RES_NOTRDY;
|
|
1305 .loc 1 528 0
|
|
1306 0098 0420 movs r0, #4
|
|
1307 .LVL185:
|
|
553:./lib/fatfs/mmc.c **** }
|
|
1308 .loc 1 553 0
|
|
1309 009a 7047 bx lr
|
|
1310 .LVL186:
|
|
1311 .L115:
|
|
1312 .cfi_def_cfa_offset 16
|
|
1313 .cfi_offset 4, -16
|
|
1314 .cfi_offset 5, -12
|
|
1315 .cfi_offset 6, -8
|
|
1316 .cfi_offset 14, -4
|
|
528:./lib/fatfs/mmc.c **** if (Stat & STA_NOINIT) return RES_NOTRDY;
|
|
1317 .loc 1 528 0
|
|
1318 009c 0420 movs r0, #4
|
|
1319 .LVL187:
|
|
1320 009e 70BD pop {r4, r5, r6, pc}
|
|
1321 .LVL188:
|
|
1322 .L116:
|
|
529:./lib/fatfs/mmc.c **** if (Stat & STA_PROTECT) return RES_WRPRT;
|
|
1323 .loc 1 529 0
|
|
1324 00a0 0320 movs r0, #3
|
|
1325 .LVL189:
|
|
1326 00a2 70BD pop {r4, r5, r6, pc}
|
|
1327 .LVL190:
|
|
1328 .L117:
|
|
530:./lib/fatfs/mmc.c ****
|
|
1329 .loc 1 530 0
|
|
1330 00a4 0220 movs r0, #2
|
|
1331 .LVL191:
|
|
1332 .loc 1 553 0
|
|
1333 00a6 70BD pop {r4, r5, r6, pc}
|
|
1334 .L122:
|
|
1335 .align 2
|
|
1336 .L121:
|
|
1337 00a8 00000000 .word .LANCHOR0
|
|
1338 00ac 00000000 .word .LANCHOR1
|
|
1339 .cfi_endproc
|
|
1340 .LFE44:
|
|
1342 .section .text.disk_ioctl,"ax",%progbits
|
|
1343 .align 2
|
|
1344 .global disk_ioctl
|
|
1345 .thumb
|
|
1346 .thumb_func
|
|
1348 disk_ioctl:
|
|
1349 .LFB45:
|
|
554:./lib/fatfs/mmc.c **** #endif
|
|
555:./lib/fatfs/mmc.c ****
|
|
556:./lib/fatfs/mmc.c ****
|
|
557:./lib/fatfs/mmc.c ****
|
|
558:./lib/fatfs/mmc.c **** /*-----------------------------------------------------------------------*/
|
|
559:./lib/fatfs/mmc.c **** /* Miscellaneous Functions */
|
|
560:./lib/fatfs/mmc.c **** /*-----------------------------------------------------------------------*/
|
|
561:./lib/fatfs/mmc.c ****
|
|
562:./lib/fatfs/mmc.c **** #if _USE_IOCTL
|
|
563:./lib/fatfs/mmc.c **** DRESULT disk_ioctl (
|
|
564:./lib/fatfs/mmc.c **** BYTE pdrv, /* Physical drive nmuber (0) */
|
|
565:./lib/fatfs/mmc.c **** BYTE cmd, /* Control code */
|
|
566:./lib/fatfs/mmc.c **** void *buff /* Buffer to send/receive data block */
|
|
567:./lib/fatfs/mmc.c **** )
|
|
568:./lib/fatfs/mmc.c **** {
|
|
1350 .loc 1 568 0
|
|
1351 .cfi_startproc
|
|
1352 @ args = 0, pretend = 0, frame = 16
|
|
1353 @ frame_needed = 0, uses_anonymous_args = 0
|
|
1354 .LVL192:
|
|
569:./lib/fatfs/mmc.c **** DRESULT res;
|
|
570:./lib/fatfs/mmc.c **** BYTE n, csd[16], *ptr = buff;
|
|
571:./lib/fatfs/mmc.c **** DWORD csz;
|
|
572:./lib/fatfs/mmc.c ****
|
|
573:./lib/fatfs/mmc.c ****
|
|
574:./lib/fatfs/mmc.c **** if (pdrv) return RES_PARERR;
|
|
1355 .loc 1 574 0
|
|
1356 0000 0028 cmp r0, #0
|
|
1357 0002 40F02781 bne .L140
|
|
575:./lib/fatfs/mmc.c **** if (Stat & STA_NOINIT) return RES_NOTRDY;
|
|
1358 .loc 1 575 0
|
|
1359 0006 964B ldr r3, .L158
|
|
1360 0008 1B78 ldrb r3, [r3] @ zero_extendqisi2
|
|
1361 000a 13F0010F tst r3, #1
|
|
1362 000e 40F02381 bne .L141
|
|
568:./lib/fatfs/mmc.c **** DRESULT res;
|
|
1363 .loc 1 568 0
|
|
1364 0012 70B5 push {r4, r5, r6, lr}
|
|
1365 .cfi_def_cfa_offset 16
|
|
1366 .cfi_offset 4, -16
|
|
1367 .cfi_offset 5, -12
|
|
1368 .cfi_offset 6, -8
|
|
1369 .cfi_offset 14, -4
|
|
1370 0014 84B0 sub sp, sp, #16
|
|
1371 .cfi_def_cfa_offset 32
|
|
1372 0016 1446 mov r4, r2
|
|
1373 .LVL193:
|
|
576:./lib/fatfs/mmc.c ****
|
|
577:./lib/fatfs/mmc.c **** res = RES_ERROR;
|
|
578:./lib/fatfs/mmc.c **** switch (cmd) {
|
|
1374 .loc 1 578 0
|
|
1375 0018 0E29 cmp r1, #14
|
|
1376 001a 00F20081 bhi .L142
|
|
1377 001e DFE811F0 tbh [pc, r1, lsl #1]
|
|
1378 .L127:
|
|
1379 0022 0F00 .2byte (.L126-.L127)/2
|
|
1380 0024 1500 .2byte (.L128-.L127)/2
|
|
1381 0026 FE00 .2byte (.L142-.L127)/2
|
|
1382 0028 5D00 .2byte (.L129-.L127)/2
|
|
1383 002a FE00 .2byte (.L142-.L127)/2
|
|
1384 002c FE00 .2byte (.L142-.L127)/2
|
|
1385 002e FE00 .2byte (.L142-.L127)/2
|
|
1386 0030 FE00 .2byte (.L142-.L127)/2
|
|
1387 0032 FE00 .2byte (.L142-.L127)/2
|
|
1388 0034 FE00 .2byte (.L142-.L127)/2
|
|
1389 0036 B800 .2byte (.L130-.L127)/2
|
|
1390 0038 BD00 .2byte (.L131-.L127)/2
|
|
1391 003a CB00 .2byte (.L132-.L127)/2
|
|
1392 003c D800 .2byte (.L133-.L127)/2
|
|
1393 003e E900 .2byte (.L134-.L127)/2
|
|
1394 .p2align 1
|
|
1395 .L126:
|
|
579:./lib/fatfs/mmc.c **** case CTRL_SYNC : /* Flush write-back cache, Wait for end of internal process */
|
|
580:./lib/fatfs/mmc.c **** if (select()) res = RES_OK;
|
|
1396 .loc 1 580 0
|
|
1397 0040 FFF7FEFF bl select
|
|
1398 .LVL194:
|
|
1399 0044 B0FA80F4 clz r4, r0
|
|
1400 .LVL195:
|
|
1401 0048 6409 lsrs r4, r4, #5
|
|
1402 004a FFE0 b .L125
|
|
1403 .LVL196:
|
|
1404 .L128:
|
|
581:./lib/fatfs/mmc.c **** break;
|
|
582:./lib/fatfs/mmc.c ****
|
|
583:./lib/fatfs/mmc.c **** case GET_SECTOR_COUNT : /* Get number of sectors on the disk (WORD) */
|
|
584:./lib/fatfs/mmc.c **** if ((send_cmd(CMD9, 0) == 0) && rcvr_datablock(csd, 16)) {
|
|
1405 .loc 1 584 0
|
|
1406 004c 0920 movs r0, #9
|
|
1407 .LVL197:
|
|
1408 004e 0021 movs r1, #0
|
|
1409 .LVL198:
|
|
1410 0050 FFF7FEFF bl send_cmd
|
|
1411 .LVL199:
|
|
1412 0054 0028 cmp r0, #0
|
|
1413 0056 40F0E480 bne .L143
|
|
1414 .loc 1 584 0 is_stmt 0 discriminator 1
|
|
1415 005a 6846 mov r0, sp
|
|
1416 005c 1021 movs r1, #16
|
|
1417 005e FFF7FEFF bl rcvr_datablock
|
|
1418 .LVL200:
|
|
1419 0062 0028 cmp r0, #0
|
|
1420 0064 00F0DF80 beq .L144
|
|
585:./lib/fatfs/mmc.c **** if ((csd[0] >> 6) == 1) { /* SDv2? */
|
|
1421 .loc 1 585 0 is_stmt 1
|
|
1422 0068 9DF80030 ldrb r3, [sp] @ zero_extendqisi2
|
|
1423 006c 9B09 lsrs r3, r3, #6
|
|
1424 006e 012B cmp r3, #1
|
|
1425 0070 10D1 bne .L135
|
|
1426 .LVL201:
|
|
586:./lib/fatfs/mmc.c **** csz = csd[9] + ((WORD)csd[8] << 8) + ((DWORD)(csd[7] & 63) << 16) + 1;
|
|
1427 .loc 1 586 0
|
|
1428 0072 9DF80730 ldrb r3, [sp, #7] @ zero_extendqisi2
|
|
1429 0076 03F03F03 and r3, r3, #63
|
|
1430 007a 1B04 lsls r3, r3, #16
|
|
1431 007c 591C adds r1, r3, #1
|
|
1432 007e 9DF80920 ldrb r2, [sp, #9] @ zero_extendqisi2
|
|
1433 0082 9DF80830 ldrb r3, [sp, #8] @ zero_extendqisi2
|
|
1434 .LVL202:
|
|
1435 0086 02EB0323 add r3, r2, r3, lsl #8
|
|
1436 .LVL203:
|
|
1437 008a 0B44 add r3, r3, r1
|
|
587:./lib/fatfs/mmc.c **** *(DWORD*)buff = csz << 10;
|
|
1438 .loc 1 587 0
|
|
1439 008c 9B02 lsls r3, r3, #10
|
|
1440 008e 2360 str r3, [r4]
|
|
588:./lib/fatfs/mmc.c **** } else { /* SDv1 or MMCv3 */
|
|
589:./lib/fatfs/mmc.c **** n = (csd[5] & 15) + ((csd[10] & 128) >> 7) + ((csd[9] & 3) << 1) + 2;
|
|
590:./lib/fatfs/mmc.c **** csz = (csd[8] >> 6) + ((WORD)csd[7] << 2) + ((WORD)(csd[6] & 3) << 10) + 1;
|
|
591:./lib/fatfs/mmc.c **** *(DWORD*)buff = csz << (n - 9);
|
|
592:./lib/fatfs/mmc.c **** }
|
|
593:./lib/fatfs/mmc.c **** res = RES_OK;
|
|
1441 .loc 1 593 0
|
|
1442 0090 0024 movs r4, #0
|
|
1443 .LVL204:
|
|
1444 0092 DBE0 b .L125
|
|
1445 .LVL205:
|
|
1446 .L135:
|
|
590:./lib/fatfs/mmc.c **** *(DWORD*)buff = csz << (n - 9);
|
|
1447 .loc 1 590 0
|
|
1448 0094 9DF80820 ldrb r2, [sp, #8] @ zero_extendqisi2
|
|
1449 0098 9DF80730 ldrb r3, [sp, #7] @ zero_extendqisi2
|
|
1450 .LVL206:
|
|
1451 009c 9B00 lsls r3, r3, #2
|
|
1452 .LVL207:
|
|
1453 009e 03EB9213 add r3, r3, r2, lsr #6
|
|
1454 00a2 9DF80620 ldrb r2, [sp, #6] @ zero_extendqisi2
|
|
1455 00a6 02F00302 and r2, r2, #3
|
|
1456 00aa 03EB8223 add r3, r3, r2, lsl #10
|
|
1457 00ae 5A1C adds r2, r3, #1
|
|
589:./lib/fatfs/mmc.c **** csz = (csd[8] >> 6) + ((WORD)csd[7] << 2) + ((WORD)(csd[6] & 3) << 10) + 1;
|
|
1458 .loc 1 589 0
|
|
1459 00b0 9DF80530 ldrb r3, [sp, #5] @ zero_extendqisi2
|
|
1460 00b4 03F00F03 and r3, r3, #15
|
|
1461 00b8 9DF80A10 ldrb r1, [sp, #10] @ zero_extendqisi2
|
|
1462 00bc 03EBD113 add r3, r3, r1, lsr #7
|
|
1463 00c0 0233 adds r3, r3, #2
|
|
1464 00c2 9DF80910 ldrb r1, [sp, #9] @ zero_extendqisi2
|
|
1465 00c6 01F00301 and r1, r1, #3
|
|
1466 00ca 03EB4103 add r3, r3, r1, lsl #1
|
|
591:./lib/fatfs/mmc.c **** }
|
|
1467 .loc 1 591 0
|
|
1468 00ce DBB2 uxtb r3, r3
|
|
1469 00d0 093B subs r3, r3, #9
|
|
1470 00d2 02FA03F3 lsl r3, r2, r3
|
|
1471 00d6 2360 str r3, [r4]
|
|
1472 .loc 1 593 0
|
|
1473 00d8 0024 movs r4, #0
|
|
1474 .LVL208:
|
|
1475 00da B7E0 b .L125
|
|
1476 .LVL209:
|
|
1477 .L129:
|
|
594:./lib/fatfs/mmc.c **** }
|
|
595:./lib/fatfs/mmc.c **** break;
|
|
596:./lib/fatfs/mmc.c ****
|
|
597:./lib/fatfs/mmc.c **** case GET_BLOCK_SIZE : /* Get erase block size in unit of sectors (DWORD) */
|
|
598:./lib/fatfs/mmc.c **** if (CardType & CT_SD2) { /* SDv2? */
|
|
1478 .loc 1 598 0
|
|
1479 00dc 614B ldr r3, .L158+4
|
|
1480 00de 1B68 ldr r3, [r3]
|
|
1481 00e0 13F0040F tst r3, #4
|
|
1482 00e4 21D0 beq .L136
|
|
599:./lib/fatfs/mmc.c **** if (send_cmd(ACMD13, 0) == 0) { /* Read SD status */
|
|
1483 .loc 1 599 0
|
|
1484 00e6 8D20 movs r0, #141
|
|
1485 .LVL210:
|
|
1486 00e8 0021 movs r1, #0
|
|
1487 .LVL211:
|
|
1488 00ea FFF7FEFF bl send_cmd
|
|
1489 .LVL212:
|
|
1490 00ee 0028 cmp r0, #0
|
|
1491 00f0 40F09B80 bne .L145
|
|
600:./lib/fatfs/mmc.c **** xchg_spi(0xFF);
|
|
1492 .loc 1 600 0
|
|
1493 00f4 FF20 movs r0, #255
|
|
1494 00f6 FFF7FEFF bl xchg_spi
|
|
1495 .LVL213:
|
|
601:./lib/fatfs/mmc.c **** if (rcvr_datablock(csd, 16)) { /* Read partial block */
|
|
1496 .loc 1 601 0
|
|
1497 00fa 6846 mov r0, sp
|
|
1498 00fc 1021 movs r1, #16
|
|
1499 00fe FFF7FEFF bl rcvr_datablock
|
|
1500 .LVL214:
|
|
1501 0102 0028 cmp r0, #0
|
|
1502 0104 00F09380 beq .L146
|
|
1503 0108 3025 movs r5, #48
|
|
602:./lib/fatfs/mmc.c **** for (n = 64 - 16; n; n--) xchg_spi(0xFF); /* Purge trailing data */
|
|
1504 .loc 1 602 0
|
|
1505 010a FF26 movs r6, #255
|
|
1506 .L137:
|
|
1507 .LVL215:
|
|
1508 .loc 1 602 0 is_stmt 0 discriminator 3
|
|
1509 010c 3046 mov r0, r6
|
|
1510 010e FFF7FEFF bl xchg_spi
|
|
1511 .LVL216:
|
|
1512 0112 6B1E subs r3, r5, #1
|
|
1513 0114 13F0FF05 ands r5, r3, #255
|
|
1514 .LVL217:
|
|
1515 0118 F8D1 bne .L137
|
|
603:./lib/fatfs/mmc.c **** *(DWORD*)buff = 16UL << (csd[10] >> 4);
|
|
1516 .loc 1 603 0 is_stmt 1
|
|
1517 011a 9DF80A20 ldrb r2, [sp, #10] @ zero_extendqisi2
|
|
1518 011e 1209 lsrs r2, r2, #4
|
|
1519 0120 1023 movs r3, #16
|
|
1520 0122 9340 lsls r3, r3, r2
|
|
1521 0124 2360 str r3, [r4]
|
|
1522 .LVL218:
|
|
604:./lib/fatfs/mmc.c **** res = RES_OK;
|
|
1523 .loc 1 604 0
|
|
1524 0126 0024 movs r4, #0
|
|
1525 .LVL219:
|
|
1526 0128 90E0 b .L125
|
|
1527 .LVL220:
|
|
1528 .L136:
|
|
605:./lib/fatfs/mmc.c **** }
|
|
606:./lib/fatfs/mmc.c **** }
|
|
607:./lib/fatfs/mmc.c **** } else { /* SDv1 or MMCv3 */
|
|
608:./lib/fatfs/mmc.c **** if ((send_cmd(CMD9, 0) == 0) && rcvr_datablock(csd, 16)) { /* Read CSD */
|
|
1529 .loc 1 608 0
|
|
1530 012a 0920 movs r0, #9
|
|
1531 .LVL221:
|
|
1532 012c 0021 movs r1, #0
|
|
1533 .LVL222:
|
|
1534 012e FFF7FEFF bl send_cmd
|
|
1535 .LVL223:
|
|
1536 0132 0028 cmp r0, #0
|
|
1537 0134 7DD1 bne .L147
|
|
1538 .loc 1 608 0 is_stmt 0 discriminator 1
|
|
1539 0136 6846 mov r0, sp
|
|
1540 0138 1021 movs r1, #16
|
|
1541 013a FFF7FEFF bl rcvr_datablock
|
|
1542 .LVL224:
|
|
1543 013e 0028 cmp r0, #0
|
|
1544 0140 79D0 beq .L148
|
|
609:./lib/fatfs/mmc.c **** if (CardType & CT_SD1) { /* SDv1 */
|
|
1545 .loc 1 609 0 is_stmt 1
|
|
1546 0142 484B ldr r3, .L158+4
|
|
1547 0144 1B68 ldr r3, [r3]
|
|
1548 0146 13F0020F tst r3, #2
|
|
1549 014a 11D0 beq .L138
|
|
610:./lib/fatfs/mmc.c **** *(DWORD*)buff = (((csd[10] & 63) << 1) + ((WORD)(csd[11] & 128) >> 7) + 1) << ((csd[13] >> 6)
|
|
1550 .loc 1 610 0
|
|
1551 014c 9DF80A30 ldrb r3, [sp, #10] @ zero_extendqisi2
|
|
1552 0150 03F03F02 and r2, r3, #63
|
|
1553 0154 9DF80B30 ldrb r3, [sp, #11] @ zero_extendqisi2
|
|
1554 0158 DB09 lsrs r3, r3, #7
|
|
1555 015a 03EB4203 add r3, r3, r2, lsl #1
|
|
1556 015e 0133 adds r3, r3, #1
|
|
1557 0160 9DF80D20 ldrb r2, [sp, #13] @ zero_extendqisi2
|
|
1558 0164 9209 lsrs r2, r2, #6
|
|
1559 0166 013A subs r2, r2, #1
|
|
1560 0168 9340 lsls r3, r3, r2
|
|
1561 016a 2360 str r3, [r4]
|
|
611:./lib/fatfs/mmc.c **** } else { /* MMCv3 */
|
|
612:./lib/fatfs/mmc.c **** *(DWORD*)buff = ((WORD)((csd[10] & 124) >> 2) + 1) * (((csd[11] & 3) << 3) + ((csd[11] & 224)
|
|
613:./lib/fatfs/mmc.c **** }
|
|
614:./lib/fatfs/mmc.c **** res = RES_OK;
|
|
1562 .loc 1 614 0
|
|
1563 016c 0024 movs r4, #0
|
|
1564 .LVL225:
|
|
1565 016e 6DE0 b .L125
|
|
1566 .LVL226:
|
|
1567 .L138:
|
|
612:./lib/fatfs/mmc.c **** }
|
|
1568 .loc 1 612 0
|
|
1569 0170 9DF80B30 ldrb r3, [sp, #11] @ zero_extendqisi2
|
|
1570 0174 9DF80A10 ldrb r1, [sp, #10] @ zero_extendqisi2
|
|
1571 0178 C1F38401 ubfx r1, r1, #2, #5
|
|
1572 017c 03F00300 and r0, r3, #3
|
|
1573 0180 5A09 lsrs r2, r3, #5
|
|
1574 0182 02EBC002 add r2, r2, r0, lsl #3
|
|
1575 0186 531C adds r3, r2, #1
|
|
1576 0188 01FB0333 mla r3, r1, r3, r3
|
|
1577 018c 2360 str r3, [r4]
|
|
1578 .loc 1 614 0
|
|
1579 018e 0024 movs r4, #0
|
|
1580 .LVL227:
|
|
1581 0190 5CE0 b .L125
|
|
1582 .LVL228:
|
|
1583 .L130:
|
|
615:./lib/fatfs/mmc.c **** }
|
|
616:./lib/fatfs/mmc.c **** }
|
|
617:./lib/fatfs/mmc.c **** break;
|
|
618:./lib/fatfs/mmc.c ****
|
|
619:./lib/fatfs/mmc.c **** case MMC_GET_TYPE : /* Get card type flags (1 byte) */
|
|
620:./lib/fatfs/mmc.c **** *ptr = CardType;
|
|
1584 .loc 1 620 0
|
|
1585 0192 344B ldr r3, .L158+4
|
|
1586 0194 1B68 ldr r3, [r3]
|
|
1587 0196 1370 strb r3, [r2]
|
|
1588 .LVL229:
|
|
621:./lib/fatfs/mmc.c **** res = RES_OK;
|
|
1589 .loc 1 621 0
|
|
1590 0198 0024 movs r4, #0
|
|
622:./lib/fatfs/mmc.c **** break;
|
|
1591 .loc 1 622 0
|
|
1592 019a 57E0 b .L125
|
|
1593 .LVL230:
|
|
1594 .L131:
|
|
623:./lib/fatfs/mmc.c ****
|
|
624:./lib/fatfs/mmc.c **** case MMC_GET_CSD : /* Receive CSD as a data block (16 bytes) */
|
|
625:./lib/fatfs/mmc.c **** if ((send_cmd(CMD9, 0) == 0) /* READ_CSD */
|
|
1595 .loc 1 625 0
|
|
1596 019c 0920 movs r0, #9
|
|
1597 .LVL231:
|
|
1598 019e 0021 movs r1, #0
|
|
1599 .LVL232:
|
|
1600 01a0 FFF7FEFF bl send_cmd
|
|
1601 .LVL233:
|
|
1602 01a4 0028 cmp r0, #0
|
|
1603 01a6 48D1 bne .L149
|
|
626:./lib/fatfs/mmc.c **** && rcvr_datablock(buff, 16))
|
|
1604 .loc 1 626 0
|
|
1605 01a8 2046 mov r0, r4
|
|
1606 01aa 1021 movs r1, #16
|
|
1607 01ac FFF7FEFF bl rcvr_datablock
|
|
1608 .LVL234:
|
|
580:./lib/fatfs/mmc.c **** break;
|
|
1609 .loc 1 580 0
|
|
1610 01b0 B0FA80F4 clz r4, r0
|
|
1611 .LVL235:
|
|
1612 01b4 6409 lsrs r4, r4, #5
|
|
1613 01b6 49E0 b .L125
|
|
1614 .LVL236:
|
|
1615 .L132:
|
|
627:./lib/fatfs/mmc.c **** res = RES_OK;
|
|
628:./lib/fatfs/mmc.c **** break;
|
|
629:./lib/fatfs/mmc.c ****
|
|
630:./lib/fatfs/mmc.c **** case MMC_GET_CID : /* Receive CID as a data block (16 bytes) */
|
|
631:./lib/fatfs/mmc.c **** if ((send_cmd(CMD10, 0) == 0) /* READ_CID */
|
|
1616 .loc 1 631 0
|
|
1617 01b8 0A20 movs r0, #10
|
|
1618 .LVL237:
|
|
1619 01ba 0021 movs r1, #0
|
|
1620 .LVL238:
|
|
1621 01bc FFF7FEFF bl send_cmd
|
|
1622 .LVL239:
|
|
1623 01c0 E8BB cbnz r0, .L150
|
|
632:./lib/fatfs/mmc.c **** && rcvr_datablock(buff, 16))
|
|
1624 .loc 1 632 0
|
|
1625 01c2 2046 mov r0, r4
|
|
1626 01c4 1021 movs r1, #16
|
|
1627 01c6 FFF7FEFF bl rcvr_datablock
|
|
1628 .LVL240:
|
|
580:./lib/fatfs/mmc.c **** break;
|
|
1629 .loc 1 580 0
|
|
1630 01ca B0FA80F4 clz r4, r0
|
|
1631 .LVL241:
|
|
1632 01ce 6409 lsrs r4, r4, #5
|
|
1633 01d0 3CE0 b .L125
|
|
1634 .LVL242:
|
|
1635 .L133:
|
|
633:./lib/fatfs/mmc.c **** res = RES_OK;
|
|
634:./lib/fatfs/mmc.c **** break;
|
|
635:./lib/fatfs/mmc.c ****
|
|
636:./lib/fatfs/mmc.c **** case MMC_GET_OCR : /* Receive OCR as an R3 resp (4 bytes) */
|
|
637:./lib/fatfs/mmc.c **** if (send_cmd(CMD58, 0) == 0) { /* READ_OCR */
|
|
1636 .loc 1 637 0
|
|
1637 01d2 3A20 movs r0, #58
|
|
1638 .LVL243:
|
|
1639 01d4 0021 movs r1, #0
|
|
1640 .LVL244:
|
|
1641 01d6 FFF7FEFF bl send_cmd
|
|
1642 .LVL245:
|
|
1643 01da 90BB cbnz r0, .L151
|
|
1644 01dc 651E subs r5, r4, #1
|
|
1645 01de 0334 adds r4, r4, #3
|
|
1646 .LVL246:
|
|
638:./lib/fatfs/mmc.c **** for (n = 0; n < 4; n++)
|
|
639:./lib/fatfs/mmc.c **** *((BYTE*)buff+n) = xchg_spi(0xFF);
|
|
1647 .loc 1 639 0
|
|
1648 01e0 FF26 movs r6, #255
|
|
1649 .L139:
|
|
1650 .LVL247:
|
|
1651 .loc 1 639 0 is_stmt 0 discriminator 3
|
|
1652 01e2 3046 mov r0, r6
|
|
1653 01e4 FFF7FEFF bl xchg_spi
|
|
1654 .LVL248:
|
|
1655 01e8 05F8010F strb r0, [r5, #1]!
|
|
1656 .LVL249:
|
|
638:./lib/fatfs/mmc.c **** for (n = 0; n < 4; n++)
|
|
1657 .loc 1 638 0 is_stmt 1 discriminator 3
|
|
1658 01ec A542 cmp r5, r4
|
|
1659 01ee F8D1 bne .L139
|
|
640:./lib/fatfs/mmc.c **** res = RES_OK;
|
|
1660 .loc 1 640 0
|
|
1661 01f0 0024 movs r4, #0
|
|
1662 .LVL250:
|
|
1663 01f2 2BE0 b .L125
|
|
1664 .LVL251:
|
|
1665 .L134:
|
|
641:./lib/fatfs/mmc.c **** }
|
|
642:./lib/fatfs/mmc.c **** break;
|
|
643:./lib/fatfs/mmc.c ****
|
|
644:./lib/fatfs/mmc.c **** case MMC_GET_SDSTAT : /* Receive SD status as a data block (64 bytes) */
|
|
645:./lib/fatfs/mmc.c **** if ((CardType & CT_SD2) && send_cmd(ACMD13, 0) == 0) { /* SD_STATUS */
|
|
1666 .loc 1 645 0
|
|
1667 01f4 1B4B ldr r3, .L158+4
|
|
1668 01f6 1B68 ldr r3, [r3]
|
|
1669 01f8 13F0040F tst r3, #4
|
|
1670 01fc 23D0 beq .L152
|
|
1671 .loc 1 645 0 is_stmt 0 discriminator 1
|
|
1672 01fe 8D20 movs r0, #141
|
|
1673 .LVL252:
|
|
1674 0200 0021 movs r1, #0
|
|
1675 .LVL253:
|
|
1676 0202 FFF7FEFF bl send_cmd
|
|
1677 .LVL254:
|
|
1678 0206 00BB cbnz r0, .L153
|
|
646:./lib/fatfs/mmc.c **** xchg_spi(0xFF);
|
|
1679 .loc 1 646 0 is_stmt 1
|
|
1680 0208 FF20 movs r0, #255
|
|
1681 020a FFF7FEFF bl xchg_spi
|
|
1682 .LVL255:
|
|
647:./lib/fatfs/mmc.c **** if (rcvr_datablock(buff, 64))
|
|
1683 .loc 1 647 0
|
|
1684 020e 2046 mov r0, r4
|
|
1685 0210 4021 movs r1, #64
|
|
1686 0212 FFF7FEFF bl rcvr_datablock
|
|
1687 .LVL256:
|
|
580:./lib/fatfs/mmc.c **** break;
|
|
1688 .loc 1 580 0
|
|
1689 0216 B0FA80F4 clz r4, r0
|
|
1690 .LVL257:
|
|
1691 021a 6409 lsrs r4, r4, #5
|
|
1692 021c 16E0 b .L125
|
|
1693 .LVL258:
|
|
1694 .L142:
|
|
648:./lib/fatfs/mmc.c **** res = RES_OK;
|
|
649:./lib/fatfs/mmc.c **** }
|
|
650:./lib/fatfs/mmc.c **** break;
|
|
651:./lib/fatfs/mmc.c ****
|
|
652:./lib/fatfs/mmc.c **** default:
|
|
653:./lib/fatfs/mmc.c **** res = RES_PARERR;
|
|
1695 .loc 1 653 0
|
|
1696 021e 0424 movs r4, #4
|
|
1697 0220 14E0 b .L125
|
|
1698 .LVL259:
|
|
1699 .L143:
|
|
577:./lib/fatfs/mmc.c **** switch (cmd) {
|
|
1700 .loc 1 577 0
|
|
1701 0222 0124 movs r4, #1
|
|
1702 .LVL260:
|
|
1703 0224 12E0 b .L125
|
|
1704 .LVL261:
|
|
1705 .L144:
|
|
1706 0226 0124 movs r4, #1
|
|
1707 .LVL262:
|
|
1708 0228 10E0 b .L125
|
|
1709 .LVL263:
|
|
1710 .L145:
|
|
1711 022a 0124 movs r4, #1
|
|
1712 .LVL264:
|
|
1713 022c 0EE0 b .L125
|
|
1714 .LVL265:
|
|
1715 .L146:
|
|
1716 022e 0124 movs r4, #1
|
|
1717 .LVL266:
|
|
1718 0230 0CE0 b .L125
|
|
1719 .LVL267:
|
|
1720 .L147:
|
|
1721 0232 0124 movs r4, #1
|
|
1722 .LVL268:
|
|
1723 0234 0AE0 b .L125
|
|
1724 .LVL269:
|
|
1725 .L148:
|
|
1726 0236 0124 movs r4, #1
|
|
1727 .LVL270:
|
|
1728 0238 08E0 b .L125
|
|
1729 .LVL271:
|
|
1730 .L149:
|
|
1731 023a 0124 movs r4, #1
|
|
1732 .LVL272:
|
|
1733 023c 06E0 b .L125
|
|
1734 .LVL273:
|
|
1735 .L150:
|
|
1736 023e 0124 movs r4, #1
|
|
1737 .LVL274:
|
|
1738 0240 04E0 b .L125
|
|
1739 .LVL275:
|
|
1740 .L151:
|
|
1741 0242 0124 movs r4, #1
|
|
1742 .LVL276:
|
|
1743 0244 02E0 b .L125
|
|
1744 .LVL277:
|
|
1745 .L152:
|
|
1746 0246 0124 movs r4, #1
|
|
1747 0248 00E0 b .L125
|
|
1748 .LVL278:
|
|
1749 .L153:
|
|
1750 024a 0124 movs r4, #1
|
|
1751 .LVL279:
|
|
1752 .L125:
|
|
654:./lib/fatfs/mmc.c **** }
|
|
655:./lib/fatfs/mmc.c ****
|
|
656:./lib/fatfs/mmc.c **** deselect();
|
|
1753 .loc 1 656 0
|
|
1754 024c FFF7FEFF bl deselect
|
|
1755 .LVL280:
|
|
657:./lib/fatfs/mmc.c ****
|
|
658:./lib/fatfs/mmc.c **** return res;
|
|
1756 .loc 1 658 0
|
|
1757 0250 2046 mov r0, r4
|
|
1758 0252 03E0 b .L124
|
|
1759 .LVL281:
|
|
1760 .L140:
|
|
1761 .cfi_def_cfa_offset 0
|
|
1762 .cfi_restore 4
|
|
1763 .cfi_restore 5
|
|
1764 .cfi_restore 6
|
|
1765 .cfi_restore 14
|
|
574:./lib/fatfs/mmc.c **** if (Stat & STA_NOINIT) return RES_NOTRDY;
|
|
1766 .loc 1 574 0
|
|
1767 0254 0420 movs r0, #4
|
|
1768 .LVL282:
|
|
1769 0256 7047 bx lr
|
|
1770 .LVL283:
|
|
1771 .L141:
|
|
575:./lib/fatfs/mmc.c ****
|
|
1772 .loc 1 575 0
|
|
1773 0258 0320 movs r0, #3
|
|
1774 .LVL284:
|
|
1775 025a 7047 bx lr
|
|
1776 .LVL285:
|
|
1777 .L124:
|
|
1778 .cfi_def_cfa_offset 32
|
|
1779 .cfi_offset 4, -16
|
|
1780 .cfi_offset 5, -12
|
|
1781 .cfi_offset 6, -8
|
|
1782 .cfi_offset 14, -4
|
|
659:./lib/fatfs/mmc.c **** }
|
|
1783 .loc 1 659 0
|
|
1784 025c 04B0 add sp, sp, #16
|
|
1785 .cfi_def_cfa_offset 16
|
|
1786 @ sp needed
|
|
1787 025e 70BD pop {r4, r5, r6, pc}
|
|
1788 .LVL286:
|
|
1789 .L159:
|
|
1790 .align 2
|
|
1791 .L158:
|
|
1792 0260 00000000 .word .LANCHOR0
|
|
1793 0264 00000000 .word .LANCHOR1
|
|
1794 .cfi_endproc
|
|
1795 .LFE45:
|
|
1797 .section .text.get_fattime,"ax",%progbits
|
|
1798 .align 2
|
|
1799 .global get_fattime
|
|
1800 .thumb
|
|
1801 .thumb_func
|
|
1803 get_fattime:
|
|
1804 .LFB46:
|
|
660:./lib/fatfs/mmc.c **** #endif
|
|
661:./lib/fatfs/mmc.c ****
|
|
662:./lib/fatfs/mmc.c ****
|
|
663:./lib/fatfs/mmc.c **** /*---------------------------------------------------------*/
|
|
664:./lib/fatfs/mmc.c **** /* User Provided Timer Function for FatFs module */
|
|
665:./lib/fatfs/mmc.c **** /*---------------------------------------------------------*/
|
|
666:./lib/fatfs/mmc.c **** /* This is a real time clock service to be called from */
|
|
667:./lib/fatfs/mmc.c **** /* FatFs module. Any valid time must be returned even if */
|
|
668:./lib/fatfs/mmc.c **** /* the system does not support a real time clock. */
|
|
669:./lib/fatfs/mmc.c **** /* This is not required in read-only configuration. */
|
|
670:./lib/fatfs/mmc.c ****
|
|
671:./lib/fatfs/mmc.c **** DWORD get_fattime (void)
|
|
672:./lib/fatfs/mmc.c **** {
|
|
1805 .loc 1 672 0
|
|
1806 .cfi_startproc
|
|
1807 @ args = 0, pretend = 0, frame = 0
|
|
1808 @ frame_needed = 0, uses_anonymous_args = 0
|
|
1809 @ link register save eliminated.
|
|
673:./lib/fatfs/mmc.c **** /* No RTC supprt. Return a fixed value 2013/5/10 0:00:00 */
|
|
674:./lib/fatfs/mmc.c **** return ((DWORD)(2013 - 1980) << 25) /* Y */
|
|
675:./lib/fatfs/mmc.c **** | ((DWORD)5 << 21) /* M */
|
|
676:./lib/fatfs/mmc.c **** | ((DWORD)10 << 16) /* D */
|
|
677:./lib/fatfs/mmc.c **** | ((DWORD)0 << 11) /* H */
|
|
678:./lib/fatfs/mmc.c **** | ((DWORD)0 << 5) /* M */
|
|
679:./lib/fatfs/mmc.c **** | ((DWORD)0 >> 1); /* S */
|
|
680:./lib/fatfs/mmc.c **** }
|
|
1810 .loc 1 680 0
|
|
1811 0000 0048 ldr r0, .L161
|
|
1812 0002 7047 bx lr
|
|
1813 .L162:
|
|
1814 .align 2
|
|
1815 .L161:
|
|
1816 0004 0000AA42 .word 1118437376
|
|
1817 .cfi_endproc
|
|
1818 .LFE46:
|
|
1820 .section .bss.CardType,"aw",%nobits
|
|
1821 .align 2
|
|
1822 .set .LANCHOR1,. + 0
|
|
1825 CardType:
|
|
1826 0000 00000000 .space 4
|
|
1827 .section .data.Stat,"aw",%progbits
|
|
1828 .set .LANCHOR0,. + 0
|
|
1831 Stat:
|
|
1832 0000 01 .byte 1
|
|
1833 .text
|
|
1834 .Letext0:
|
|
1835 .file 2 "../../../Source/third_party/fatfs/src/integer.h"
|
|
1836 .file 3 "../../../Source/third_party/fatfs/src/diskio.h"
|
|
1837 .file 4 "c:\\program files (x86)\\gnu tools arm embedded\\4.9 2015q1\\arm-none-eabi\\include\\mach
|
|
1838 .file 5 "c:\\program files (x86)\\gnu tools arm embedded\\4.9 2015q1\\arm-none-eabi\\include\\stdi
|
|
1839 .file 6 "./lib/CMSIS/CM3/DeviceSupport/ST/STM32F10x/stm32f10x.h"
|
|
1840 .file 7 "./lib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_gpio.h"
|
|
1841 .file 8 "./lib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_spi.h"
|
|
1842 .file 9 "../../../Source/ARMCM3_STM32/types.h"
|
|
1843 .file 10 "./lib/STM32F10x_StdPeriph_Driver/inc/stm32f10x_rcc.h"
|
|
1844 .file 11 "./lib/CMSIS/CM3/CoreSupport/core_cm3.h"
|
|
1845 .file 12 "../../../Source/ARMCM3_STM32/timer.h"
|
|
DEFINED SYMBOLS
|
|
*ABS*:00000000 mmc.c
|
|
C:\Users\lwngim1\AppData\Local\Temp\cczeyUZQ.s:19 .text.xchg_spi:00000000 $t
|
|
C:\Users\lwngim1\AppData\Local\Temp\cczeyUZQ.s:23 .text.xchg_spi:00000000 xchg_spi
|
|
C:\Users\lwngim1\AppData\Local\Temp\cczeyUZQ.s:64 .text.xchg_spi:00000024 $d
|
|
C:\Users\lwngim1\AppData\Local\Temp\cczeyUZQ.s:69 .text.wait_ready:00000000 $t
|
|
C:\Users\lwngim1\AppData\Local\Temp\cczeyUZQ.s:73 .text.wait_ready:00000000 wait_ready
|
|
C:\Users\lwngim1\AppData\Local\Temp\cczeyUZQ.s:118 .text.deselect:00000000 $t
|
|
C:\Users\lwngim1\AppData\Local\Temp\cczeyUZQ.s:122 .text.deselect:00000000 deselect
|
|
C:\Users\lwngim1\AppData\Local\Temp\cczeyUZQ.s:145 .text.deselect:00000014 $d
|
|
C:\Users\lwngim1\AppData\Local\Temp\cczeyUZQ.s:150 .text.select:00000000 $t
|
|
C:\Users\lwngim1\AppData\Local\Temp\cczeyUZQ.s:154 .text.select:00000000 select
|
|
C:\Users\lwngim1\AppData\Local\Temp\cczeyUZQ.s:193 .text.select:00000028 $d
|
|
C:\Users\lwngim1\AppData\Local\Temp\cczeyUZQ.s:198 .text.send_cmd:00000000 $t
|
|
C:\Users\lwngim1\AppData\Local\Temp\cczeyUZQ.s:202 .text.send_cmd:00000000 send_cmd
|
|
C:\Users\lwngim1\AppData\Local\Temp\cczeyUZQ.s:324 .text.xmit_datablock:00000000 $t
|
|
C:\Users\lwngim1\AppData\Local\Temp\cczeyUZQ.s:328 .text.xmit_datablock:00000000 xmit_datablock
|
|
C:\Users\lwngim1\AppData\Local\Temp\cczeyUZQ.s:405 .text.rcvr_datablock:00000000 $t
|
|
C:\Users\lwngim1\AppData\Local\Temp\cczeyUZQ.s:409 .text.rcvr_datablock:00000000 rcvr_datablock
|
|
C:\Users\lwngim1\AppData\Local\Temp\cczeyUZQ.s:506 .text.disk_initialize:00000000 $t
|
|
C:\Users\lwngim1\AppData\Local\Temp\cczeyUZQ.s:511 .text.disk_initialize:00000000 disk_initialize
|
|
C:\Users\lwngim1\AppData\Local\Temp\cczeyUZQ.s:991 .text.disk_initialize:000002d0 $d
|
|
C:\Users\lwngim1\AppData\Local\Temp\cczeyUZQ.s:999 .text.disk_status:00000000 $t
|
|
C:\Users\lwngim1\AppData\Local\Temp\cczeyUZQ.s:1004 .text.disk_status:00000000 disk_status
|
|
C:\Users\lwngim1\AppData\Local\Temp\cczeyUZQ.s:1030 .text.disk_status:00000010 $d
|
|
C:\Users\lwngim1\AppData\Local\Temp\cczeyUZQ.s:1035 .text.disk_read:00000000 $t
|
|
C:\Users\lwngim1\AppData\Local\Temp\cczeyUZQ.s:1040 .text.disk_read:00000000 disk_read
|
|
C:\Users\lwngim1\AppData\Local\Temp\cczeyUZQ.s:1170 .text.disk_read:00000088 $d
|
|
C:\Users\lwngim1\AppData\Local\Temp\cczeyUZQ.s:1176 .text.disk_write:00000000 $t
|
|
C:\Users\lwngim1\AppData\Local\Temp\cczeyUZQ.s:1181 .text.disk_write:00000000 disk_write
|
|
C:\Users\lwngim1\AppData\Local\Temp\cczeyUZQ.s:1337 .text.disk_write:000000a8 $d
|
|
C:\Users\lwngim1\AppData\Local\Temp\cczeyUZQ.s:1343 .text.disk_ioctl:00000000 $t
|
|
C:\Users\lwngim1\AppData\Local\Temp\cczeyUZQ.s:1348 .text.disk_ioctl:00000000 disk_ioctl
|
|
C:\Users\lwngim1\AppData\Local\Temp\cczeyUZQ.s:1379 .text.disk_ioctl:00000022 $d
|
|
C:\Users\lwngim1\AppData\Local\Temp\cczeyUZQ.s:1394 .text.disk_ioctl:00000040 $t
|
|
C:\Users\lwngim1\AppData\Local\Temp\cczeyUZQ.s:1792 .text.disk_ioctl:00000260 $d
|
|
C:\Users\lwngim1\AppData\Local\Temp\cczeyUZQ.s:1798 .text.get_fattime:00000000 $t
|
|
C:\Users\lwngim1\AppData\Local\Temp\cczeyUZQ.s:1803 .text.get_fattime:00000000 get_fattime
|
|
C:\Users\lwngim1\AppData\Local\Temp\cczeyUZQ.s:1816 .text.get_fattime:00000004 $d
|
|
C:\Users\lwngim1\AppData\Local\Temp\cczeyUZQ.s:1821 .bss.CardType:00000000 $d
|
|
C:\Users\lwngim1\AppData\Local\Temp\cczeyUZQ.s:1825 .bss.CardType:00000000 CardType
|
|
C:\Users\lwngim1\AppData\Local\Temp\cczeyUZQ.s:1831 .data.Stat:00000000 Stat
|
|
.debug_frame:00000010 $d
|
|
|
|
UNDEFINED SYMBOLS
|
|
SPI_I2S_SendData
|
|
SPI_I2S_GetFlagStatus
|
|
SPI_I2S_ReceiveData
|
|
TimerGet
|
|
GPIO_SetBits
|
|
GPIO_ResetBits
|
|
RCC_APB2PeriphClockCmd
|
|
RCC_APB1PeriphClockCmd
|
|
GPIO_Init
|
|
SPI_Init
|
|
SPI_CalculateCRC
|
|
SPI_Cmd
|