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

📄 iic.txt

📁 SMDK2442所有设备的驱动测试程序。运行monitor程序
💻 TXT
📖 第 1 页 / 共 5 页
字号:
0002b0  e5900000          LDR      r0,[r0,#0]  ; _iicStatus
0002b4  e3500f40          CMP      r0,#0x100
0002b8  0afffffb          BEQ      |L1.684|
;;;150               
;;;151            if(!(_iicStatus&0x1))
0002bc  e59f0420          LDR      r0,|L1.1764|
0002c0  e5900000          LDR      r0,[r0,#0]  ; _iicStatus
0002c4  e3100001          TST      r0,#1
0002c8  1a000000          BNE      |L1.720|
;;;152                break;                      //When ACK is received
0002cc  ea000000          B        |L1.724|
;;;153        }
                  |L1.720|
0002d0  eaffffe8          B        |L1.632|
;;;154        rIICSTAT = 0xd0;                    //Stop MasTx condition 
                  |L1.724|
0002d4  e3a000d0          MOV      r0,#0xd0
0002d8  e3a01454          MOV      r1,#0x54000000
0002dc  e5810004          STR      r0,[r1,#4]
;;;155        rIICCON  = 0xaf;                    //Resumes IIC operation. 
0002e0  e3a000af          MOV      r0,#0xaf
0002e4  e3a01454          MOV      r1,#0x54000000
0002e8  e5810000          STR      r0,[r1,#0]
;;;156        Delay(1);                           //Wait until stop condtion is in effect.
0002ec  e3a00001          MOV      r0,#1
0002f0  ebfffffe          BL       Delay
;;;157           //Write is completed.
;;;158    }
0002f4  e8bd8070          LDMFD    sp!,{r4-r6,pc}
                          ENDP

                  IicInt PROC
;;;187    void __irq IicInt(void)
;;;188    {
0002f8  e92d503f          STMFD    sp!,{r0-r5,r12,lr}
;;;189        U32 iicSt,i;
;;;190        
;;;191        rSRCPND = BIT_IIC;          //Clear pending bit
0002fc  e3a00680          MOV      r0,#0x8000000
000300  e3a0144a          MOV      r1,#0x4a000000
000304  e5810000          STR      r0,[r1,#0]
;;;192        rINTPND = BIT_IIC;
000308  e3a00680          MOV      r0,#0x8000000
00030c  e3a0144a          MOV      r1,#0x4a000000
000310  e5810010          STR      r0,[r1,#0x10]
;;;193        iicSt   = rIICSTAT; 
000314  e3a00454          MOV      r0,#0x54000000
000318  e5900004          LDR      r0,[r0,#4]
00031c  e1a05000          MOV      r5,r0
;;;194        
;;;195        if(iicSt & 0x8){}           //When bus arbitration is failed.
000320  e1a00000          NOP      
;;;196        if(iicSt & 0x4){}           //When a slave address is matched with IICADD
000324  e1a00000          NOP      
;;;197        if(iicSt & 0x2){}           //When a slave address is 0000000b
000328  e1a00000          NOP      
;;;198        if(iicSt & 0x1){}           //When ACK isn't received
00032c  e1a00000          NOP      
;;;199    
;;;200        switch(_iicMode)
000330  e59f039c          LDR      r0,|L1.1748|
000334  e5900000          LDR      r0,[r0,#0]  ; _iicMode
000338  e3500001          CMP      r0,#1
00033c  0a000038          BEQ      |L1.1060|
000340  e3500002          CMP      r0,#2
000344  0a000004          BEQ      |L1.860|
000348  e3500003          CMP      r0,#3
00034c  0a000005          BEQ      |L1.872|
000350  e3500004          CMP      r0,#4
000354  1a000070          BNE      |L1.1308|
000358  ea000054          B        |L1.1200|
;;;201        {
;;;202           case POLLACK:
;;;203               _iicStatus = iicSt;
                  |L1.860|
00035c  e59f0380          LDR      r0,|L1.1764|
000360  e5805000          STR      r5,[r0,#0]  ; _iicStatus
;;;204               break;
000364  ea00006d          B        |L1.1312|
;;;205    
;;;206           case RDDATA:
;;;207               if((_iicDataCount--)==0)
                  |L1.872|
000368  e59f0370          LDR      r0,|L1.1760|
00036c  e5900000          LDR      r0,[r0,#0]  ; _iicDataCount
000370  e2401001          SUB      r1,r0,#1
000374  e59f0364          LDR      r0,|L1.1760|
000378  e5902000          LDR      r2,[r0,#0]  ; _iicDataCount
00037c  e5801000          STR      r1,[r0,#0]  ; _iicDataCount
000380  e3520000          CMP      r2,#0
000384  1a000011          BNE      |L1.976|
;;;208               {
;;;209                   _iicData[_iicPt++] = rIICDS;
000388  e3a00454          MOV      r0,#0x54000000
00038c  e590100c          LDR      r1,[r0,#0xc]
000390  e59f0340          LDR      r0,|L1.1752|
000394  e5900000          LDR      r0,[r0,#0]  ; _iicPt
000398  e2802001          ADD      r2,r0,#1
00039c  e59f3334          LDR      r3,|L1.1752|
0003a0  e5832000          STR      r2,[r3,#0]  ; _iicPt
0003a4  e59f2330          LDR      r2,|L1.1756|
0003a8  e7c21000          STRB     r1,[r2,r0]
;;;210                
;;;211                   rIICSTAT = 0x90;                 //Stop MasRx condition 
0003ac  e3a00090          MOV      r0,#0x90
0003b0  e3a01454          MOV      r1,#0x54000000
0003b4  e5810004          STR      r0,[r1,#4]
;;;212                   rIICCON  = 0xaf;                 //Resumes IIC operation.
0003b8  e3a000af          MOV      r0,#0xaf
0003bc  e3a01454          MOV      r1,#0x54000000
0003c0  e5810000          STR      r0,[r1,#0]
;;;213                   Delay(1);                        //Wait until stop condtion is in effect.
0003c4  e3a00001          MOV      r0,#1
0003c8  ebfffffe          BL       Delay
;;;214                                                    //Too long time... 
;;;215                                                    //The pending bit will not be set after issuing stop condition.
;;;216                   break;    
0003cc  ea000053          B        |L1.1312|
;;;217               }      
;;;218               _iicData[_iicPt++] = rIICDS;         //The last data has to be read with no ack.
                  |L1.976|
0003d0  e3a00454          MOV      r0,#0x54000000
0003d4  e590100c          LDR      r1,[r0,#0xc]
0003d8  e59f02f8          LDR      r0,|L1.1752|
0003dc  e5900000          LDR      r0,[r0,#0]  ; _iicPt
0003e0  e2802001          ADD      r2,r0,#1
0003e4  e59f32ec          LDR      r3,|L1.1752|
0003e8  e5832000          STR      r2,[r3,#0]  ; _iicPt
0003ec  e59f22e8          LDR      r2,|L1.1756|
0003f0  e7c21000          STRB     r1,[r2,r0]
;;;219    
;;;220               if((_iicDataCount)==0)
0003f4  e59f02e4          LDR      r0,|L1.1760|
0003f8  e5900000          LDR      r0,[r0,#0]  ; _iicDataCount
0003fc  e3500000          CMP      r0,#0
000400  1a000003          BNE      |L1.1044|
;;;221                   rIICCON = 0x2f;                  //Resumes IIC operation with NOACK.  
000404  e3a0002f          MOV      r0,#0x2f
000408  e3a01454          MOV      r1,#0x54000000
00040c  e5810000          STR      r0,[r1,#0]
000410  ea000002          B        |L1.1056|
;;;222               else 
;;;223                   rIICCON = 0xaf;                  //Resumes IIC operation with ACK
                  |L1.1044|
000414  e3a000af          MOV      r0,#0xaf
000418  e3a01454          MOV      r1,#0x54000000
00041c  e5810000          STR      r0,[r1,#0]
;;;224                   break;
                  |L1.1056|
000420  ea00003e          B        |L1.1312|
;;;225    
;;;226            case WRDATA:
;;;227                if((_iicDataCount--)==0)
                  |L1.1060|
000424  e59f02b4          LDR      r0,|L1.1760|
000428  e5900000          LDR      r0,[r0,#0]  ; _iicDataCount
00042c  e2401001          SUB      r1,r0,#1
000430  e59f02a8          LDR      r0,|L1.1760|
000434  e5902000          LDR      r2,[r0,#0]  ; _iicDataCount
000438  e5801000          STR      r1,[r0,#0]  ; _iicDataCount
00043c  e3520000          CMP      r2,#0
000440  1a000008          BNE      |L1.1128|
;;;228                {
;;;229                    rIICSTAT = 0xd0;                //Stop MasTx condition 
000444  e3a000d0          MOV      r0,#0xd0
000448  e3a01454          MOV      r1,#0x54000000
00044c  e5810004          STR      r0,[r1,#4]
;;;230                    rIICCON  = 0xaf;                //Resumes IIC operation.
000450  e3a000af          MOV      r0,#0xaf
000454  e3a01454          MOV      r1,#0x54000000
000458  e5810000          STR      r0,[r1,#0]
;;;231                    Delay(1);                       //Wait until stop condtion is in effect.
00045c  e3a00001          MOV      r0,#1
000460  ebfffffe          BL       Delay
;;;232                           //The pending bit will not be set after issuing stop condition.
;;;233                    break;    
000464  ea00002d          B        |L1.1312|
;;;234                }
;;;235                rIICDS = _iicData[_iicPt++];        //_iicData[0] has dummy.
                  |L1.1128|
000468  e59f0268          LDR      r0,|L1.1752|
00046c  e5900000          LDR      r0,[r0,#0]  ; _iicPt
000470  e2801001          ADD      r1,r0,#1
000474  e59f225c          LDR      r2,|L1.1752|
000478  e5821000          STR      r1,[r2,#0]  ; _iicPt
00047c  e59f1258          LDR      r1,|L1.1756|
000480  e7d10000          LDRB     r0,[r1,r0]
000484  e3a01454          MOV      r1,#0x54000000
000488  e581000c          STR      r0,[r1,#0xc]
;;;236                for(i=0;i<10;i++);                  //for setup time until rising edge of IICSCL
00048c  e3a04000          MOV      r4,#0
                  |L1.1168|
000490  e354000a          CMP      r4,#0xa
000494  2a000001          BCS      |L1.1184|
000498  e2844001          ADD      r4,r4,#1
00049c  eafffffb          B        |L1.1168|
;;;237                  
;;;238                rIICCON = 0xaf;                     //resumes IIC operation.
                  |L1.1184|
0004a0  e3a000af          MOV      r0,#0xaf
0004a4  e3a01454          MOV      r1,#0x54000000
0004a8  e5810000          STR      r0,[r1,#0]
;;;239                break;
0004ac  ea00001b          B        |L1.1312|
;;;240    
;;;241            case SETRDADDR:
;;;242    //          Uart_Printf("[ S%d ]",_iicDataCount);
;;;243                if((_iicDataCount--)==0)
                  |L1.1200|
0004b0  e59f0228          LDR      r0,|L1.1760|
0004b4  e5900000          LDR      r0,[r0,#0]  ; _iicDataCount
0004b8  e2401001          SUB      r1,r0,#1
0004bc  e59f021c          LDR      r0,|L1.1760|
0004c0  e5902000          LDR      r2,[r0,#0]  ; _iicDataCount
0004c4  e5801000          STR      r1,[r0,#0]  ; _iicDataCount
0004c8  e3520000          CMP      r2,#0
0004cc  1a000000          BNE      |L1.1236|
;;;244                    break;                          //IIC operation is stopped because of IICCON[4]    
0004d0  ea000012          B        |L1.1312|
;;;245                rIICDS = _iicData[_iicPt++];
                  |L1.1236|
0004d4  e59f01fc          LDR      r0,|L1.1752|
0004d8  e5900000          LDR      r0,[r0,#0]  ; _iicPt
0004dc  e2801001          ADD      r1,r0,#1
0004e0  e59f21f0          LDR      r2,|L1.1752|
0004e4  e5821000          STR      r1,[r2,#0]  ; _iicPt
0004e8  e59f11ec          LDR      r1,|L1.1756|
0004ec  e7d10000          LDRB     r0,[r1,r0]
0004f0  e3a01454          MOV      r1,#0x54000000
0004f4  e581000c          STR      r0,[r1,#0xc]
;;;246                for(i=0;i<10;i++);                  //For setup time until rising edge of IICSCL
0004f8  e3a04000          MOV      r4,#0
                  |L1.1276|
0004fc  e354000a          CMP      r4,#0xa
000500  2a000001          BCS      |L1.1292|
000504  e2844001          ADD      r4,r4,#1
000508  eafffffb          B        |L1.1276|
;;;247                rIICCON = 0xaf;                     //Resumes IIC operation.
                  |L1.1292|
00050c  e3a000af          MOV      r0,#0xaf
000510  e3a01454          MOV      r1,#0x54000000
000514  e5810000          STR      r0,[r1,#0]
;;;248                break;
000518  ea000000          B        |L1.1312|
;;;249    
;;;250            default:
;;;251                break;      
                  |L1.1308|
00051c  e1a00000          NOP      
;;;252        }
;;;253    }
                  |L1.1312|
000520  e8bd503f          LDMFD    sp!,{r0-r5,r12,lr}
000524  e25ef004          SUBS     pc,lr,#4
                          ENDP

                  Test_Iic PROC
;;;76     void Test_Iic(void)
;;;77     {
000528  e92d40f8          STMFD    sp!,{r3-r7,lr}
;;;78         unsigned int i,j,save_E,save_PE;
;;;79         static U8 data[256];
;;;80     
;;;81         Uart_Printf("[ IIC Test(Interrupt) using KS24C080 ]\n");
00052c  e28f0f6d          ADR      r0,|L1.1768|
000530  ebfffffe          BL       Uart_Printf
;;;82     
;;;83         save_E   = rGPECON;
000534  e3a00456          MOV      r0,#0x56000000
000538  e5900040          LDR      r0,[r0,#0x40]
00053c  e1a06000          MOV      r6,r0
;;;84         save_PE  = rGPEUP;
000540  e3a00456          MOV      r0,#0x56000000
000544  e5900048          LDR      r0,[r0,#0x48]
000548  e1a07000          MOV      r7,r0
;;;85         rGPEUP  |= 0xc000;                  //Pull-up disable
00054c  e3a00456          MOV      r0,#0x56000000
000550  e5900048          LDR      r0,[r0,#0x48]
000554  e3800cc0          ORR      r0,r0,#0xc000
000558  e3a01456          MOV      r1,#0x56000000
00055c  e5810048          STR      r0,[r1,#0x48]
;;;86         rGPECON |= 0xa00000;                //GPE15:IICSDA , GPE14:IICSCL 
000560  e3a00456          MOV      r0,#0x56000000
000564  e5900040          LDR      r0,[r0,#0x40]
000568  e38008a0          ORR      r0,r0,#0xa00000
00056c  e3a01456          MOV      r1,#0x56000000

⌨️ 快捷键说明

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