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

📄 mci_lpc23xx.txt

📁 工厂环境污染控制数据采集器
💻 TXT
📖 第 1 页 / 共 5 页
字号:
;;;345       }
;;;346       block *= 512;
0007c4  e1a04484          LSL      r4,r4,#9
;;;347       for (i = 0; i < 20; i++) {
0007c8  e3a06000          MOV      r6,#0
0007cc  ea00000f          B        |L1.2064|
                  |L1.2000|
;;;348          rstat = mci_command (cmd, block, RESP_SHORT, &rval);
0007d0  e28d3000          ADD      r3,sp,#0
0007d4  e3a02001          MOV      r2,#1
0007d8  e1a01004          MOV      r1,r4
0007dc  e1a00008          MOV      r0,r8
0007e0  ebfffffe          BL       mci_command
0007e4  e1a07000          MOV      r7,r0
;;;349          if (rstat == 0 && (rval & 0x0F00) == 0x0900) {
0007e8  e3570000          CMP      r7,#0
0007ec  1a000006          BNE      |L1.2060|
0007f0  e59d0000          LDR      r0,[sp,#0]
0007f4  e2000c0f          AND      r0,r0,#0xf00
0007f8  e3500c09          CMP      r0,#0x900
0007fc  1a000002          BNE      |L1.2060|
;;;350             /* Ready and in TRAN state. */
;;;351             return (__TRUE);
000800  e3a00001          MOV      r0,#1
                  |L1.2052|
000804  e8bd41f8          POP      {r3-r8,lr}
;;;352          }
;;;353       }
;;;354       return (__FALSE);
;;;355    }
000808  e12fff1e          BX       lr
                  |L1.2060|
00080c  e2866001          ADD      r6,r6,#1              ;347
                  |L1.2064|
000810  e3560014          CMP      r6,#0x14              ;347
000814  3affffed          BCC      |L1.2000|
000818  e3a00000          MOV      r0,#0                 ;354
00081c  eafffff8          B        |L1.2052|
;;;356    
                          ENDP

                  mci_cmd_write_block PROC
;;;359    
;;;360    static BOOL mci_cmd_write_block (U32 block, U32 cnt) {
000820  e92d41f8          PUSH     {r3-r8,lr}
000824  e1a04000          MOV      r4,r0
000828  e1a05001          MOV      r5,r1
;;;361       /* Send a command to Write Single/Multiple block. */
;;;362       U32 i,rstat,rval;
;;;363       U8  cmd;
;;;364    
;;;365       cmd = WRITE_BLOCK;
00082c  e3a08018          MOV      r8,#0x18
;;;366       if (cnt > 1) {
000830  e3550001          CMP      r5,#1
000834  9a000000          BLS      |L1.2108|
;;;367          cmd = WRITE_MULT_BLOCK;
000838  e3a08019          MOV      r8,#0x19
                  |L1.2108|
;;;368       }
;;;369       block *= 512;
00083c  e1a04484          LSL      r4,r4,#9
;;;370       for (i = 0; i < 20; i++) {
000840  e3a06000          MOV      r6,#0
000844  ea00000f          B        |L1.2184|
                  |L1.2120|
;;;371          rstat = mci_command (cmd, block, RESP_SHORT, &rval);
000848  e28d3000          ADD      r3,sp,#0
00084c  e3a02001          MOV      r2,#1
000850  e1a01004          MOV      r1,r4
000854  e1a00008          MOV      r0,r8
000858  ebfffffe          BL       mci_command
00085c  e1a07000          MOV      r7,r0
;;;372          if (rstat == 0 && (rval & 0x0F00) == 0x0900) {
000860  e3570000          CMP      r7,#0
000864  1a000006          BNE      |L1.2180|
000868  e59d0000          LDR      r0,[sp,#0]
00086c  e2000c0f          AND      r0,r0,#0xf00
000870  e3500c09          CMP      r0,#0x900
000874  1a000002          BNE      |L1.2180|
;;;373             /* Ready and in TRAN state. */
;;;374             return (__TRUE);
000878  e3a00001          MOV      r0,#1
                  |L1.2172|
00087c  e8bd41f8          POP      {r3-r8,lr}
;;;375          }
;;;376       }
;;;377       return (__FALSE);
;;;378    }
000880  e12fff1e          BX       lr
                  |L1.2180|
000884  e2866001          ADD      r6,r6,#1              ;370
                  |L1.2184|
000888  e3560014          CMP      r6,#0x14              ;370
00088c  3affffed          BCC      |L1.2120|
000890  e3a00000          MOV      r0,#0                 ;377
000894  eafffff8          B        |L1.2172|
;;;379    
                          ENDP

                  mci_read_status PROC
;;;382    
;;;383    static U32 mci_read_status (void) {
000898  e92d4078          PUSH     {r3-r6,lr}
;;;384       /* Read the status of Flash Card. */
;;;385       U32 i,arg,rstat,rval;
;;;386    
;;;387       arg = 0x00010000;
00089c  e3a06801          MOV      r6,#0x10000
;;;388       if (CardType == CARD_SD) {
0008a0  e59f0488          LDR      r0,|L1.3376|
0008a4  e5d00000          LDRB     r0,[r0,#0]  ; CardType
0008a8  e3500002          CMP      r0,#2
0008ac  1a000002          BNE      |L1.2236|
;;;389          /* Use address from SET_RELATIVE_ADDR. */
;;;390          arg = CardRCA << 16;
0008b0  e59f047c          LDR      r0,|L1.3380|
0008b4  e1d000b0          LDRH     r0,[r0,#0]  ; CardRCA
0008b8  e1a06800          LSL      r6,r0,#16
                  |L1.2236|
;;;391       }
;;;392    
;;;393       for (i = 0; i < 200; i++) {
0008bc  e3a04000          MOV      r4,#0
0008c0  ea00000e          B        |L1.2304|
                  |L1.2244|
;;;394          rstat = mci_command (SEND_STATUS, arg, RESP_SHORT, &rval);
0008c4  e28d3000          ADD      r3,sp,#0
0008c8  e3a02001          MOV      r2,#1
0008cc  e1a01006          MOV      r1,r6
0008d0  e3a0000d          MOV      r0,#0xd
0008d4  ebfffffe          BL       mci_command
0008d8  e1a05000          MOV      r5,r0
;;;395          if (rstat == 0 && (rval & 0x0100)) {
0008dc  e3550000          CMP      r5,#0
0008e0  1a000005          BNE      |L1.2300|
0008e4  e59d0000          LDR      r0,[sp,#0]
0008e8  e3100c01          TST      r0,#0x100
0008ec  0a000002          BEQ      |L1.2300|
;;;396             /* The Ready bit should be set, state TRAN or RCV. */
;;;397             return (rval);
0008f0  e59d0000          LDR      r0,[sp,#0]
                  |L1.2292|
0008f4  e8bd4078          POP      {r3-r6,lr}
;;;398          }
;;;399       }
;;;400       return (MCI_RESP_INVALID);
;;;401    }
0008f8  e12fff1e          BX       lr
                  |L1.2300|
0008fc  e2844001          ADD      r4,r4,#1              ;393
                  |L1.2304|
000900  e35400c8          CMP      r4,#0xc8              ;393
000904  3affffee          BCC      |L1.2244|
000908  e3e00000          MVN      r0,#0                 ;400
00090c  eafffff8          B        |L1.2292|
;;;402    
                          ENDP

                  mci_send_stop PROC
;;;405    
;;;406    static BOOL mci_send_stop (void) {
000910  e92d4038          PUSH     {r3-r5,lr}
;;;407       /* Stop transmission, Flash Card is in wrong state. */
;;;408       U32 i,rstat,rval;
;;;409    
;;;410       for (i = 0; i < 20; i++) {
000914  e3a05000          MOV      r5,#0
000918  ea00000e          B        |L1.2392|
                  |L1.2332|
;;;411          rstat = mci_command (STOP_TRANSMISSION, 0, RESP_SHORT, &rval);
00091c  e28d3000          ADD      r3,sp,#0
000920  e3a02001          MOV      r2,#1
000924  e3a01000          MOV      r1,#0
000928  e3a0000c          MOV      r0,#0xc
00092c  ebfffffe          BL       mci_command
000930  e1a04000          MOV      r4,r0
;;;412          if (rstat == 0 && (rval & 0x0100)) {
000934  e3540000          CMP      r4,#0
000938  1a000005          BNE      |L1.2388|
00093c  e59d0000          LDR      r0,[sp,#0]
000940  e3100c01          TST      r0,#0x100
000944  0a000002          BEQ      |L1.2388|
;;;413             /* The Ready bit should be set. */
;;;414             return (__TRUE);
000948  e3a00001          MOV      r0,#1
                  |L1.2380|
00094c  e8bd4038          POP      {r3-r5,lr}
;;;415          }
;;;416       }
;;;417       return (__FALSE);
;;;418    }
000950  e12fff1e          BX       lr
                  |L1.2388|
000954  e2855001          ADD      r5,r5,#1              ;410
                  |L1.2392|
000958  e3550014          CMP      r5,#0x14              ;410
00095c  3affffee          BCC      |L1.2332|
000960  e3a00000          MOV      r0,#0                 ;417
000964  eafffff8          B        |L1.2380|
;;;419    
                          ENDP

                  mci_wait_for_tran PROC
;;;422    
;;;423    static BOOL mci_wait_for_tran (void) {
000968  e92d4010          PUSH     {r4,lr}
;;;424       /* Wait for Card state TRAN. */
;;;425       U32 i;
;;;426    
;;;427       for (i = WR_TOUT; i; i--) {
00096c  e59f43d8          LDR      r4,|L1.3404|
000970  ea000005          B        |L1.2444|
                  |L1.2420|
;;;428          /* Wait for Card state TRAN to continue. */
;;;429          if ((mci_read_status () & 0x0F00) == 0x0900) {
000974  ebfffffe          BL       mci_read_status
000978  e2000c0f          AND      r0,r0,#0xf00
00097c  e3500c09          CMP      r0,#0x900
000980  1a000000          BNE      |L1.2440|
;;;430             break;
000984  ea000002          B        |L1.2452|
                  |L1.2440|
000988  e2444001          SUB      r4,r4,#1              ;427
                  |L1.2444|
00098c  e3540000          CMP      r4,#0                 ;427
000990  1afffff7          BNE      |L1.2420|
                  |L1.2452|
000994  e1a00000          MOV      r0,r0
;;;431          }
;;;432       }
;;;433       if (i == 0) {
000998  e3540000          CMP      r4,#0
00099c  1a000003          BNE      |L1.2480|
;;;434          /* Previous request has Failed. */
;;;435          mci_send_stop ();
0009a0  ebfffffe          BL       mci_send_stop
;;;436          return (__FALSE);
0009a4  e3a00000          MOV      r0,#0
                  |L1.2472|
0009a8  e8bd4010          POP      {r4,lr}
;;;437       }
;;;438       return (__TRUE);
;;;439    }
0009ac  e12fff1e          BX       lr
                  |L1.2480|
0009b0  e3a00001          MOV      r0,#1                 ;438
0009b4  eafffffb          B        |L1.2472|
;;;440    
                          ENDP

                  mci_dma_start PROC
;;;517    
;;;518       if (mode == DMA_READ) {
0009b8  e3500000          CMP      r0,#0
0009bc  1a000009          BNE      |L1.2536|
;;;519          /* Transfer from MCI-FIFO to memory. */
;;;520          GPDMA_CH0_SRC  = (U32)&MCI_FIFO;
0009c0  e59f2388          LDR      r2,|L1.3408|
0009c4  e59f3388          LDR      r3,|L1.3412|
0009c8  e5832100          STR      r2,[r3,#0x100]
;;;521          GPDMA_CH0_DEST = (U32)buf;
0009cc  e00327c2          AND      r2,r3,r2,ASR #15
0009d0  e5821104          STR      r1,[r2,#0x104]
;;;522          /* The burst size set to 8, transfer size 512 bytes. */
;;;523          GPDMA_CH0_CTRL = (512 >> 2)   | (0x02 << 12) | (0x02 << 15) | 
0009d4  e59f237c          LDR      r2,|L1.3416|
0009d8  e583210c          STR      r2,[r3,#0x10c]
;;;524                           (0x02 << 18) | (0x02 << 21) | (1 << 27)    | (1u << 31);
;;;525          GPDMA_CH0_CFG  = 0x10001 | (0x04 << 1) | (0x00 << 6) | (0x06 << 11);
0009dc  e59f2378          LDR      r2,|L1.3420|
0009e0  e5832110          STR      r2,[r3,#0x110]
0009e4  ea000008          B        |L1.2572|
                  |L1.2536|
;;;526       }
;;;527       else {
;;;528          /* Transfer from memory to MCI-FIFO. */
;;;529          GPDMA_CH0_SRC  = (U32)buf;
0009e8  e59f2364          LDR      r2,|L1.3412|
0009ec  e5821100          STR      r1,[r2,#0x100]
;;;530          GPDMA_CH0_DEST = (U32)&MCI_FIFO;
0009f0  e59f2358          LDR      r2,|L1.3408|
0009f4  e59f3358          LDR      r3,|L1.3412|
0009f8  e5832104          STR      r2,[r3,#0x104]
;;;531          /* The burst size set to 8, transfer size 512 bytes. */
;;;532          GPDMA_CH0_CTRL = (512 >> 2)   | (0x02 << 12) | (0x02 << 15) |
0009fc  e59f235c          LDR      r2,|L1.3424|
000a00  e583210c          STR      r2,[r3,#0x10c]
;;;533                           (0x02 << 18) | (0x02 << 21) | (1 << 26)    | (1u << 31);
;;;534          GPDMA_CH0_CFG  = 0x10001 | (0x00 << 1) | (0x04 << 6) | (0x05 << 11);
000a04  e59f2358          LDR      r2,|L1.3428|
000a08  e5832110          STR      r2,[r3,#0x110]
                  |L1.2572|
;;;535       }
;;;536       /* Enable DMA channels, little endian */
;;;537       GPDMA_INT_TCCLR = 0x01;
000a0c  e3a02001          MOV      r2,#1
000a10  e59f333c          LDR      r3,|L1.3412|
000a14  e5832008          STR      r2,[r3,#8]
;;;538       GPDMA_CONFIG    = 0x01;
000a18  e5832030          STR      r2,[r3,#0x30]
;;;539    }
000a1c  e12fff1e          BX       lr
;;;540    
                          ENDP

                  mmc_read_sect PROC
;;;543    
;;;544    BOOL mci_read_sect (U32 sect, U8 *buf, U32 cnt) {
000a20  e92d40f0          PUSH     {r4-r7,lr}
000a24  e1a04000          MOV      r4,r0
000a28  e1a05001          MOV      r5,r1
000a2c  e1a06002          MOV      r6,r2
;;;545       /* Read one or more 512 byte sectors from Flash Card. */

⌨️ 快捷键说明

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