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

📄 iic.txt

📁 支持三星原产的S3C24A0开发板
💻 TXT
📖 第 1 页 / 共 4 页
字号:
;;;206        switch(_iicMode)
000318  e59f0340          LDR      r0,|L1.1632|
00031c  e5900000          LDR      r0,[r0,#0]  ; _iicMode
000320  e3500001          CMP      r0,#1
000324  0a000038          BEQ      |L1.1036|
000328  e3500002          CMP      r0,#2
00032c  0a000004          BEQ      |L1.836|
000330  e3500003          CMP      r0,#3
000334  0a000005          BEQ      |L1.848|
000338  e3500004          CMP      r0,#4
00033c  1a000070          BNE      |L1.1284|
000340  ea000054          B        |L1.1176|
;;;207        {
;;;208           case POLLACK:
;;;209               _iicStatus = iicSt;
                  |L1.836|
000344  e59f0328          LDR      r0,|L1.1652|
000348  e5805000          STR      r5,[r0,#0]  ; _iicStatus
;;;210               break;
00034c  ea00006d          B        |L1.1288|
;;;211    
;;;212           case RDDATA:
;;;213               if((_iicDataCount--)==0)
                  |L1.848|
000350  e59f0314          LDR      r0,|L1.1644|
000354  e5900000          LDR      r0,[r0,#0]  ; _iicDataCount
000358  e2401001          SUB      r1,r0,#1
00035c  e59f0308          LDR      r0,|L1.1644|
000360  e5902000          LDR      r2,[r0,#0]  ; _iicDataCount
000364  e5801000          STR      r1,[r0,#0]  ; _iicDataCount
000368  e3520000          CMP      r2,#0
00036c  1a000011          BNE      |L1.952|
;;;214               {
;;;215                   _iicData[_iicPt++] = rIICDS;
000370  e59f02f8          LDR      r0,|L1.1648|
000374  e590100c          LDR      r1,[r0,#0xc]
000378  e59f02e4          LDR      r0,|L1.1636|
00037c  e5900000          LDR      r0,[r0,#0]  ; _iicPt
000380  e2802001          ADD      r2,r0,#1
000384  e59f32d8          LDR      r3,|L1.1636|
000388  e5832000          STR      r2,[r3,#0]  ; _iicPt
00038c  e59f22d4          LDR      r2,|L1.1640|
000390  e7c21000          STRB     r1,[r2,r0]
;;;216                   rIICSTAT = 0x90;                 //Stop MasRx condition
000394  e3a00090          MOV      r0,#0x90
000398  e59f12d0          LDR      r1,|L1.1648|
00039c  e5810004          STR      r0,[r1,#4]
;;;217                   rIICCON  = 0xaf;                 //Resumes IIC operation.
0003a0  e3a000af          MOV      r0,#0xaf
0003a4  e1c11000          BIC      r1,r1,r0
0003a8  e5810000          STR      r0,[r1,#0]
;;;218                   Delay(1);                        //Wait until stop condtion is in effect.
0003ac  e3a00001          MOV      r0,#1
0003b0  ebfffffe          BL       Delay
;;;219                                                    //Too long time...
;;;220                                                    //The pending bit will not be set after issuing stop condition.
;;;221                   break;
0003b4  ea000053          B        |L1.1288|
;;;222               }
;;;223               _iicData[_iicPt++] = rIICDS;         //The last data has to be read with no ack.
                  |L1.952|
0003b8  e59f02b0          LDR      r0,|L1.1648|
0003bc  e590100c          LDR      r1,[r0,#0xc]
0003c0  e59f029c          LDR      r0,|L1.1636|
0003c4  e5900000          LDR      r0,[r0,#0]  ; _iicPt
0003c8  e2802001          ADD      r2,r0,#1
0003cc  e59f3290          LDR      r3,|L1.1636|
0003d0  e5832000          STR      r2,[r3,#0]  ; _iicPt
0003d4  e59f228c          LDR      r2,|L1.1640|
0003d8  e7c21000          STRB     r1,[r2,r0]
;;;224               if((_iicDataCount)==0)
0003dc  e59f0288          LDR      r0,|L1.1644|
0003e0  e5900000          LDR      r0,[r0,#0]  ; _iicDataCount
0003e4  e3500000          CMP      r0,#0
0003e8  1a000003          BNE      |L1.1020|
;;;225                   rIICCON = 0x2f;                  //Resumes IIC operation with NOACK.
0003ec  e3a0002f          MOV      r0,#0x2f
0003f0  e59f1278          LDR      r1,|L1.1648|
0003f4  e5810000          STR      r0,[r1,#0]
0003f8  ea000002          B        |L1.1032|
;;;226               else
;;;227                   rIICCON = 0xaf;                  //Resumes IIC operation with ACK
                  |L1.1020|
0003fc  e3a000af          MOV      r0,#0xaf
000400  e59f1268          LDR      r1,|L1.1648|
000404  e5810000          STR      r0,[r1,#0]
;;;228                   break;
                  |L1.1032|
000408  ea00003e          B        |L1.1288|
;;;229    
;;;230            case WRDATA:
;;;231                if((_iicDataCount--)==0)
                  |L1.1036|
00040c  e59f0258          LDR      r0,|L1.1644|
000410  e5900000          LDR      r0,[r0,#0]  ; _iicDataCount
000414  e2401001          SUB      r1,r0,#1
000418  e59f024c          LDR      r0,|L1.1644|
00041c  e5902000          LDR      r2,[r0,#0]  ; _iicDataCount
000420  e5801000          STR      r1,[r0,#0]  ; _iicDataCount
000424  e3520000          CMP      r2,#0
000428  1a000008          BNE      |L1.1104|
;;;232                {
;;;233                    rIICSTAT = 0xd0;                //Stop MasTx condition, ACK flag clear
00042c  e3a000d0          MOV      r0,#0xd0
000430  e59f1238          LDR      r1,|L1.1648|
000434  e5810004          STR      r0,[r1,#4]
;;;234                    rIICCON  = 0xaf;                //Resumes IIC operation.
000438  e3a000af          MOV      r0,#0xaf
00043c  e1c11000          BIC      r1,r1,r0
000440  e5810000          STR      r0,[r1,#0]
;;;235                    Delay(1);                       //Wait until stop condtion is in effect.
000444  e3a00001          MOV      r0,#1
000448  ebfffffe          BL       Delay
;;;236                    //The pending bit will not be set after issuing stop condition.
;;;237                    break;
00044c  ea00002d          B        |L1.1288|
;;;238                }
;;;239                rIICDS = _iicData[_iicPt++];        //_iicData[0] has dummy.
                  |L1.1104|
000450  e59f020c          LDR      r0,|L1.1636|
000454  e5900000          LDR      r0,[r0,#0]  ; _iicPt
000458  e2801001          ADD      r1,r0,#1
00045c  e59f2200          LDR      r2,|L1.1636|
000460  e5821000          STR      r1,[r2,#0]  ; _iicPt
000464  e59f11fc          LDR      r1,|L1.1640|
000468  e7d10000          LDRB     r0,[r1,r0]
00046c  e59f11fc          LDR      r1,|L1.1648|
000470  e581000c          STR      r0,[r1,#0xc]
;;;240                for(i=0;i<10;i++);                  //for setup time until rising edge of IICSCL
000474  e3a04000          MOV      r4,#0
                  |L1.1144|
000478  e354000a          CMP      r4,#0xa
00047c  2a000001          BCS      |L1.1160|
000480  e2844001          ADD      r4,r4,#1
000484  eafffffb          B        |L1.1144|
;;;241                rIICCON = 0xaf;                     //resumes IIC operation.
                  |L1.1160|
000488  e3a000af          MOV      r0,#0xaf
00048c  e59f11dc          LDR      r1,|L1.1648|
000490  e5810000          STR      r0,[r1,#0]
;;;242                break;
000494  ea00001b          B        |L1.1288|
;;;243    
;;;244            case SETRDADDR:
;;;245    //          Uart_Printf("[ S%d ]",_iicDataCount);
;;;246                if((_iicDataCount--)==0)
                  |L1.1176|
000498  e59f01cc          LDR      r0,|L1.1644|
00049c  e5900000          LDR      r0,[r0,#0]  ; _iicDataCount
0004a0  e2401001          SUB      r1,r0,#1
0004a4  e59f01c0          LDR      r0,|L1.1644|
0004a8  e5902000          LDR      r2,[r0,#0]  ; _iicDataCount
0004ac  e5801000          STR      r1,[r0,#0]  ; _iicDataCount
0004b0  e3520000          CMP      r2,#0
0004b4  1a000000          BNE      |L1.1212|
;;;247                    break;                          //IIC operation is stopped because of IICCON[4]
0004b8  ea000012          B        |L1.1288|
;;;248                rIICDS = _iicData[_iicPt++];
                  |L1.1212|
0004bc  e59f01a0          LDR      r0,|L1.1636|
0004c0  e5900000          LDR      r0,[r0,#0]  ; _iicPt
0004c4  e2801001          ADD      r1,r0,#1
0004c8  e59f2194          LDR      r2,|L1.1636|
0004cc  e5821000          STR      r1,[r2,#0]  ; _iicPt
0004d0  e59f1190          LDR      r1,|L1.1640|
0004d4  e7d10000          LDRB     r0,[r1,r0]
0004d8  e59f1190          LDR      r1,|L1.1648|
0004dc  e581000c          STR      r0,[r1,#0xc]
;;;249                for(i=0;i<10;i++);                  //For setup time until rising edge of IICSCL
0004e0  e3a04000          MOV      r4,#0
                  |L1.1252|
0004e4  e354000a          CMP      r4,#0xa
0004e8  2a000001          BCS      |L1.1268|
0004ec  e2844001          ADD      r4,r4,#1
0004f0  eafffffb          B        |L1.1252|
;;;250                rIICCON = 0xaf;                     //Resumes IIC operation.
                  |L1.1268|
0004f4  e3a000af          MOV      r0,#0xaf
0004f8  e59f1170          LDR      r1,|L1.1648|
0004fc  e5810000          STR      r0,[r1,#0]
;;;251                break;
000500  ea000000          B        |L1.1288|
;;;252    
;;;253            default:
;;;254                break;
                  |L1.1284|
000504  e1a00000          NOP      
;;;255        }
;;;256    }
                  |L1.1288|
000508  e8bd503f          LDMFD    sp!,{r0-r5,r12,lr}
00050c  e25ef004          SUBS     pc,lr,#4
                          ENDP

                  Test_Iic PROC
;;;88     void Test_Iic(void)
;;;89     {
000510  e92d4038          STMFD    sp!,{r3-r5,lr}
;;;90         unsigned int i,j;
;;;91         static U8 data[256];
;;;92     
;;;93         Uart_Printf("[ IIC Test(Interrupt) using KS24C080 ]\n");
000514  e28f0f58          ADR      r0,|L1.1660|
000518  ebfffffe          BL       _printf
;;;94     
;;;95         pISR_IIC = (unsigned)IicInt;
00051c  e59f0180          LDR      r0,|L1.1700|
000520  e59f1180          LDR      r1,|L1.1704|
000524  e5810f8c          STR      r0,[r1,#0xf8c]
;;;96         rINTMSK &= ~(BIT_IIC);
000528  e59f0148          LDR      r0,|L1.1656|
00052c  e5900008          LDR      r0,[r0,#8]
000530  e3c00680          BIC      r0,r0,#0x8000000
000534  e59f113c          LDR      r1,|L1.1656|
000538  e5810008          STR      r0,[r1,#8]
;;;97     
;;;98         //Enable ACK, Prescaler IICCLK=PCLK/16, Enable interrupt, Transmit clock value Tx clock=IICCLK/16
;;;99         // If PCLK 50.7MHz, IICCLK = 3.17MHz, Tx Clock = 0.198MHz
;;;100        rIICCON = (1<<7) | (0<<6) | (1<<5) | (0xf);
00053c  e3a000af          MOV      r0,#0xaf
000540  e2811644          ADD      r1,r1,#0x4400000
000544  e5810000          STR      r0,[r1,#0]
;;;101    
;;;102        rIICADD  = 0x10;                    //2410 slave address = [7:1]
000548  e3a00010          MOV      r0,#0x10
00054c  e1c11000          BIC      r1,r1,r0
000550  e5810008          STR      r0,[r1,#8]
;;;103        rIICSTAT = 0x10;                    //IIC bus data output enable(Rx/Tx)	
000554  e3a00010          MOV      r0,#0x10
000558  e1c11000          BIC      r1,r1,r0
00055c  e5810004          STR      r0,[r1,#4]
;;;104    
;;;105        Uart_Printf("Write test data into KS24C080\n");
000560  e28f0f51          ADR      r0,|L1.1708|
000564  ebfffffe          BL       _printf
;;;106    
;;;107        for(i=0;i<256;i++)
000568  e3a04000          MOV      r4,#0
                  |L1.1388|
00056c  e3540f40          CMP      r4,#0x100
000570  2a000007          BCS      |L1.1428|
000574  ea000001          B        |L1.1408|
                  |L1.1400|
000578  e2844001          ADD      r4,r4,#1
00057c  eafffffa          B        |L1.1388|
;;;108            Wr24C080(0xa0,(U8)i,i);	// 7bit address format : address(device addr)+data(word addr)+data
                  |L1.1408|
000580  e20420ff          AND      r2,r4,#0xff
000584  e20410ff          AND      r1,r4,#0xff
000588  e3a000a0          MOV      r0,#0xa0
00058c  ebfffffe          BL       Wr24C080
000590  eafffff8          B        |L1.1400|
;;;109    
;;;110        for(i=0;i<256;i++)
                  |L1.1428|
000594  e3a04000          MOV      r4,#0
                  |L1.1432|
000598  e3540f40          CMP      r4,#0x100
00059c  2a000006          BCS      |L1.1468|
0005a0  ea000001          B        |L1.1452|
                  |L1.1444|
0005a4  e2844001          ADD      r4,r4,#1
0005a8  eafffffa          B        |L1.1432|
;;;111            data[i] = 0;
                  |L1.1452|
0005ac  e3a00000          MOV      r0,#0
0005b0  e59f1114          LDR      r1,|L1.1740|
0005b4  e7c10004          STRB     r0,[r1,r4]
0005b8  eafffff9          B        |L1.1444|
;;;112    
;;;113        Uart_Printf("Read test data from KS24C080\n");
                  |L1.1468|
0005bc  e28f0f43          ADR      r0,|L1.1744|
0005c0  ebfffffe          BL       _printf
;;;114    
;;;115        for(i=0;i<256;i++)
0005c4  e3a04000          MOV      r4,#0
                  |L1.1480|
0005c8  e3540f40          CMP      r4,#0x100
0005cc  2a000008          BCS      |L1.1524|
0005d0  ea000001          B        |L1.1500|
                  |L1.1492|
0005d4  e2844001          ADD      r4,r4,#1
0005d8  eafffffa          B        |L1.1480|
;;;116            Rd24C080(0xa0,(U8)i,&(data[i]));    // 7bit address format : address(device addr)+data(word addr)+data
                  |L1.1500|
0005dc  e59f00e8          LDR      r0,|L1.1740|
0005e0  e0802004          ADD      r2,r0,r4
0005e4  e20410ff          AND      r1,r4,#0xff
0005e8  e3a000a0          MOV      r0,#0xa0
0005ec  ebfffffe          BL       Rd24C080
0005f0  eafffff7          B        |L1.1492|
;;;117    
;;;118            //Line changed 0 ~ f
;;;119        for(i=0;i<16;i++)
                  |L1.1524|
0005f4  e3a04000          MOV      r4,#0
                  |L1.1528|
0005f8  e3540010          CMP      r4,#0x10
0005fc  2a000011          BCS      |L1.1608|
000600  ea000001          B        |L1.1548|
                  |L1.1540|
000604  e2844001          ADD      r4,r4,#1
000608  eafffffa          B        |L1.1528|
;;;120        {
;;;121            for(j=0;j<16;j++)
                  |L1.1548|
00060c  e3a05000          MOV      r5,#0
                  |L1.1552|
000610  e3550010          CMP      r5,#0x10
000614  2a000008          BCS      |L1.1596|
000618  ea000001          B        |L1.1572|
                  |L1.1564|
00061c  e2855001          ADD      r5,r5,#1
000620  eafffffa          B        |L1.1552|
;;;122                Uart_Printf("%2x ",data[i*16+j]);
                  |L1.1572|
000624  e0850204          ADD      r0,r5,r4,LSL #4
000628  e59f209c          LDR      r2,|L1.1740|
00062c  e7d21000          LDRB     r1,[r2,r0]
000630  e28f00b8          ADR      r0,|L1.1776|
000634  ebfffffe          BL       _printf
000638  eafffff7          B        |L1.1564|
;;;123            Uart_Printf("\n");
                  |L1.1596|
00063c  e28f00a8          ADR      r0,|L1.1772|
000640  ebfffffe          BL       _printf
;;;124        }
000644  eaffffee          B        |L1.1540|
;;;125        rINTMSK |= BIT_IIC;
                  |L1.1608|
000648  e59f0028          LDR      r0,|L1.1656|
00064c  e5900008          LDR      r0,[r0,#8]
000650  e3800680          ORR      r0,r0,#0x8000000
000654  e59f101c          LDR      r1,|L1.1656|
000658  e5810008          STR      r0,[r1,#8]
;;;126    }
00065c  e8bd8038          LDMFD    sp!,{r3-r5,pc}
                  |L1.1632|
000660  00000228          DCD      ||.bss$2|| + 552
                  |L1.1636|

⌨️ 快捷键说明

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