⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mci_sd.lst

📁 针对at91sam7a3为主芯片开发板开发的spi口应用程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
   \   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 + -