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

📄 iic.txt

📁 支持三星原产的S3C24A0开发板
💻 TXT
📖 第 1 页 / 共 4 页
字号:
0009b8  e51f0350          LDR      r0,|L1.1648|
0009bc  e580400c          STR      r4,[r0,#0xc]
;;;352        rIICSTAT = 0xb0;                    //Master Rx,Start
0009c0  e3a000b0          MOV      r0,#0xb0
0009c4  e51f135c          LDR      r1,|L1.1648|
0009c8  e5810004          STR      r0,[r1,#4]
;;;353        rIICCON  = 0xaf;                    //Resumes IIC operation.
0009cc  e3a000af          MOV      r0,#0xaf
0009d0  e1c11000          BIC      r1,r1,r0
0009d4  e5810000          STR      r0,[r1,#0]
;;;354        while(_iicDataCount!=-1)
0009d8  e1a00000          NOP      
                  |L1.2524|
0009dc  e51f0378          LDR      r0,|L1.1644|
0009e0  e5900000          LDR      r0,[r0,#0]  ; _iicDataCount
0009e4  e3700001          CMN      r0,#1
0009e8  0a000001          BEQ      |L1.2548|
;;;355            Run_IicPoll();
0009ec  ebfffffe          BL       Run_IicPoll
0009f0  eafffff9          B        |L1.2524|
;;;356    
;;;357        *data = _iicData[1];
                  |L1.2548|
0009f4  e51f0394          LDR      r0,|L1.1640|
0009f8  e5d00001          LDRB     r0,[r0,#1]  ; _iicData
0009fc  e5c60000          STRB     r0,[r6,#0]
;;;358    }
000a00  e8bd8070          LDMFD    sp!,{r4-r6,pc}
                          ENDP

                  _Wr24C080 PROC
;;;296    void _Wr24C080(U32 slvAddr,U32 addr,U8 data)
;;;297    {
000a04  e92d4070          STMFD    sp!,{r4-r6,lr}
000a08  e1a04000          MOV      r4,r0
000a0c  e1a05001          MOV      r5,r1
000a10  e1a06002          MOV      r6,r2
;;;298        _iicMode      = WRDATA;
000a14  e3a00001          MOV      r0,#1
000a18  e51f13c0          LDR      r1,|L1.1632|
000a1c  e5810000          STR      r0,[r1,#0]  ; _iicMode
;;;299        _iicPt        = 0;
000a20  e3a00000          MOV      r0,#0
000a24  e51f13c8          LDR      r1,|L1.1636|
000a28  e5810000          STR      r0,[r1,#0]  ; _iicPt
;;;300        _iicData[0]   = (U8)addr;
000a2c  e51f03cc          LDR      r0,|L1.1640|
000a30  e5c05000          STRB     r5,[r0,#0]  ; _iicData
;;;301        _iicData[1]   = data;
000a34  e51f03d4          LDR      r0,|L1.1640|
000a38  e5c06001          STRB     r6,[r0,#1]  ; _iicData
;;;302        _iicDataCount = 2;
000a3c  e3a00002          MOV      r0,#2
000a40  e51f13dc          LDR      r1,|L1.1644|
000a44  e5810000          STR      r0,[r1,#0]  ; _iicDataCount
;;;303    
;;;304        rIICDS        = slvAddr;            //0xa0
000a48  e51f03e0          LDR      r0,|L1.1648|
000a4c  e580400c          STR      r4,[r0,#0xc]
;;;305          //Master Tx mode, Start(Write), IIC-bus data output enable
;;;306          //Bus arbitration sucessful, Address as slave status flag Cleared,
;;;307          //Address zero status flag cleared, Last received bit is 0
;;;308        rIICSTAT      = 0xf0;
000a50  e3a000f0          MOV      r0,#0xf0
000a54  e51f13ec          LDR      r1,|L1.1648|
000a58  e5810004          STR      r0,[r1,#4]
;;;309          //Clearing the pending bit isn't needed because the pending bit has been cleared.
;;;310        while(_iicDataCount!=-1)
000a5c  e1a00000          NOP      
                  |L1.2656|
000a60  e51f03fc          LDR      r0,|L1.1644|
000a64  e5900000          LDR      r0,[r0,#0]  ; _iicDataCount
000a68  e3700001          CMN      r0,#1
000a6c  0a000001          BEQ      |L1.2680|
;;;311           Run_IicPoll();
000a70  ebfffffe          BL       Run_IicPoll
000a74  eafffff9          B        |L1.2656|
;;;312    
;;;313        _iicMode = POLLACK;
                  |L1.2680|
000a78  e3a00002          MOV      r0,#2
000a7c  e51f1424          LDR      r1,|L1.1632|
000a80  e5810000          STR      r0,[r1,#0]  ; _iicMode
;;;314    
;;;315        while(1)
000a84  e1a00000          NOP      
                  |L1.2696|
000a88  e1a00000          NOP      
;;;316        {
;;;317            rIICDS     = slvAddr;
000a8c  e51f0424          LDR      r0,|L1.1648|
000a90  e580400c          STR      r4,[r0,#0xc]
;;;318            _iicStatus = 0x100;             //To check if _iicStatus is changed
000a94  e3a00f40          MOV      r0,#0x100
000a98  e51f142c          LDR      r1,|L1.1652|
000a9c  e5810000          STR      r0,[r1,#0]  ; _iicStatus
;;;319            rIICSTAT   = 0xf0;              //Master Tx, Start, Output Enable, Sucessful, Cleared, Cleared, 0
000aa0  e3a000f0          MOV      r0,#0xf0
000aa4  e51f143c          LDR      r1,|L1.1648|
000aa8  e5810004          STR      r0,[r1,#4]
;;;320            rIICCON    = 0xaf;              //Resumes IIC operation.
000aac  e3a000af          MOV      r0,#0xaf
000ab0  e1c11000          BIC      r1,r1,r0
000ab4  e5810000          STR      r0,[r1,#0]
;;;321            while(_iicStatus==0x100)
000ab8  e1a00000          NOP      
                  |L1.2748|
000abc  e51f0450          LDR      r0,|L1.1652|
000ac0  e5900000          LDR      r0,[r0,#0]  ; _iicStatus
000ac4  e3500f40          CMP      r0,#0x100
000ac8  1a000001          BNE      |L1.2772|
;;;322                Run_IicPoll();
000acc  ebfffffe          BL       Run_IicPoll
000ad0  eafffff9          B        |L1.2748|
;;;323    
;;;324            if(!(_iicStatus & 0x1))
                  |L1.2772|
000ad4  e51f0468          LDR      r0,|L1.1652|
000ad8  e5900000          LDR      r0,[r0,#0]  ; _iicStatus
000adc  e3100001          TST      r0,#1
000ae0  1a000000          BNE      |L1.2792|
;;;325                break;                      //When ACK is received
000ae4  ea000000          B        |L1.2796|
;;;326        }
                  |L1.2792|
000ae8  eaffffe6          B        |L1.2696|
;;;327        rIICSTAT = 0xd0;                    //Master Tx condition, Stop(Write), Output Enable
                  |L1.2796|
000aec  e3a000d0          MOV      r0,#0xd0
000af0  e51f1488          LDR      r1,|L1.1648|
000af4  e5810004          STR      r0,[r1,#4]
;;;328        rIICCON  = 0xaf;                    //Resumes IIC operation.
000af8  e3a000af          MOV      r0,#0xaf
000afc  e1c11000          BIC      r1,r1,r0
000b00  e5810000          STR      r0,[r1,#0]
;;;329        Delay(1);                           //Wait until stop condtion is in effect.
000b04  e3a00001          MOV      r0,#1
000b08  ebfffffe          BL       Delay
;;;330          //Write is completed.
;;;331    }
000b0c  e8bd8070          LDMFD    sp!,{r4-r6,pc}
                          ENDP

                  Test_Iic2 PROC
;;;263    void Test_Iic2(void)
;;;264    {
000b10  e92d4038          STMFD    sp!,{r3-r5,lr}
;;;265        unsigned int i,j;
;;;266        static U8 data[256];
;;;267    
;;;268        Uart_Printf("[ IIC Test(Polling) using KS24C080 ]\n");
000b14  e28f0f45          ADR      r0,|L1.3120|
000b18  ebfffffe          BL       _printf
;;;269    
;;;270        //Enable ACK, Prescaler IICCLK=PCLK/16, Enable interrupt, Transmit clock value Tx clock=IICCLK/16
;;;271        rIICCON  = (1<<7) | (0<<6) | (1<<5) | (0xf);
000b1c  e3a000af          MOV      r0,#0xaf
000b20  e51f14b8          LDR      r1,|L1.1648|
000b24  e5810000          STR      r0,[r1,#0]
;;;272    
;;;273        rIICADD  = 0x10;                    //2410 slave address = [7:1]
000b28  e3a00010          MOV      r0,#0x10
000b2c  e1c11000          BIC      r1,r1,r0
000b30  e5810008          STR      r0,[r1,#8]
;;;274        rIICSTAT = 0x10;                    //IIC bus data output enable(Rx/Tx)
000b34  e3a00010          MOV      r0,#0x10
000b38  e1c11000          BIC      r1,r1,r0
000b3c  e5810004          STR      r0,[r1,#4]
;;;275    
;;;276        Uart_Printf("Write test data into KS24C080\n");
000b40  e59f0110          LDR      r0,|L1.3160|
000b44  ebfffffe          BL       _printf
;;;277    
;;;278        for(i=0;i<256;i++)
000b48  e3a04000          MOV      r4,#0
                  |L1.2892|
000b4c  e3540f40          CMP      r4,#0x100
000b50  2a000008          BCS      |L1.2936|
000b54  ea000001          B        |L1.2912|
                  |L1.2904|
000b58  e2844001          ADD      r4,r4,#1
000b5c  eafffffa          B        |L1.2892|
;;;279            _Wr24C080(0xa0,(U8)i,255-i);
                  |L1.2912|
000b60  e26400ff          RSB      r0,r4,#0xff
000b64  e20020ff          AND      r2,r0,#0xff
000b68  e20410ff          AND      r1,r4,#0xff
000b6c  e3a000a0          MOV      r0,#0xa0
000b70  ebfffffe          BL       _Wr24C080
000b74  eafffff7          B        |L1.2904|
;;;280        for(i=0;i<256;i++)
                  |L1.2936|
000b78  e3a04000          MOV      r4,#0
                  |L1.2940|
000b7c  e3540f40          CMP      r4,#0x100
000b80  2a000006          BCS      |L1.2976|
000b84  ea000001          B        |L1.2960|
                  |L1.2952|
000b88  e2844001          ADD      r4,r4,#1
000b8c  eafffffa          B        |L1.2940|
;;;281            data[i] = 0;
                  |L1.2960|
000b90  e3a00000          MOV      r0,#0
000b94  e59f10c0          LDR      r1,|L1.3164|
000b98  e7c10004          STRB     r0,[r1,r4]
000b9c  eafffff9          B        |L1.2952|
;;;282    
;;;283        Uart_Printf("Read test data from KS24C080\n");
                  |L1.2976|
000ba0  e59f00b8          LDR      r0,|L1.3168|
000ba4  ebfffffe          BL       _printf
;;;284        for(i=0;i<256;i++)
000ba8  e3a04000          MOV      r4,#0
                  |L1.2988|
000bac  e3540f40          CMP      r4,#0x100
000bb0  2a000008          BCS      |L1.3032|
000bb4  ea000001          B        |L1.3008|
                  |L1.3000|
000bb8  e2844001          ADD      r4,r4,#1
000bbc  eafffffa          B        |L1.2988|
;;;285            _Rd24C080(0xa0,(U8)i,&(data[i]));
                  |L1.3008|
000bc0  e59f0094          LDR      r0,|L1.3164|
000bc4  e0802004          ADD      r2,r0,r4
000bc8  e20410ff          AND      r1,r4,#0xff
000bcc  e3a000a0          MOV      r0,#0xa0
000bd0  ebfffffe          BL       _Rd24C080
000bd4  eafffff7          B        |L1.3000|
;;;286    
;;;287        for(i=0;i<16;i++)
                  |L1.3032|
000bd8  e3a04000          MOV      r4,#0
                  |L1.3036|
000bdc  e3540010          CMP      r4,#0x10
000be0  2a000011          BCS      |L1.3116|
000be4  ea000001          B        |L1.3056|
                  |L1.3048|
000be8  e2844001          ADD      r4,r4,#1
000bec  eafffffa          B        |L1.3036|
;;;288        {
;;;289            for(j=0;j<16;j++)
                  |L1.3056|
000bf0  e3a05000          MOV      r5,#0
                  |L1.3060|
000bf4  e3550010          CMP      r5,#0x10
000bf8  2a000008          BCS      |L1.3104|
000bfc  ea000001          B        |L1.3080|
                  |L1.3072|
000c00  e2855001          ADD      r5,r5,#1
000c04  eafffffa          B        |L1.3060|
;;;290                Uart_Printf("%2x ",data[i*16+j]);
                  |L1.3080|
000c08  e0850204          ADD      r0,r5,r4,LSL #4
000c0c  e59f2048          LDR      r2,|L1.3164|
000c10  e7d21000          LDRB     r1,[r2,r0]
000c14  e28f0048          ADR      r0,|L1.3172|
000c18  ebfffffe          BL       _printf
000c1c  eafffff7          B        |L1.3072|
;;;291            Uart_Printf("\n");
                  |L1.3104|
000c20  e28f002c          ADR      r0,|L1.3156|
000c24  ebfffffe          BL       _printf
;;;292        }
000c28  eaffffee          B        |L1.3048|
;;;293    }
                  |L1.3116|
000c2c  e8bd8038          LDMFD    sp!,{r3-r5,pc}
                  |L1.3120|
000c30  4949205b          DCB      "[ II"
000c34  65542043          DCB      "C Te"
000c38  50287473          DCB      "st(P"
000c3c  696c6c6f          DCB      "olli"
000c40  2029676e          DCB      "ng) "
000c44  6e697375          DCB      "usin"
000c48  534b2067          DCB      "g KS"
000c4c  30433432          DCB      "24C0"
000c50  5d203038          DCB      "80 ]"
                  |L1.3156|
000c54  0000000a          DCB      "\n\0\0\0"
                  |L1.3160|
000c58  00000000          DCD      |L1.1708|
                  |L1.3164|
000c5c  00000100          DCD      ||.bss$2|| + 256
                  |L1.3168|
000c60  00000000          DCD      |L1.1744|
                  |L1.3172|
000c64  20783225          DCB      "%2x "
000c68  00000000          DCB      "\0\0\0\0"
                          ENDP



                          AREA ||.data||, DATA, ALIGN=2

                  ||.data$0||
                  func_iic_test
                          DCD      Test_Iic
                          DCD      ||.constdata$1||
                          DCD      Test_Iic2
                          DCD      ||.constdata$1||+0x13
                          DCD      0x00000000
                          DCD      0x00000000


                          AREA ||.constdata||, DATA, READONLY, ALIGN=0

                  ||.constdata$1||
                          DCB      0x49,0x49,0x43,0x20
                          DCB      0x62,0x79,0x20,0x69
                          DCB      0x6e,0x74,0x65,0x72
                          DCB      0x72,0x75,0x70,0x74
                          DCB      0x20,0x20,0x00
                          DCB      0x49,0x49,0x43,0x20
                          DCB      0x62,0x79,0x20,0x70
                          DCB      0x6f,0x6c,0x6c,0x69
                          DCB      0x6e,0x67,0x20,0x20
                          DCB      0x20,0x20,0x00


                          AREA ||.bss||, NOINIT, ALIGN=2

                  ||data@Test_Iic_0||
                  ||.bss$2||
                          % 256
                  ||data@Test_Iic2_0||
                          % 256
                  _iicData
                          % 32
                  _iicDataCount
                          % 4
                  _iicStatus
                          % 4
                  _iicMode
                          % 4
                  _iicPt
                          % 4


        END

⌨️ 快捷键说明

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