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

📄 mci_lpc23xx.txt

📁 工厂环境污染控制数据采集器
💻 TXT
📖 第 1 页 / 共 5 页
字号:
000284  e3a02001          MOV      r2,#1
000288  e3a0100a          MOV      r1,#0xa
00028c  e3a00006          MOV      r0,#6
000290  ebfffffe          BL       mci_command
000294  e1a04000          MOV      r4,r0
;;;308          if (rstat == 0 && (rval & 0x0F00) == 0x0900) {
000298  e3540000          CMP      r4,#0
00029c  1a000006          BNE      |L1.700|
0002a0  e59d0000          LDR      r0,[sp,#0]
0002a4  e2000c0f          AND      r0,r0,#0xf00
0002a8  e3500c09          CMP      r0,#0x900
0002ac  1a000002          BNE      |L1.700|
;;;309             /* Response is back and correct. */
;;;310             return (__TRUE);
0002b0  e3a00001          MOV      r0,#1
                  |L1.692|
0002b4  e8bd4038          POP      {r3-r5,lr}
;;;311          }
;;;312       }
;;;313       return (__FALSE);
;;;314    }
0002b8  e12fff1e          BX       lr
                  |L1.700|
0002bc  e1a00000          MOV      r0,r0                 ;304
                  |L1.704|
0002c0  e2855001          ADD      r5,r5,#1              ;302
                  |L1.708|
0002c4  e3550014          CMP      r5,#0x14              ;302
0002c8  3affffe8          BCC      |L1.624|
0002cc  e3a00000          MOV      r0,#0                 ;313
0002d0  eafffff7          B        |L1.692|
;;;315    
                          ENDP

                  mci_select_card PROC
;;;273    
;;;274    static BOOL mci_select_card (void) {
0002d4  e92d4078          PUSH     {r3-r6,lr}
;;;275       /* Select the Card, send CMD7 after CMD9, inter-change state */
;;;276       /* between STBY and TRANS after this command. */
;;;277       U32 i,arg,rstat,rval;
;;;278    
;;;279       arg = 0x00010000;
0002d8  e3a06801          MOV      r6,#0x10000
;;;280       if (CardType == CARD_SD) {
0002dc  e59f0a4c          LDR      r0,|L1.3376|
0002e0  e5d00000          LDRB     r0,[r0,#0]  ; CardType
0002e4  e3500002          CMP      r0,#2
0002e8  1a000002          BNE      |L1.760|
;;;281          /* Use address from SET_RELATIVE_ADDR. */
;;;282          arg = CardRCA << 16;
0002ec  e59f0a40          LDR      r0,|L1.3380|
0002f0  e1d000b0          LDRH     r0,[r0,#0]  ; CardRCA
0002f4  e1a06800          LSL      r6,r0,#16
                  |L1.760|
;;;283       }
;;;284    
;;;285       for (i = 0; i < 200; i++) {
0002f8  e3a04000          MOV      r4,#0
0002fc  ea00000f          B        |L1.832|
                  |L1.768|
;;;286          rstat = mci_command (SELECT_CARD, arg, RESP_SHORT, &rval);
000300  e28d3000          ADD      r3,sp,#0
000304  e3a02001          MOV      r2,#1
000308  e1a01006          MOV      r1,r6
00030c  e3a00007          MOV      r0,#7
000310  ebfffffe          BL       mci_command
000314  e1a05000          MOV      r5,r0
;;;287          if (rstat == 0 && (rval & 0x0F00) == 0x0700) {
000318  e3550000          CMP      r5,#0
00031c  1a000006          BNE      |L1.828|
000320  e59d0000          LDR      r0,[sp,#0]
000324  e2000c0f          AND      r0,r0,#0xf00
000328  e3500c07          CMP      r0,#0x700
00032c  1a000002          BNE      |L1.828|
;;;288             /* Should be in STBY state now and ready. */
;;;289             return (__TRUE);
000330  e3a00001          MOV      r0,#1
                  |L1.820|
000334  e8bd4078          POP      {r3-r6,lr}
;;;290          }
;;;291       }
;;;292       return (__FALSE);
;;;293    }
000338  e12fff1e          BX       lr
                  |L1.828|
00033c  e2844001          ADD      r4,r4,#1              ;285
                  |L1.832|
000340  e35400c8          CMP      r4,#0xc8              ;285
000344  3affffed          BCC      |L1.768|
000348  e3a00000          MOV      r0,#0                 ;292
00034c  eafffff8          B        |L1.820|
;;;294    
                          ENDP

                  mci_set_speed PROC
;;;171    
;;;172       if (speed == HIGH_SPEED) {
000350  e3500001          CMP      r0,#1
000354  1a000001          BNE      |L1.864|
;;;173          /* Max. 25 MBit used for Data Transfer. */
;;;174          clkdiv = 0;
000358  e3a02000          MOV      r2,#0
00035c  ea000000          B        |L1.868|
                  |L1.864|
;;;175       }
;;;176       else {
;;;177          /* Max. 400 kBit used in Card Initialization. */
;;;178          clkdiv = 240;
000360  e3a020f0          MOV      r2,#0xf0
                  |L1.868|
;;;179       }
;;;180       MCI_CLOCK = (MCI_CLOCK & ~0xFF) | 0x300 | clkdiv;
000364  e59f39bc          LDR      r3,|L1.3368|
000368  e5933004          LDR      r3,[r3,#4]
00036c  e3c330ff          BIC      r3,r3,#0xff
000370  e3833c03          ORR      r3,r3,#0x300
000374  e1833002          ORR      r3,r3,r2
000378  e59fc9a8          LDR      r12,|L1.3368|
00037c  e58c3004          STR      r3,[r12,#4]
;;;181    
;;;182       /* delay 3MCLK + 2PCLK before next write */
;;;183       for ( i = 0; i < 100; i++ );
000380  e3a01000          MOV      r1,#0
000384  ea000000          B        |L1.908|
                  |L1.904|
000388  e2811001          ADD      r1,r1,#1
                  |L1.908|
00038c  e3510064          CMP      r1,#0x64
000390  3afffffc          BCC      |L1.904|
;;;184    }
000394  e12fff1e          BX       lr
;;;185    
                          ENDP

                  mci_bus_mode PROC
;;;192    
;;;193       if (mode == OPEN_DRAIN_MODE) {
000398  e3500000          CMP      r0,#0
00039c  1a000005          BNE      |L1.952|
;;;194          MCI_POWER |= 0x40;
0003a0  e59f2980          LDR      r2,|L1.3368|
0003a4  e5922000          LDR      r2,[r2,#0]
0003a8  e3822040          ORR      r2,r2,#0x40
0003ac  e59f3974          LDR      r3,|L1.3368|
0003b0  e5832000          STR      r2,[r3,#0]
0003b4  ea000004          B        |L1.972|
                  |L1.952|
;;;195       }
;;;196       else {
;;;197          MCI_POWER &= ~0x40;
0003b8  e59f2968          LDR      r2,|L1.3368|
0003bc  e5922000          LDR      r2,[r2,#0]
0003c0  e3c22040          BIC      r2,r2,#0x40
0003c4  e59f395c          LDR      r3,|L1.3368|
0003c8  e5832000          STR      r2,[r3,#0]
                  |L1.972|
;;;198       }
;;;199       /* A small delay after switching mode. */
;;;200       for (i = 0; i < 100; i++);
0003cc  e3a01000          MOV      r1,#0
0003d0  ea000000          B        |L1.984|
                  |L1.980|
0003d4  e2811001          ADD      r1,r1,#1
                  |L1.984|
0003d8  e3510064          CMP      r1,#0x64
0003dc  3afffffc          BCC      |L1.980|
;;;201    }
0003e0  e12fff1e          BX       lr
;;;202    
                          ENDP

                  mci_set_address PROC
;;;224    
;;;225    static BOOL mci_set_address (void) {
0003e4  e92d4078          PUSH     {r3-r6,lr}
;;;226       /* Set Relative Address, send CMD3 after CMD2. */
;;;227       U32 i,arg,rstat,rval;
;;;228    
;;;229       arg = 0;
0003e8  e3a06000          MOV      r6,#0
;;;230       if (CardType == CARD_MMC) {
0003ec  e59f093c          LDR      r0,|L1.3376|
0003f0  e5d00000          LDRB     r0,[r0,#0]  ; CardType
0003f4  e3500001          CMP      r0,#1
0003f8  1a000000          BNE      |L1.1024|
;;;231          /* Fix the RCA address for MMC card. */
;;;232          arg = 0x00010000;
0003fc  e3a06801          MOV      r6,#0x10000
                  |L1.1024|
;;;233       }
;;;234    
;;;235       for (i = 0; i < 20; i++) {
000400  e3a04000          MOV      r4,#0
000404  ea000014          B        |L1.1116|
                  |L1.1032|
;;;236          rstat = mci_command (SET_RELATIVE_ADDR, arg, RESP_SHORT, &rval);
000408  e28d3000          ADD      r3,sp,#0
00040c  e3a02001          MOV      r2,#1
000410  e1a01006          MOV      r1,r6
000414  e3a00003          MOV      r0,#3
000418  ebfffffe          BL       mci_command
00041c  e1a05000          MOV      r5,r0
;;;237          if (!(rstat & MCI_CMD_TIMEOUT) && (rval & 0x0F00) == 0x0500) {
000420  e3150004          TST      r5,#4
000424  1a00000b          BNE      |L1.1112|
000428  e59d0000          LDR      r0,[sp,#0]
00042c  e2000c0f          AND      r0,r0,#0xf00
000430  e3500c05          CMP      r0,#0x500
000434  1a000007          BNE      |L1.1112|
;;;238             /* Response is back and correct. */
;;;239             CardRCA = rval >> 16;
000438  e59d0000          LDR      r0,[sp,#0]
00043c  e59f18f4          LDR      r1,|L1.3384|
000440  e0010820          AND      r0,r1,r0,LSR #16
000444  e59f18e8          LDR      r1,|L1.3380|
000448  e1c100b0          STRH     r0,[r1,#0]  ; CardRCA
;;;240             return (__TRUE);
00044c  e3a00001          MOV      r0,#1
                  |L1.1104|
000450  e8bd4078          POP      {r3-r6,lr}
;;;241          }
;;;242       }
;;;243       return (__FALSE);
;;;244    }
000454  e12fff1e          BX       lr
                  |L1.1112|
000458  e2844001          ADD      r4,r4,#1              ;235
                  |L1.1116|
00045c  e3540014          CMP      r4,#0x14              ;235
000460  3affffe8          BCC      |L1.1032|
000464  e3a00000          MOV      r0,#0                 ;243
000468  eafffff8          B        |L1.1104|
;;;245    
                          ENDP

                  mci_read_cid PROC
;;;248    
;;;249    static BOOL mci_read_cid (void) {
00046c  e92d403f          PUSH     {r0-r5,lr}
;;;250       /* Check CID, send CMD2 after CMD1 (MMC) or ACMD41 (SD). */
;;;251       U32 i,rstat,rval[4];
;;;252    
;;;253       for (i = 0; i < 20; i++) {
000470  e3a05000          MOV      r5,#0
000474  ea00001d          B        |L1.1264|
                  |L1.1144|
;;;254          rstat = mci_command (ALL_SEND_CID, 0, RESP_LONG, &rval[0]);
000478  e28d3000          ADD      r3,sp,#0
00047c  e3a02002          MOV      r2,#2
000480  e3a01000          MOV      r1,#0
000484  e1a00002          MOV      r0,r2
000488  ebfffffe          BL       mci_command
00048c  e1a04000          MOV      r4,r0
;;;255          if (!(rstat & MCI_CMD_TIMEOUT)) {
000490  e3140004          TST      r4,#4
000494  1a000014          BNE      |L1.1260|
;;;256             /* Response is back and correct. */
;;;257             if (CardType == CARD_SD) {
000498  e59f0890          LDR      r0,|L1.3376|
00049c  e5d00000          LDRB     r0,[r0,#0]  ; CardType
0004a0  e3500002          CMP      r0,#2
0004a4  1a000006          BNE      |L1.1220|
;;;258                /* Serial Number for SD Card. */
;;;259                sernum = (rval[2] << 8)  | (rval[3] >> 24);
0004a8  e59d0008          LDR      r0,[sp,#8]
0004ac  e1a00400          LSL      r0,r0,#8
0004b0  e59d100c          LDR      r1,[sp,#0xc]
0004b4  e1800c21          ORR      r0,r0,r1,LSR #24
0004b8  e59f187c          LDR      r1,|L1.3388|
0004bc  e5810000          STR      r0,[r1,#0]  ; sernum
0004c0  ea000005          B        |L1.1244|
                  |L1.1220|
;;;260             }
;;;261             else {
;;;262                /* Serial Number for MMC Card. */
;;;263                sernum = (rval[2] << 16) | (rval[3] >> 16);
0004c4  e59d0008          LDR      r0,[sp,#8]
0004c8  e1a00800          LSL      r0,r0,#16
0004cc  e59d100c          LDR      r1,[sp,#0xc]
0004d0  e1800821          ORR      r0,r0,r1,LSR #16
0004d4  e59f1860          LDR      r1,|L1.3388|
0004d8  e5810000          STR      r0,[r1,#0]  ; sernum
                  |L1.1244|
;;;264             }
;;;265             return (__TRUE);
0004dc  e3a00001          MOV      r0,#1
                  |L1.1248|
0004e0  e28dd010          ADD      sp,sp,#0x10
0004e4  e8bd4030          POP      {r4,r5,lr}
;;;266          }
;;;267       }
;;;268       return (__FALSE);
;;;269    }
0004e8  e12fff1e          BX       lr
                  |L1.1260|
0004ec  e2855001          ADD      r5,r5,#1              ;253
                  |L1.1264|
0004f0  e3550014          CMP      r5,#0x14              ;253
0004f4  3affffdf          BCC      |L1.1144|
0004f8  e3a00000          MOV      r0,#0                 ;268
0004fc  eafffff7          B        |L1.1248|
;;;270    
                          ENDP

                  mmc_init PROC
;;;57     
;;;58     BOOL mci_init (void) {
000500  e92d403f          PUSH     {r0-r5,lr}
;;;59        /* Initialize and enable the Flash Card. */
;;;60        U32 i,rstat,rval[4];
;;;61     
;;;62        /* Power Up the MCI and DMA controller. */
;;;63        PCONP |= 0x30000000;

⌨️ 快捷键说明

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