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

📄 mci_lpc23xx.txt

📁 工厂环境污染控制数据采集器
💻 TXT
📖 第 1 页 / 共 5 页
字号:
;;;546       U32 i;
;;;547    
;;;548       if (mci_wait_for_tran () == __FALSE) {
000a30  ebfffffe          BL       mci_wait_for_tran
000a34  e3500000          CMP      r0,#0
000a38  1a000002          BNE      |L1.2632|
;;;549          /* Card not in TRAN state. */
;;;550          return (__FALSE);
000a3c  e3a00000          MOV      r0,#0
                  |L1.2624|
000a40  e8bd40f0          POP      {r4-r7,lr}
;;;551       }
;;;552    
;;;553       if (mci_cmd_read_block (sect, cnt) == __FALSE) {
;;;554          /* Command Failed. */
;;;555          return (__FALSE);
;;;556       }
;;;557    
;;;558       /* Set MCI Transfer registers. */
;;;559       MCI_DATA_TMR  = DATA_RD_TOUT_VALUE;
;;;560       MCI_DATA_LEN  = cnt * 512;
;;;561    
;;;562       /* Start DMA Peripheral to Memory transfer. */
;;;563       mci_dma_start (DMA_READ, buf);
;;;564       MCI_DATA_CTRL = 0x9B;
;;;565    
;;;566       for (i = DMA_TOUT; i; i--) {
;;;567          if (GPDMA_RAW_INT_TCSTAT & 0x01) {
;;;568             /* Data transfer finished. */
;;;569             break;
;;;570          }
;;;571       }
;;;572    
;;;573       if (i == 0) {
;;;574          /* DMA Transfer timeout. */
;;;575          return (__FALSE);
;;;576       }
;;;577    
;;;578       if (cnt > 1) {
;;;579          /* Stop reading Multiple sectors. */
;;;580          mci_send_stop ();
;;;581       }
;;;582       return (__TRUE);
;;;583    }
000a44  e12fff1e          BX       lr
                  |L1.2632|
000a48  e1a01006          MOV      r1,r6                 ;553
000a4c  e1a00004          MOV      r0,r4                 ;553
000a50  ebfffffe          BL       mci_cmd_read_block
000a54  e3500000          CMP      r0,#0                 ;553
000a58  1a000001          BNE      |L1.2660|
000a5c  e3a00000          MOV      r0,#0                 ;555
000a60  eafffff6          B        |L1.2624|
                  |L1.2660|
000a64  e59f02fc          LDR      r0,|L1.3432|
000a68  e59f12b8          LDR      r1,|L1.3368|
000a6c  e5810024          STR      r0,[r1,#0x24]         ;559
000a70  e1a00486          LSL      r0,r6,#9              ;560
000a74  e5810028          STR      r0,[r1,#0x28]         ;560
000a78  e1a01005          MOV      r1,r5                 ;563
000a7c  e3a00000          MOV      r0,#0                 ;563
000a80  ebfffffe          BL       mci_dma_start
000a84  e3a0009b          MOV      r0,#0x9b              ;564
000a88  e59f1298          LDR      r1,|L1.3368|
000a8c  e581002c          STR      r0,[r1,#0x2c]         ;564
000a90  e59f72d4          LDR      r7,|L1.3436|
000a94  ea000005          B        |L1.2736|
                  |L1.2712|
000a98  e59f02b4          LDR      r0,|L1.3412|
000a9c  e5900014          LDR      r0,[r0,#0x14]         ;567
000aa0  e3100001          TST      r0,#1                 ;567
000aa4  0a000000          BEQ      |L1.2732|
000aa8  ea000002          B        |L1.2744|
                  |L1.2732|
000aac  e2477001          SUB      r7,r7,#1              ;566
                  |L1.2736|
000ab0  e3570000          CMP      r7,#0                 ;566
000ab4  1afffff7          BNE      |L1.2712|
                  |L1.2744|
000ab8  e1a00000          MOV      r0,r0                 ;569
000abc  e3570000          CMP      r7,#0                 ;573
000ac0  1a000001          BNE      |L1.2764|
000ac4  e3a00000          MOV      r0,#0                 ;575
000ac8  eaffffdc          B        |L1.2624|
                  |L1.2764|
000acc  e3560001          CMP      r6,#1                 ;578
000ad0  9a000000          BLS      |L1.2776|
000ad4  ebfffffe          BL       mci_send_stop
                  |L1.2776|
000ad8  e3a00001          MOV      r0,#1                 ;582
000adc  eaffffd7          B        |L1.2624|
;;;584    
                          ENDP

                  mmc_write_sect PROC
;;;587    
;;;588    BOOL mci_write_sect (U32 sect, U8 *buf, U32 cnt) {
000ae0  e92d41f0          PUSH     {r4-r8,lr}
000ae4  e1a04000          MOV      r4,r0
000ae8  e1a05001          MOV      r5,r1
000aec  e1a06002          MOV      r6,r2
;;;589       /* Write a 512 byte sector to Flash Card. */
;;;590       U32 i,j;
;;;591    
;;;592       if (mci_wait_for_tran () == __FALSE) {
000af0  ebfffffe          BL       mci_wait_for_tran
000af4  e3500000          CMP      r0,#0
000af8  1a000002          BNE      |L1.2824|
;;;593          /* Card not in TRAN state. */
;;;594          return (__FALSE);
000afc  e3a00000          MOV      r0,#0
                  |L1.2816|
000b00  e8bd41f0          POP      {r4-r8,lr}
;;;595       }
;;;596    
;;;597       if (mci_cmd_write_block (sect, cnt) == __FALSE) {
;;;598          /* Command Failed. */
;;;599          return (__FALSE);
;;;600       }
;;;601    
;;;602       for (j = 0; j < cnt; buf += 512, j++) {
;;;603          /* Set MCI Transfer registers. */
;;;604          MCI_DATA_TMR  = DATA_WR_TOUT_VALUE;
;;;605          MCI_DATA_LEN  = 512;
;;;606    
;;;607          /* Start DMA Memory to Peripheral transfer. */
;;;608          mci_dma_start (DMA_WRITE, buf);
;;;609          MCI_DATA_CTRL = 0x99;
;;;610    
;;;611          for (i = DMA_TOUT; i; i--) {
;;;612             if (GPDMA_RAW_INT_TCSTAT & 0x01) {
;;;613                /* Data transfer finished. */
;;;614                break;
;;;615             }
;;;616          }
;;;617    
;;;618          if (i == 0) {
;;;619             /* DMA Data Transfer timeout. */
;;;620             mci_send_stop ();
;;;621             /* Write request Failed. */
;;;622             return (__FALSE);
;;;623          }
;;;624    
;;;625          if (cnt == 1) {
;;;626             return (__TRUE);
;;;627          }
;;;628    
;;;629          /* Wait until Data Block sent to Card. */
;;;630          while (MCI_STATUS != (MCI_DATA_END | MCI_DATA_BLK_END)) {
;;;631             if (MCI_STATUS & (MCI_DATA_CRC_FAIL | MCI_DATA_TIMEOUT)) {
;;;632                /* If error while Data Block sending occured. */
;;;633                mci_send_stop ();
;;;634                /* Write request Failed. */
;;;635                return (__FALSE);
;;;636             }
;;;637          }
;;;638          for (i = WR_TOUT; i; i--) {
;;;639             if ((mci_read_status () & 0x0F00) == 0x0D00) {
;;;640                /* Buffer available for further sending, card state RCV. */
;;;641                break;
;;;642             }
;;;643          }
;;;644       }
;;;645       mci_send_stop ();
;;;646    
;;;647       /* Write request Ok. */
;;;648       return (__TRUE);
;;;649    }
000b04  e12fff1e          BX       lr
                  |L1.2824|
000b08  e1a01006          MOV      r1,r6                 ;597
000b0c  e1a00004          MOV      r0,r4                 ;597
000b10  ebfffffe          BL       mci_cmd_write_block
000b14  e3500000          CMP      r0,#0                 ;597
000b18  1a000001          BNE      |L1.2852|
000b1c  e3a00000          MOV      r0,#0                 ;599
000b20  eafffff6          B        |L1.2816|
                  |L1.2852|
000b24  e3a08000          MOV      r8,#0                 ;602
000b28  ea000037          B        |L1.3084|
                  |L1.2860|
000b2c  e59f023c          LDR      r0,|L1.3440|
000b30  e59f11f0          LDR      r1,|L1.3368|
000b34  e5810024          STR      r0,[r1,#0x24]         ;604
000b38  e3a00c02          MOV      r0,#0x200             ;605
000b3c  e5810028          STR      r0,[r1,#0x28]         ;605
000b40  e1a01005          MOV      r1,r5                 ;608
000b44  e3a00001          MOV      r0,#1                 ;608
000b48  ebfffffe          BL       mci_dma_start
000b4c  e3a00099          MOV      r0,#0x99              ;609
000b50  e59f11d0          LDR      r1,|L1.3368|
000b54  e581002c          STR      r0,[r1,#0x2c]         ;609
000b58  e59f720c          LDR      r7,|L1.3436|
000b5c  ea000005          B        |L1.2936|
                  |L1.2912|
000b60  e59f01ec          LDR      r0,|L1.3412|
000b64  e5900014          LDR      r0,[r0,#0x14]         ;612
000b68  e3100001          TST      r0,#1                 ;612
000b6c  0a000000          BEQ      |L1.2932|
000b70  ea000002          B        |L1.2944|
                  |L1.2932|
000b74  e2477001          SUB      r7,r7,#1              ;611
                  |L1.2936|
000b78  e3570000          CMP      r7,#0                 ;611
000b7c  1afffff7          BNE      |L1.2912|
                  |L1.2944|
000b80  e1a00000          MOV      r0,r0                 ;614
000b84  e3570000          CMP      r7,#0                 ;618
000b88  1a000002          BNE      |L1.2968|
000b8c  ebfffffe          BL       mci_send_stop
000b90  e3a00000          MOV      r0,#0                 ;622
000b94  eaffffd9          B        |L1.2816|
                  |L1.2968|
000b98  e3560001          CMP      r6,#1                 ;625
000b9c  1a000001          BNE      |L1.2984|
000ba0  e3a00001          MOV      r0,#1                 ;626
000ba4  eaffffd5          B        |L1.2816|
                  |L1.2984|
000ba8  ea000006          B        |L1.3016|
                  |L1.2988|
000bac  e59f0174          LDR      r0,|L1.3368|
000bb0  e5900034          LDR      r0,[r0,#0x34]         ;631
000bb4  e310000a          TST      r0,#0xa               ;631
000bb8  0a000002          BEQ      |L1.3016|
000bbc  ebfffffe          BL       mci_send_stop
000bc0  e3a00000          MOV      r0,#0                 ;635
000bc4  eaffffcd          B        |L1.2816|
                  |L1.3016|
000bc8  e59f0158          LDR      r0,|L1.3368|
000bcc  e5900034          LDR      r0,[r0,#0x34]         ;630
000bd0  e3500c05          CMP      r0,#0x500             ;630
000bd4  1afffff4          BNE      |L1.2988|
000bd8  e59f716c          LDR      r7,|L1.3404|
000bdc  ea000005          B        |L1.3064|
                  |L1.3040|
000be0  ebfffffe          BL       mci_read_status
000be4  e2000c0f          AND      r0,r0,#0xf00          ;639
000be8  e3500c0d          CMP      r0,#0xd00             ;639
000bec  1a000000          BNE      |L1.3060|
000bf0  ea000002          B        |L1.3072|
                  |L1.3060|
000bf4  e2477001          SUB      r7,r7,#1              ;638
                  |L1.3064|
000bf8  e3570000          CMP      r7,#0                 ;638
000bfc  1afffff7          BNE      |L1.3040|
                  |L1.3072|
000c00  e1a00000          MOV      r0,r0                 ;641
000c04  e2855c02          ADD      r5,r5,#0x200          ;602
000c08  e2888001          ADD      r8,r8,#1              ;602
                  |L1.3084|
000c0c  e1580006          CMP      r8,r6                 ;602
000c10  3affffc5          BCC      |L1.2860|
000c14  ebfffffe          BL       mci_send_stop
000c18  e3a00001          MOV      r0,#1                 ;648
000c1c  eaffffb7          B        |L1.2816|
;;;650    
                          ENDP

                  mmc_read_config PROC
;;;653    
;;;654    BOOL mci_read_config (MMCFG *cfg) {
000c20  e92d43ff          PUSH     {r0-r9,lr}
000c24  e1a04000          MOV      r4,r0
;;;655       /* Read MMC/SD Card device configuration. */
;;;656       U32 i,rstat,arg,v,m,rval[4];
;;;657    
;;;658       /* Wait if potential Write in progress. */
;;;659       mci_wait_for_tran ();
000c28  ebfffffe          BL       mci_wait_for_tran
;;;660    
;;;661       /* Deselect the Card, transit to STBY state. */
;;;662       mci_command (SELECT_CARD, 0, RESP_NONE, NULL);
000c2c  e3a03000          MOV      r3,#0
000c30  e1a02003          MOV      r2,r3
000c34  e1a01003          MOV      r1,r3
000c38  e3a00007          MOV      r0,#7
000c3c  ebfffffe          BL       mci_command
;;;663    
;;;664       /* Read the CID - Card Identification. */
;;;665       cfg->sernum = sernum;
000c40  e59f00f4          LDR      r0,|L1.3388|
000c44  e5900000          LDR      r0,[r0,#0]  ; sernum
000c48  e5840000          STR      r0,[r4,#0]
;;;666    
;;;667       /* Read the CSD - Card Specific Data. */
;;;668       arg = 0x00010000;
000c4c  e3a07801          MOV      r7,#0x10000
;;;669       if (CardType == CARD_SD) {
000c50  e59f00d8          LDR      r0,|L1.3376|
000c54  e5d00000          LDRB     r0,[r0,#0]  ; CardType
000c58  e3500002          CMP      r0,#2
000c5c  1a000002          BNE      |L1.3180|
;;;670          /* Use address from SET_RELATIVE_ADDR. */
;;;671          arg = CardRCA << 16;
000c60  e59f00cc          LDR      r0,|L1.3380|
000c64  e1d000b0          LDRH     r0,[r0,#0]  ; CardRCA
000c68  e1a07800          LSL      r7,r0,#16
                  |L1.3180|
;;;672       }
;;;673    
;;;674       for (i = 20; i; i--) {
000c6c  e3a05014          MOV      r5,#0x14
000c70  ea000009          B        |L1.3228|
                  |L1.3188|
;;;675          rstat = mci_command (SEND_CSD, arg, RESP_LONG, &rval[0]);
000c74  e28d3000          ADD      r3,sp,#0
000c78  e3a02002          MOV      r2,#2
000c7c  e1a01007          MOV      r1,r7
000c80  e3a00009          MOV      r0,#9
000c84  ebfffffe          BL       mci_command
000c88  e1a06000          MOV      r6,r0
;;;676          if (rstat == 0) {
000c8c  e3560000          CMP      r6,#0
000c90  1a

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -