📄 mci_sd.lst
字号:
\ 00000050 ........ BL delay
227 if(TXcnt++ >10)
\ 00000054 281C MOV R0,R5
\ 00000056 6D1C ADD R5,R5,#+0x1
\ 00000058 0B28 CMP R0,#+0xB
\ 0000005A F9DB BLT ??MCI_SendData_7
\ 0000005C EDE7 B ??MCI_SendData_4
228 return -1;
229 }
\ ??MCI_SendData_6:
\ 0000005E .... LDR R0,??DataTable22 ;; 0x3ffc0100
\ 00000060 .... LDR R1,??DataTable14 ;; 0xfffac004
\ 00000062 019A LDR R2,[SP, #+0x4]
\ 00000064 012A CMP R2,#+0x1
\ 00000066 0A68 LDR R2,[R1, #+0]
\ 00000068 31D1 BNE ??MCI_SendData_8
230
231 if(UsePDC==0x1) //使用PDC通道方式处理时
232 {
233 AT91C_BASE_MCI->MCI_MR |=AT91C_MCI_PDCMODE ; //使用 PDC 模式
\ 0000006A 8023 MOV R3,#+0x80
\ 0000006C 1B02 LSL R3,R3,#+0x8 ;; #+0x8000
\ 0000006E 1343 ORR R3,R2
\ 00000070 0B60 STR R3,[R1, #+0]
234 if(Block_Len > Max_BlockSize)
\ 00000072 FF22 MOV R2,#+0xFF
\ 00000074 921C ADD R2,R2,#+0x2 ;; #+0x101
\ 00000076 9642 CMP R6,R2
\ 00000078 03D3 BCC ??MCI_SendData_9
235 AT91C_BASE_MCI->MCI_MR |=(AT91C_MCI_BLKLEN | Max_BlockSize) ; //设置block长度=Max_BlockSize
\ 0000007A 0A68 LDR R2,[R1, #+0]
\ 0000007C 1043 ORR R0,R2
\ 0000007E 0860 STR R0,[R1, #+0]
\ 00000080 04E0 B ??MCI_SendData_10
236 else
237 AT91C_BASE_MCI->MCI_MR |=(AT91C_MCI_BLKLEN | Block_Len) ; //设置block长度
\ ??MCI_SendData_9:
\ 00000082 0868 LDR R0,[R1, #+0]
\ 00000084 .... LDR R2,??DataTable28 ;; 0x3ffc0000
\ 00000086 3243 ORR R2,R6
\ 00000088 0243 ORR R2,R0
\ 0000008A 0A60 STR R2,[R1, #+0]
238 /*Configure the PDC channel
239 PDC_TPR = Data Buffer Address to write
240 PDC_TCR = BlockLength/4
241 PDC2_PTCR = PDC_TXTEN
242 */
243 AT91C_BASE_PDC_MCI->PDC_TPR=*SendData ;
\ ??MCI_SendData_10:
\ 0000008C 3048 LDR R0,??MCI_SendData_11 ;; 0xfffac108
\ 0000008E 0099 LDR R1,[SP, #+0]
\ 00000090 0978 LDRB R1,[R1, #+0]
\ 00000092 0160 STR R1,[R0, #+0]
244 AT91C_BASE_PDC_MCI->PDC_TCR=Block_Len/4 ; //是由于发送寄存器为4字节(32bit)
\ 00000094 2F48 LDR R0,??MCI_SendData_11+0x4 ;; 0xfffac10c
\ 00000096 B108 LSR R1,R6,#+0x2
\ 00000098 0160 STR R1,[R0, #+0]
245 AT91C_BASE_PDC_MCI->PDC_PTCR =AT91C_PDC_TXTEN ; //允许发送数据
\ 0000009A .... LDR R0,??DataTable16 ;; 0xfffac120
\ 0000009C 8021 MOV R1,#+0x80
\ 0000009E 4900 LSL R1,R1,#+0x1 ;; #+0x100
\ 000000A0 0160 STR R1,[R0, #+0]
246
247 //**Send commaned : WRITE_SINGLE_BLOCK ,are Command24 ,respond_type are R1 ,参数:地址[31:0]
248 if( Multiply_Block==0)
\ 000000A2 002F CMP R7,#+0
\ 000000A4 04D1 BNE ??MCI_SendData_12
249 State =MCI_SendCommand(0x18 ,WriteTo_Addr,Respond_Len_48,0) ; //write a single block ,CMD24
\ 000000A6 0023 MOV R3,#+0
\ 000000A8 0122 MOV R2,#+0x1
\ 000000AA 211C MOV R1,R4
\ 000000AC 1820 MOV R0,#+0x18
\ 000000AE 03E0 B ??MCI_SendData_13
250 else
251 State =MCI_SendCommand(0x19 ,WriteTo_Addr,Respond_Len_48,0) ; //write a single block ,CMD25
\ ??MCI_SendData_12:
\ 000000B0 0023 MOV R3,#+0
\ 000000B2 0122 MOV R2,#+0x1
\ 000000B4 211C MOV R1,R4
\ 000000B6 1920 MOV R0,#+0x19
\ ??MCI_SendData_13:
\ 000000B8 ........ BL MCI_SendCommand
252 //是否在同时还需要启动MCI的发送呢?
253 //Read status register MCI_SR ,检查发送是否成功,如成功,检测是否发送完成:ENDTX = 0?
254
255 while(State !=0)
\ 000000BC 0028 CMP R0,#+0
\ 000000BE 42D0 BEQ ??MCI_SendData_14
256 {
257 delay() ;
\ ??MCI_SendData_15:
\ 000000C0 ........ BL delay
258 if(TXcnt++ >10)
\ 000000C4 281C MOV R0,R5
\ 000000C6 6D1C ADD R5,R5,#+0x1
\ 000000C8 0B28 CMP R0,#+0xB
\ 000000CA F9DB BLT ??MCI_SendData_15
\ 000000CC B5E7 B ??MCI_SendData_4
259 return -1;
260 }
261 if((State & AT91C_MCI_ENDTX)!=0) //发送完成
262 {
263 return 0 ;
264 }
265 }
266 else //不用PDC方式传诵数据
267 {
268 AT91C_BASE_MCI->MCI_MR |=~AT91C_MCI_PDCMODE ; //使用 PDC 模式
\ ??MCI_SendData_8:
\ 000000CE .... LDR R3,??DataTable27 ;; 0xffff7fff
\ 000000D0 1343 ORR R3,R2
\ 000000D2 0B60 STR R3,[R1, #+0]
269 if(Block_Len > Max_BlockSize)
\ 000000D4 FF22 MOV R2,#+0xFF
\ 000000D6 921C ADD R2,R2,#+0x2 ;; #+0x101
\ 000000D8 9642 CMP R6,R2
\ 000000DA 03D3 BCC ??MCI_SendData_16
270 AT91C_BASE_MCI->MCI_MR |=(AT91C_MCI_BLKLEN | Max_BlockSize) ; //设置block长度=Max_BlockSize
\ 000000DC 0A68 LDR R2,[R1, #+0]
\ 000000DE 1043 ORR R0,R2
\ 000000E0 0860 STR R0,[R1, #+0]
\ 000000E2 04E0 B ??MCI_SendData_17
271 else
272 AT91C_BASE_MCI->MCI_MR |=(AT91C_MCI_BLKLEN | Block_Len) ; //设置block长度
\ ??MCI_SendData_16:
\ 000000E4 0868 LDR R0,[R1, #+0]
\ 000000E6 .... LDR R2,??DataTable28 ;; 0x3ffc0000
\ 000000E8 3243 ORR R2,R6
\ 000000EA 0243 ORR R2,R0
\ 000000EC 0A60 STR R2,[R1, #+0]
273
274 //发送写块命令
275 if( Multiply_Block==0)
\ ??MCI_SendData_17:
\ 000000EE 002F CMP R7,#+0
\ 000000F0 04D1 BNE ??MCI_SendData_18
276 State =MCI_SendCommand(0x18 ,WriteTo_Addr,Respond_Len_48,0) ; //write a single block ,CMD24
\ 000000F2 0023 MOV R3,#+0
\ 000000F4 0122 MOV R2,#+0x1
\ 000000F6 211C MOV R1,R4
\ 000000F8 1820 MOV R0,#+0x18
\ 000000FA 03E0 B ??MCI_SendData_19
277 else
278 State =MCI_SendCommand(0x19 ,WriteTo_Addr,Respond_Len_48,0) ; //write a single block ,CMD25
\ ??MCI_SendData_18:
\ 000000FC 0023 MOV R3,#+0
\ 000000FE 0122 MOV R2,#+0x1
\ 00000100 211C MOV R1,R4
\ 00000102 1920 MOV R0,#+0x19
\ ??MCI_SendData_19:
\ 00000104 ........ BL MCI_SendCommand
279 while(State !=0)
\ 00000108 0028 CMP R0,#+0
\ 0000010A 06D0 BEQ ??MCI_SendData_20
280 {
281 delay() ;
\ ??MCI_SendData_21:
\ 0000010C ........ BL delay
282 if(TXcnt++ >10)
\ 00000110 281C MOV R0,R5
\ 00000112 6D1C ADD R5,R5,#+0x1
\ 00000114 0B28 CMP R0,#+0xB
\ 00000116 F9DB BLT ??MCI_SendData_21
\ 00000118 8FE7 B ??MCI_SendData_4
283 return -1;
284 }
285 for(int TXptr=(Block_Len/4);TXptr>=0;TXptr--)
\ ??MCI_SendData_20:
\ 0000011A B108 LSR R1,R6,#+0x2
\ 0000011C 11E0 B ??MCI_SendData_22
286 {
287 State=AT91C_BASE_MCI->MCI_SR ;
\ ??MCI_SendData_23:
\ 0000011E .... LDR R0,??DataTable29 ;; 0xfffac040
\ 00000120 0068 LDR R0,[R0, #+0]
288 while((State & AT91C_MCI_TXRDY) ==0) ; //部分数据没发送完成,等待
\ ??MCI_SendData_24:
\ 00000122 4207 LSL R2,R0,#+0x1D
\ 00000124 FDD5 BPL ??MCI_SendData_24
289 AT91C_BASE_MCI->MCI_TDR=*(SendData+(TXptr*4)-Block_Len); //**********未了从高地址开始发送*****************
\ 00000126 0C48 LDR R0,??MCI_SendData_11+0x8 ;; 0xfffac034
\ 00000128 8A00 LSL R2,R1,#+0x2
\ 0000012A 7342 NEG R3,R6
\ 0000012C 009C LDR R4,[SP, #+0]
\ 0000012E E318 ADD R3,R4,R3
\ 00000130 9A5C LDRB R2,[R3, R2]
\ 00000132 0260 STR R2,[R0, #+0]
290 AT91C_BASE_MCI->MCI_CMDR |= AT91C_MCI_TRCMD_START ; //开始发送
\ 00000134 .... LDR R0,??DataTable20 ;; 0xfffac014
\ 00000136 0268 LDR R2,[R0, #+0]
\ 00000138 8023 MOV R3,#+0x80
\ 0000013A 5B02 LSL R3,R3,#+0x9 ;; #+0x10000
\ 0000013C 1343 ORR R3,R2
\ 0000013E 0360 STR R3,[R0, #+0]
291 }
\ 00000140 491E SUB R1,R1,#+0x1
\ ??MCI_SendData_22:
\ 00000142 0029 CMP R1,#+0
\ 00000144 EBD5 BPL ??MCI_SendData_23
292
293 }
294 return 0 ;
\ ??MCI_SendData_14:
\ 00000146 0020 MOV R0,#+0
\ ??MCI_SendData_5:
\ 00000148 FCBC POP {R2-R7}
\ 0000014A 02BC POP {R1}
\ 0000014C 0847 BX R1 ;; return
\ 0000014E C046 NOP
\ ??MCI_SendData_11:
\ 00000150 08C1FAFF DC32 0xfffac108
\ 00000154 0CC1FAFF DC32 0xfffac10c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -