📄 sdhal.lst
字号:
\ 0000000C 0006 LSL R0,R0,#+0x18 ;; ZeroExt R0,R0,#+0x18,#+0x18
\ 0000000E 000E LSR R0,R0,#+0x18
\ 00000010 7047 BX LR ;; return
177 }
178
179
180 /*******************************************************************************************************************
181 ** 函数名称: void SPI_CS_Assert() Name: void SPI_CS_Assert()
182 ** 功能描述: 片选SPI从机 Function: select the SPI slave
183 ** 输 入: 无 Input: NULL
184 ** 输 出: 无 Output: NULL
185 ********************************************************************************************************************/
186 /* 片选SPI从机 ,即是置 CS 为低电平 SPI_CS_CLR(); */
\ In segment CODE, align 4, keep-with-next
187 void SPI_CS_Assert(void)
188 {
\ SPI_CS_Assert:
\ 00000000 00B5 PUSH {LR}
189 AT91F_PIO_SetOutput(AT91C_BASE_PIOA,AT91C_PA14_SPI0_NPCS3) ; //SD卡使用的是 CS3信号
\ 00000002 8021 MOV R1,#+0x80
\ 00000004 C901 LSL R1,R1,#+0x7 ;; #+0x4000
\ 00000006 .... LDR R0,??DataTable11 ;; 0xfffff400
\ 00000008 ........ _BLF AT91F_PIO_SetOutput,AT91F_PIO_SetOutput??rT
190 }
\ 0000000C 01BC POP {R0}
\ 0000000E 0047 BX R0 ;; return
191
192
193 /*******************************************************************************************************************
194 ** 函数名称: void SPI_CS_Deassert() Name: void SPI_CS_Deassert()
195 ** 功能描述: 不片选SPI从机 Function: not select the SPI slave
196 ** 输 入: 无 Input: NULL
197 ** 输 出: 无 Output: NULL
198 ********************************************************************************************************************/
\ In segment CODE, align 4, keep-with-next
199 void SPI_CS_Deassert(void)
200 {
\ SPI_CS_Deassert:
\ 00000000 00B5 PUSH {LR}
201 AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,AT91C_PA14_SPI0_NPCS3) ; //SD卡使用的是 CS3信号
\ 00000002 8021 MOV R1,#+0x80
\ 00000004 C901 LSL R1,R1,#+0x7 ;; #+0x4000
\ 00000006 .... LDR R0,??DataTable11 ;; 0xfffff400
\ 00000008 ........ _BLF AT91F_PIO_ClearOutput,AT91F_PIO_ClearOutput??rT
202 }
\ 0000000C 01BC POP {R0}
\ 0000000E 0047 BX R0 ;; return
203
204 //*******************************************************************************************************************
205 //** 函数名称: void SD_ChkCard()
206 //** 功能描述: 检测卡是否完全插入 ,插入返回 1
207
208 /* 读取插入检测口的状态 ,在SD中,其检测口为MCDA3 ,也就是 CS3 */
\ In segment CODE, align 4, keep-with-next
209 INT8U SD_ChkCard(void)
210 {
\ SD_ChkCard:
\ 00000000 10B5 PUSH {R4,LR}
211 uint32 Get_PIO_Data ;
212 Get_PIO_Data=AT91F_PIO_GetInput(AT91C_BASE_PIOA) ;
\ 00000002 .... LDR R0,??DataTable11 ;; 0xfffff400
\ 00000004 ........ _BLF AT91F_PIO_GetInput,AT91F_PIO_GetInput??rT
\ 00000008 041C MOV R4,R0
213
214 if ((Get_PIO_Data & AT91C_PA14_SPI0_NPCS3)==0)
\ 0000000A 201C MOV R0,R4
\ 0000000C 8021 MOV R1,#+0x80
\ 0000000E C901 LSL R1,R1,#+0x7 ;; #+0x4000
\ 00000010 0140 AND R1,R0
\ 00000012 081C MOV R0,R1
\ 00000014 0028 CMP R0,#+0
\ 00000016 00D0 BEQ ??SD_ChkCard_0
\ 00000018 0120 MOV R0,#+0x1
\ ??SD_ChkCard_0:
\ 0000001A 0006 LSL R0,R0,#+0x18 ;; ZeroExt R0,R0,#+0x18,#+0x18
\ 0000001C 000E LSR R0,R0,#+0x18
215 return 0; /* 未完全插入 not insert entirely */
\ 0000001E 10BC POP {R4}
\ 00000020 02BC POP {R1}
\ 00000022 0847 BX R1 ;; return
216 else
217 return 1; /* 完全插入 insert entirely */
218 }
\ In segment CODE, align 4, keep-with-next
\ ??DataTable4:
\ 00000000 3C00FEFF DC32 0xfffe003c
\ In segment CODE, align 4, keep-with-next
\ ??DataTable7:
\ 00000000 1000FEFF DC32 0xfffe0010
\ In segment CODE, align 4, keep-with-next
\ ??DataTable8:
\ 00000000 0800FEFF DC32 0xfffe0008
\ In segment CODE, align 4, keep-with-next
\ ??DataTable11:
\ 00000000 00F4FFFF DC32 0xfffff400
219
220 /*******************************************************************************************************************
221 ** 函数名称: void SD_ChkCardWP() 功能描述: 检测卡写保护
222 ********************************************************************************************************************/
223 /*INT8U SD_ChkCardWP(void)
224 {
225 if (SD_WP_STATUS() != 0)
226 return 1; // 卡写保护
227 else
228 return 0; // 卡未写保护
229 }
230 */
231
232
233
234
235
236
237
Maximum stack usage in bytes:
Function CSTACK
-------- ------
AT91F_PIO_CfgOutput 0
AT91F_PIO_CfgPeriph 0
AT91F_PIO_ClearOutput 0
AT91F_PIO_GetInput 0
AT91F_PIO_OutputEnable 0
AT91F_PIO_SetOutput 0
AT91F_PMC_EnablePeriphClock 0
AT91F_SPI0_CfgPIO 4
AT91F_SPI0_CfgPMC 4
SD_ChkCard 8
SD_HardWareInit 4
SPI_CS_Assert 4
SPI_CS_Deassert 4
SPI_Clk400k 0
SPI_ClkToMax 0
SPI_RecByte 0
SPI_SendByte 0
Segment part sizes:
Function/Label Bytes
-------------- -----
AT91F_PIO_CfgPeriph 12
AT91F_PIO_CfgOutput 6
AT91F_PIO_GetInput 4
AT91F_PIO_SetOutput 4
AT91F_PIO_ClearOutput 4
AT91F_PIO_OutputEnable 4
AT91F_PMC_EnablePeriphClock 4
AT91F_SPI0_CfgPMC 20
AT91F_SPI0_CfgPIO 24
SD_HardWareInit 64
SPI_Clk400k 8
SPI_ClkToMax 8
SPI_SendByte 28
??SPI_RecByte_0 18
SPI_CS_Assert 16
SPI_CS_Deassert 16
SD_ChkCard 36
??DataTable4 4
??DataTable7 4
??DataTable8 4
??DataTable11 4
Others 136
428 bytes in segment CODE
210 bytes of CODE memory (+ 218 bytes shared)
Errors: none
Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -