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

📄 iic.txt

📁 支持三星原产的S3C24A0开发板
💻 TXT
📖 第 1 页 / 共 4 页
字号:
000664  0000022c          DCD      ||.bss$2|| + 556
                  |L1.1640|
000668  00000200          DCD      ||.bss$2|| + 512
                  |L1.1644|
00066c  00000220          DCD      ||.bss$2|| + 544
                  |L1.1648|
000670  44600000          DCD      0x44600000
                  |L1.1652|
000674  00000224          DCD      ||.bss$2|| + 548
                  |L1.1656|
000678  40200000          DCD      0x40200000
                  |L1.1660|
00067c  4949205b          DCB      "[ II"
000680  65542043          DCB      "C Te"
000684  49287473          DCB      "st(I"
000688  7265746e          DCB      "nter"
00068c  74707572          DCB      "rupt"
000690  73752029          DCB      ") us"
000694  20676e69          DCB      "ing "
000698  3432534b          DCB      "KS24"
00069c  30383043          DCB      "C080"
0006a0  000a5d20          DCB      " ]\n\0"
                  |L1.1700|
0006a4  00000000          DCD      IicInt
                  |L1.1704|
0006a8  13fff000          DCD      0x13fff000
                  |L1.1708|
0006ac  74697257          DCB      "Writ"
0006b0  65742065          DCB      "e te"
0006b4  64207473          DCB      "st d"
0006b8  20617461          DCB      "ata "
0006bc  6f746e69          DCB      "into"
0006c0  32534b20          DCB      " KS2"
0006c4  38304334          DCB      "4C08"
0006c8  00000a30          DCB      "0\n\0\0"
                  |L1.1740|
0006cc  00000000          DCD      ||.bss$2||
                  |L1.1744|
0006d0  64616552          DCB      "Read"
0006d4  73657420          DCB      " tes"
0006d8  61642074          DCB      "t da"
0006dc  66206174          DCB      "ta f"
0006e0  206d6f72          DCB      "rom "
0006e4  3432534b          DCB      "KS24"
0006e8  30383043          DCB      "C080"
                  |L1.1772|
0006ec  0000000a          DCB      "\n\0\0\0"
                  |L1.1776|
0006f0  20783225          DCB      "%2x "
0006f4  00000000          DCB      "\0\0\0\0"
                          ENDP

                  IicPoll PROC
;;;368    void IicPoll(void)
;;;369    {
0006f8  e92d4038          STMFD    sp!,{r3-r5,lr}
;;;370        U32 iicSt,i;
;;;371    
;;;372        iicSt = rIICSTAT;
0006fc  e51f0094          LDR      r0,|L1.1648|
000700  e5900004          LDR      r0,[r0,#4]
000704  e1a05000          MOV      r5,r0
;;;373        if(iicSt & 0x8){}                   //When bus arbitration is failed.
000708  e1a00000          NOP      
;;;374        if(iicSt & 0x4){}                   //When a slave address is matched with IICADD
00070c  e1a00000          NOP      
;;;375        if(iicSt & 0x2){}                   //When a slave address is 0000000b
000710  e1a00000          NOP      
;;;376        if(iicSt & 0x1){}                   //When ACK isn't received
000714  e1a00000          NOP      
;;;377    
;;;378        switch(_iicMode)
000718  e51f00c0          LDR      r0,|L1.1632|
00071c  e5900000          LDR      r0,[r0,#0]  ; _iicMode
000720  e3500001          CMP      r0,#1
000724  0a000038          BEQ      |L1.2060|
000728  e3500002          CMP      r0,#2
00072c  0a000004          BEQ      |L1.1860|
000730  e3500003          CMP      r0,#3
000734  0a000005          BEQ      |L1.1872|
000738  e3500004          CMP      r0,#4
00073c  1a000070          BNE      |L1.2308|
000740  ea000054          B        |L1.2200|
;;;379        {
;;;380            case POLLACK:
;;;381                _iicStatus = iicSt;
                  |L1.1860|
000744  e51f00d8          LDR      r0,|L1.1652|
000748  e5805000          STR      r5,[r0,#0]  ; _iicStatus
;;;382                break;
00074c  ea00006d          B        |L1.2312|
;;;383    
;;;384            case RDDATA:
;;;385                if((_iicDataCount--)==0)
                  |L1.1872|
000750  e51f00ec          LDR      r0,|L1.1644|
000754  e5900000          LDR      r0,[r0,#0]  ; _iicDataCount
000758  e2401001          SUB      r1,r0,#1
00075c  e51f00f8          LDR      r0,|L1.1644|
000760  e5902000          LDR      r2,[r0,#0]  ; _iicDataCount
000764  e5801000          STR      r1,[r0,#0]  ; _iicDataCount
000768  e3520000          CMP      r2,#0
00076c  1a000011          BNE      |L1.1976|
;;;386                {
;;;387                    _iicData[_iicPt++] = rIICDS;
000770  e51f0108          LDR      r0,|L1.1648|
000774  e590100c          LDR      r1,[r0,#0xc]
000778  e51f011c          LDR      r0,|L1.1636|
00077c  e5900000          LDR      r0,[r0,#0]  ; _iicPt
000780  e2802001          ADD      r2,r0,#1
000784  e51f3128          LDR      r3,|L1.1636|
000788  e5832000          STR      r2,[r3,#0]  ; _iicPt
00078c  e51f212c          LDR      r2,|L1.1640|
000790  e7c21000          STRB     r1,[r2,r0]
;;;388    
;;;389                    rIICSTAT = 0x90;                //Stop MasRx condition
000794  e3a00090          MOV      r0,#0x90
000798  e51f1130          LDR      r1,|L1.1648|
00079c  e5810004          STR      r0,[r1,#4]
;;;390                    rIICCON  = 0xaf;                //Resumes IIC operation.
0007a0  e3a000af          MOV      r0,#0xaf
0007a4  e1c11000          BIC      r1,r1,r0
0007a8  e5810000          STR      r0,[r1,#0]
;;;391                    Delay(1);                       //Wait until stop condtion is in effect.
0007ac  e3a00001          MOV      r0,#1
0007b0  ebfffffe          BL       Delay
;;;392                                                    //Too long time...
;;;393                                                    //The pending bit will not be set after issuing stop condition.
;;;394                    break;
0007b4  ea000053          B        |L1.2312|
;;;395                }
;;;396                _iicData[_iicPt++] = rIICDS;
                  |L1.1976|
0007b8  e51f0150          LDR      r0,|L1.1648|
0007bc  e590100c          LDR      r1,[r0,#0xc]
0007c0  e51f0164          LDR      r0,|L1.1636|
0007c4  e5900000          LDR      r0,[r0,#0]  ; _iicPt
0007c8  e2802001          ADD      r2,r0,#1
0007cc  e51f3170          LDR      r3,|L1.1636|
0007d0  e5832000          STR      r2,[r3,#0]  ; _iicPt
0007d4  e51f2174          LDR      r2,|L1.1640|
0007d8  e7c21000          STRB     r1,[r2,r0]
;;;397                            //The last data has to be read with no ack.
;;;398                if((_iicDataCount)==0)
0007dc  e51f0178          LDR      r0,|L1.1644|
0007e0  e5900000          LDR      r0,[r0,#0]  ; _iicDataCount
0007e4  e3500000          CMP      r0,#0
0007e8  1a000003          BNE      |L1.2044|
;;;399                    rIICCON = 0x2f;                 //Resumes IIC operation with NOACK.
0007ec  e3a0002f          MOV      r0,#0x2f
0007f0  e51f1188          LDR      r1,|L1.1648|
0007f4  e5810000          STR      r0,[r1,#0]
0007f8  ea000002          B        |L1.2056|
;;;400                else
;;;401                    rIICCON = 0xaf;                 //Resumes IIC operation with ACK
                  |L1.2044|
0007fc  e3a000af          MOV      r0,#0xaf
000800  e51f1198          LDR      r1,|L1.1648|
000804  e5810000          STR      r0,[r1,#0]
;;;402                break;
                  |L1.2056|
000808  ea00003e          B        |L1.2312|
;;;403    
;;;404            case WRDATA:
;;;405                if((_iicDataCount--)==0)
                  |L1.2060|
00080c  e51f01a8          LDR      r0,|L1.1644|
000810  e5900000          LDR      r0,[r0,#0]  ; _iicDataCount
000814  e2401001          SUB      r1,r0,#1
000818  e51f01b4          LDR      r0,|L1.1644|
00081c  e5902000          LDR      r2,[r0,#0]  ; _iicDataCount
000820  e5801000          STR      r1,[r0,#0]  ; _iicDataCount
000824  e3520000          CMP      r2,#0
000828  1a000008          BNE      |L1.2128|
;;;406                {
;;;407                    rIICSTAT = 0xd0;                //stop MasTx condition
00082c  e3a000d0          MOV      r0,#0xd0
000830  e51f11c8          LDR      r1,|L1.1648|
000834  e5810004          STR      r0,[r1,#4]
;;;408                    rIICCON  = 0xaf;                //resumes IIC operation.
000838  e3a000af          MOV      r0,#0xaf
00083c  e1c11000          BIC      r1,r1,r0
000840  e5810000          STR      r0,[r1,#0]
;;;409                    Delay(1);                       //wait until stop condtion is in effect.
000844  e3a00001          MOV      r0,#1
000848  ebfffffe          BL       Delay
;;;410                           //The pending bit will not be set after issuing stop condition.
;;;411                    break;
00084c  ea00002d          B        |L1.2312|
;;;412                }
;;;413                rIICDS = _iicData[_iicPt++];        //_iicData[0] has dummy.
                  |L1.2128|
000850  e51f01f4          LDR      r0,|L1.1636|
000854  e5900000          LDR      r0,[r0,#0]  ; _iicPt
000858  e2801001          ADD      r1,r0,#1
00085c  e51f2200          LDR      r2,|L1.1636|
000860  e5821000          STR      r1,[r2,#0]  ; _iicPt
000864  e51f1204          LDR      r1,|L1.1640|
000868  e7d10000          LDRB     r0,[r1,r0]
00086c  e51f1204          LDR      r1,|L1.1648|
000870  e581000c          STR      r0,[r1,#0xc]
;;;414                for(i=0;i<10;i++);                  //for setup time until rising edge of IICSCL
000874  e3a04000          MOV      r4,#0
                  |L1.2168|
000878  e354000a          CMP      r4,#0xa
00087c  2a000001          BCS      |L1.2184|
000880  e2844001          ADD      r4,r4,#1
000884  eafffffb          B        |L1.2168|
;;;415                rIICCON = 0xaf;                     //resumes IIC operation.
                  |L1.2184|
000888  e3a000af          MOV      r0,#0xaf
00088c  e51f1224          LDR      r1,|L1.1648|
000890  e5810000          STR      r0,[r1,#0]
;;;416                break;
000894  ea00001b          B        |L1.2312|
;;;417    
;;;418            case SETRDADDR:
;;;419    //          Uart_Printf("[S%d]",_iicDataCount);
;;;420                if((_iicDataCount--)==0)
                  |L1.2200|
000898  e51f0234          LDR      r0,|L1.1644|
00089c  e5900000          LDR      r0,[r0,#0]  ; _iicDataCount
0008a0  e2401001          SUB      r1,r0,#1
0008a4  e51f0240          LDR      r0,|L1.1644|
0008a8  e5902000          LDR      r2,[r0,#0]  ; _iicDataCount
0008ac  e5801000          STR      r1,[r0,#0]  ; _iicDataCount
0008b0  e3520000          CMP      r2,#0
0008b4  1a000000          BNE      |L1.2236|
;;;421                {
;;;422                    break;                  //IIC operation is stopped because of IICCON[4]
0008b8  ea000012          B        |L1.2312|
;;;423                }
;;;424                rIICDS = _iicData[_iicPt++];
                  |L1.2236|
0008bc  e51f0260          LDR      r0,|L1.1636|
0008c0  e5900000          LDR      r0,[r0,#0]  ; _iicPt
0008c4  e2801001          ADD      r1,r0,#1
0008c8  e51f226c          LDR      r2,|L1.1636|
0008cc  e5821000          STR      r1,[r2,#0]  ; _iicPt
0008d0  e51f1270          LDR      r1,|L1.1640|
0008d4  e7d10000          LDRB     r0,[r1,r0]
0008d8  e51f1270          LDR      r1,|L1.1648|
0008dc  e581000c          STR      r0,[r1,#0xc]
;;;425                for(i=0;i<10;i++);          //for setup time until rising edge of IICSCL
0008e0  e3a04000          MOV      r4,#0
                  |L1.2276|
0008e4  e354000a          CMP      r4,#0xa
0008e8  2a000001          BCS      |L1.2292|
0008ec  e2844001          ADD      r4,r4,#1
0008f0  eafffffb          B        |L1.2276|
;;;426                rIICCON = 0xaf;             //resumes IIC operation.
                  |L1.2292|
0008f4  e3a000af          MOV      r0,#0xaf
0008f8  e51f1290          LDR      r1,|L1.1648|
0008fc  e5810000          STR      r0,[r1,#0]
;;;427                break;
000900  ea000000          B        |L1.2312|
;;;428    
;;;429            default:
;;;430                break;
                  |L1.2308|
000904  e1a00000          NOP      
;;;431        }
;;;432    }
                  |L1.2312|
000908  e8bd8038          LDMFD    sp!,{r3-r5,pc}
                          ENDP

                  Run_IicPoll PROC
;;;361    void Run_IicPoll(void)
;;;362    {
00090c  e92d4008          STMFD    sp!,{r3,lr}
;;;363        if(rIICCON & 0x10)                  //Tx/Rx Interrupt Enable
000910  e51f02a8          LDR      r0,|L1.1648|
000914  e5900000          LDR      r0,[r0,#0]
000918  e3100010          TST      r0,#0x10
00091c  0a000000          BEQ      |L1.2340|
;;;364           IicPoll();
000920  ebfffffe          BL       IicPoll
;;;365    }
                  |L1.2340|
000924  e8bd8008          LDMFD    sp!,{r3,pc}
                          ENDP

                  _Rd24C080 PROC
;;;334    void _Rd24C080(U32 slvAddr,U32 addr,U8 *data)
;;;335    {
000928  e92d4070          STMFD    sp!,{r4-r6,lr}
00092c  e1a04000          MOV      r4,r0
000930  e1a05001          MOV      r5,r1
000934  e1a06002          MOV      r6,r2
;;;336        _iicMode      = SETRDADDR;
000938  e3a00004          MOV      r0,#4
00093c  e51f12e4          LDR      r1,|L1.1632|
000940  e5810000          STR      r0,[r1,#0]  ; _iicMode
;;;337        _iicPt        = 0;
000944  e3a00000          MOV      r0,#0
000948  e51f12ec          LDR      r1,|L1.1636|
00094c  e5810000          STR      r0,[r1,#0]  ; _iicPt
;;;338        _iicData[0]   = (U8)addr;
000950  e51f02f0          LDR      r0,|L1.1640|
000954  e5c05000          STRB     r5,[r0,#0]  ; _iicData
;;;339        _iicDataCount = 1;
000958  e3a00001          MOV      r0,#1
00095c  e51f12f8          LDR      r1,|L1.1644|
000960  e5810000          STR      r0,[r1,#0]  ; _iicDataCount
;;;340    
;;;341        rIICDS   = slvAddr;
000964  e51f02fc          LDR      r0,|L1.1648|
000968  e580400c          STR      r4,[r0,#0xc]
;;;342        rIICSTAT = 0xf0;                    //MasTx,Start
00096c  e3a000f0          MOV      r0,#0xf0
000970  e51f1308          LDR      r1,|L1.1648|
000974  e5810004          STR      r0,[r1,#4]
;;;343          //Clearing the pending bit isn't needed because the pending bit has been cleared.
;;;344        while(_iicDataCount!=-1)
000978  e1a00000          NOP      
                  |L1.2428|
00097c  e51f0318          LDR      r0,|L1.1644|
000980  e5900000          LDR      r0,[r0,#0]  ; _iicDataCount
000984  e3700001          CMN      r0,#1
000988  0a000001          BEQ      |L1.2452|
;;;345            Run_IicPoll();
00098c  ebfffffe          BL       Run_IicPoll
000990  eafffff9          B        |L1.2428|
;;;346    
;;;347        _iicMode      = RDDATA;
                  |L1.2452|
000994  e3a00003          MOV      r0,#3
000998  e51f1340          LDR      r1,|L1.1632|
00099c  e5810000          STR      r0,[r1,#0]  ; _iicMode
;;;348        _iicPt        = 0;
0009a0  e3a00000          MOV      r0,#0
0009a4  e51f1348          LDR      r1,|L1.1636|
0009a8  e5810000          STR      r0,[r1,#0]  ; _iicPt
;;;349        _iicDataCount = 1;
0009ac  e3a00001          MOV      r0,#1
0009b0  e51f134c          LDR      r1,|L1.1644|
0009b4  e5810000          STR      r0,[r1,#0]  ; _iicDataCount
;;;350    
;;;351        rIICDS   = slvAddr;

⌨️ 快捷键说明

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