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

📄 iic.txt

📁 支持三星原产的S3C24A0开发板
💻 TXT
📖 第 1 页 / 共 4 页
字号:
; generated by ARM C Compiler, ADS1.2 [Build 805]

; commandline [-errors .\err\iic.err -O0 -asm -g+ -cpu 5TEJ -fs -Wd -Ec -I.\include "-IC:\Program Files\ARM\ADSv1_2\INCLUDE"]
                          CODE32

                          AREA ||.text||, CODE, READONLY

                  Ch13_Iic_Test PROC
;;;54     void Ch13_Iic_Test(void)
;;;55     {
                  |L1.0|
000000  e92d4010          STMFD    sp!,{r4,lr}
;;;56         int i;
;;;57     	    
;;;58         Uart_Printf("\nPower mode test.\n");
000004  e28f00bc          ADR      r0,|L1.200|
000008  ebfffffe          BL       _printf
;;;59     
;;;60         while(1)
00000c  e1a00000          NOP      
                  |L1.16|
000010  e1a00000          NOP      
;;;61         {
;;;62     	i=0;
000014  e3a04000          MOV      r4,#0
;;;63     	Uart_Printf("\n\n");
000018  e28f00bc          ADR      r0,|L1.220|
00001c  ebfffffe          BL       _printf
;;;64     	while(1)
000020  e1a00000          NOP      
                  |L1.36|
000024  e1a00000          NOP      
;;;65     	{   //display menu
;;;66     	    Uart_Printf("%2d:%s",i,func_iic_test[i][1]);
000028  e59f00b0          LDR      r0,|L1.224|
00002c  e0800184          ADD      r0,r0,r4,LSL #3
000030  e1a01004          MOV      r1,r4
000034  e5902004          LDR      r2,[r0,#4]
000038  e28f00a4          ADR      r0,|L1.228|
00003c  ebfffffe          BL       _printf
;;;67     	    i++;
000040  e2844001          ADD      r4,r4,#1
;;;68     	    if((int)(func_iic_test[i][0])==0)
000044  e59f0094          LDR      r0,|L1.224|
000048  e7900184          LDR      r0,[r0,r4,LSL #3]
00004c  e3500000          CMP      r0,#0
000050  1a000002          BNE      |L1.96|
;;;69     	    {
;;;70     		Uart_Printf("\n");
000054  e28f0090          ADR      r0,|L1.236|
000058  ebfffffe          BL       _printf
;;;71     		break;
00005c  ea000007          B        |L1.128|
;;;72     	    }
;;;73     	    if((i%3)==0)
                  |L1.96|
000060  e1a01004          MOV      r1,r4
000064  e3a00003          MOV      r0,#3
000068  ebfffffe          BL       __rt_sdiv
00006c  e3510000          CMP      r1,#0
000070  1a000001          BNE      |L1.124|
;;;74     	    Uart_Printf("\n");
000074  e28f0070          ADR      r0,|L1.236|
000078  ebfffffe          BL       _printf
;;;75     	}
                  |L1.124|
00007c  eaffffe8          B        |L1.36|
;;;76     
;;;77     	Uart_Printf("\nSelect (\"-1\" to exit) : ");
                  |L1.128|
000080  e28f0068          ADR      r0,|L1.240|
000084  ebfffffe          BL       _printf
;;;78     	i = Uart_GetIntNum();
000088  ebfffffe          BL       Uart_GetIntNum
00008c  e1a04000          MOV      r4,r0
;;;79     	if(i==-1) 
000090  e3740001          CMN      r4,#1
000094  1a000000          BNE      |L1.156|
;;;80     	    break;		// return.
000098  ea000007          B        |L1.188|
;;;81     	if(i>=0 && (i<((sizeof(func_iic_test)-1)/8)) )	// select and execute...
                  |L1.156|
00009c  e3540000          CMP      r4,#0
0000a0  ba000004          BLT      |L1.184|
0000a4  e3540002          CMP      r4,#2
0000a8  2a000002          BCS      |L1.184|
;;;82     	    ( (void (*)(void)) (func_iic_test[i][0]) )();
0000ac  e59f102c          LDR      r1,|L1.224|
0000b0  e7910184          LDR      r0,[r1,r4,LSL #3]
0000b4  e12fff30          BLX      r0
;;;83         }
                  |L1.184|
0000b8  eaffffd4          B        |L1.16|
;;;84         Uart_Printf("\nPower_Test program end.\n");
                  |L1.188|
0000bc  e28f0048          ADR      r0,|L1.268|
0000c0  ebfffffe          BL       _printf
;;;85     }
0000c4  e8bd8010          LDMFD    sp!,{r4,pc}
                  |L1.200|
0000c8  776f500a          DCB      "\nPow"
0000cc  6d207265          DCB      "er m"
0000d0  2065646f          DCB      "ode "
0000d4  74736574          DCB      "test"
0000d8  00000a2e          DCB      ".\n\0\0"
                  |L1.220|
0000dc  00000a0a          DCB      "\n\n\0\0"
                  |L1.224|
0000e0  00000000          DCD      func_iic_test
                  |L1.228|
0000e4  3a643225          DCB      "%2d:"
0000e8  00007325          DCB      "%s\0\0"
                  |L1.236|
0000ec  0000000a          DCB      "\n\0\0\0"
                  |L1.240|
0000f0  6c65530a          DCB      "\nSel"
0000f4  20746365          DCB      "ect "
0000f8  312d2228          DCB      "(\"-1"
0000fc  6f742022          DCB      "\" to"
000100  69786520          DCB      " exi"
000104  3a202974          DCB      "t) :"
000108  00000020          DCB      " \0\0\0"
                  |L1.268|
00010c  776f500a          DCB      "\nPow"
000110  545f7265          DCB      "er_T"
000114  20747365          DCB      "est "
000118  676f7270          DCB      "prog"
00011c  206d6172          DCB      "ram "
000120  2e646e65          DCB      "end."
000124  0000000a          DCB      "\n\0\0\0"
                          ENDP

                  Rd24C080 PROC
;;;167    void Rd24C080(U32 slvAddr,U32 addr,U8 *data)
;;;168    {
000128  e3a03004          MOV      r3,#4
;;;169        _iicMode      = SETRDADDR;
00012c  e59fc52c          LDR      r12,|L1.1632|
000130  e58c3000          STR      r3,[r12,#0]  ; _iicMode
;;;170        _iicPt        = 0;
000134  e3a03000          MOV      r3,#0
000138  e59fc524          LDR      r12,|L1.1636|
00013c  e58c3000          STR      r3,[r12,#0]  ; _iicPt
;;;171        _iicData[0]   = (U8)addr;
000140  e59f3520          LDR      r3,|L1.1640|
000144  e5c31000          STRB     r1,[r3,#0]  ; _iicData
;;;172        _iicDataCount = 1;
000148  e3a03001          MOV      r3,#1
00014c  e59fc518          LDR      r12,|L1.1644|
000150  e58c3000          STR      r3,[r12,#0]  ; _iicDataCount
;;;173    
;;;174        rIICDS   = slvAddr;
000154  e59f3514          LDR      r3,|L1.1648|
000158  e583000c          STR      r0,[r3,#0xc]
;;;175        rIICSTAT = 0xf0;                    //MasTx,Start
00015c  e3a030f0          MOV      r3,#0xf0
000160  e59fc508          LDR      r12,|L1.1648|
000164  e58c3004          STR      r3,[r12,#4]
;;;176          //Clearing the pending bit isn't needed because the pending bit has been cleared.
;;;177        while(_iicDataCount!=-1);
000168  e1a00000          NOP      
                  |L1.364|
00016c  e59f34f8          LDR      r3,|L1.1644|
000170  e5933000          LDR      r3,[r3,#0]  ; _iicDataCount
000174  e3730001          CMN      r3,#1
000178  1afffffb          BNE      |L1.364|
;;;178    
;;;179        _iicMode      = RDDATA;
00017c  e3a03003          MOV      r3,#3
000180  e59fc4d8          LDR      r12,|L1.1632|
000184  e58c3000          STR      r3,[r12,#0]  ; _iicMode
;;;180        _iicPt        = 0;
000188  e3a03000          MOV      r3,#0
00018c  e59fc4d0          LDR      r12,|L1.1636|
000190  e58c3000          STR      r3,[r12,#0]  ; _iicPt
;;;181        _iicDataCount = 1;
000194  e3a03001          MOV      r3,#1
000198  e59fc4cc          LDR      r12,|L1.1644|
00019c  e58c3000          STR      r3,[r12,#0]  ; _iicDataCount
;;;182    
;;;183        rIICDS        = slvAddr;
0001a0  e59f34c8          LDR      r3,|L1.1648|
0001a4  e583000c          STR      r0,[r3,#0xc]
;;;184        rIICSTAT      = 0xb0;               //MasRx,Start
0001a8  e3a030b0          MOV      r3,#0xb0
0001ac  e59fc4bc          LDR      r12,|L1.1648|
0001b0  e58c3004          STR      r3,[r12,#4]
;;;185        rIICCON       = 0xaf;               //Resumes IIC operation.
0001b4  e3a030af          MOV      r3,#0xaf
0001b8  e1ccc003          BIC      r12,r12,r3
0001bc  e58c3000          STR      r3,[r12,#0]
;;;186        while(_iicDataCount!=-1);
0001c0  e1a00000          NOP      
                  |L1.452|
0001c4  e59f34a0          LDR      r3,|L1.1644|
0001c8  e5933000          LDR      r3,[r3,#0]  ; _iicDataCount
0001cc  e3730001          CMN      r3,#1
0001d0  1afffffb          BNE      |L1.452|
;;;187    
;;;188        *data = _iicData[1];
0001d4  e59f348c          LDR      r3,|L1.1640|
0001d8  e5d33001          LDRB     r3,[r3,#1]  ; _iicData
0001dc  e5c23000          STRB     r3,[r2,#0]
;;;189    }
0001e0  e12fff1e          BX       lr
                          ENDP

                  Wr24C080 PROC
;;;130    void Wr24C080(U32 slvAddr,U32 addr,U8 data)
;;;131    {
0001e4  e92d4070          STMFD    sp!,{r4-r6,lr}
0001e8  e1a04000          MOV      r4,r0
0001ec  e1a05001          MOV      r5,r1
0001f0  e1a06002          MOV      r6,r2
;;;132        _iicMode      = WRDATA;
0001f4  e3a00001          MOV      r0,#1
0001f8  e59f1460          LDR      r1,|L1.1632|
0001fc  e5810000          STR      r0,[r1,#0]  ; _iicMode
;;;133        _iicPt        = 0;
000200  e3a00000          MOV      r0,#0
000204  e59f1458          LDR      r1,|L1.1636|
000208  e5810000          STR      r0,[r1,#0]  ; _iicPt
;;;134        _iicData[0]   = (U8)addr;
00020c  e59f0454          LDR      r0,|L1.1640|
000210  e5c05000          STRB     r5,[r0,#0]  ; _iicData
;;;135        _iicData[1]   = data;
000214  e59f044c          LDR      r0,|L1.1640|
000218  e5c06001          STRB     r6,[r0,#1]  ; _iicData
;;;136        _iicDataCount = 2;
00021c  e3a00002          MOV      r0,#2
000220  e59f1444          LDR      r1,|L1.1644|
000224  e5810000          STR      r0,[r1,#0]  ; _iicDataCount
;;;137    
;;;138        rIICDS   = slvAddr;         //0xa0
000228  e59f0440          LDR      r0,|L1.1648|
00022c  e580400c          STR      r4,[r0,#0xc]
;;;139        rIICSTAT = 0xf0;            //MasTx,Start
000230  e3a000f0          MOV      r0,#0xf0
000234  e59f1434          LDR      r1,|L1.1648|
000238  e5810004          STR      r0,[r1,#4]
;;;140        //Clearing the pending bit isn't needed because the pending bit has been cleared.
;;;141        while(_iicDataCount!=-1);	// Tx 'addr+addr+data'
00023c  e1a00000          NOP      
                  |L1.576|
000240  e59f0424          LDR      r0,|L1.1644|
000244  e5900000          LDR      r0,[r0,#0]  ; _iicDataCount
000248  e3700001          CMN      r0,#1
00024c  1afffffb          BNE      |L1.576|
;;;142    	//Uart_Printf("%d ",_iicDataCount);
;;;143    
;;;144        //Uart_Printf("@%d ",_iicDataCount);
;;;145        _iicMode = POLLACK;
000250  e3a00002          MOV      r0,#2
000254  e59f1404          LDR      r1,|L1.1632|
000258  e5810000          STR      r0,[r1,#0]  ; _iicMode
;;;146    
;;;147        while(1)
00025c  e1a00000          NOP      
                  |L1.608|
000260  e1a00000          NOP      
;;;148        {
;;;149            rIICDS     = slvAddr;
000264  e59f0404          LDR      r0,|L1.1648|
000268  e580400c          STR      r4,[r0,#0xc]
;;;150            _iicStatus = 0x100;
00026c  e3a00f40          MOV      r0,#0x100
000270  e59f13fc          LDR      r1,|L1.1652|
000274  e5810000          STR      r0,[r1,#0]  ; _iicStatus
;;;151            rIICSTAT   = 0xf0;              //MasTx,Start, NACK flag clear
000278  e3a000f0          MOV      r0,#0xf0
00027c  e59f13ec          LDR      r1,|L1.1648|
000280  e5810004          STR      r0,[r1,#4]
;;;152            rIICCON    = 0xaf;              //Resumes IIC operation. Int pending clear
000284  e3a000af          MOV      r0,#0xaf
000288  e1c11000          BIC      r1,r1,r0
00028c  e5810000          STR      r0,[r1,#0]
;;;153    
;;;154            while(_iicStatus==0x100);
000290  e1a00000          NOP      
                  |L1.660|
000294  e59f03d8          LDR      r0,|L1.1652|
000298  e5900000          LDR      r0,[r0,#0]  ; _iicStatus
00029c  e3500f40          CMP      r0,#0x100
0002a0  0afffffb          BEQ      |L1.660|
;;;155    
;;;156            if(!(_iicStatus&0x1))
0002a4  e59f03c8          LDR      r0,|L1.1652|
0002a8  e5900000          LDR      r0,[r0,#0]  ; _iicStatus
0002ac  e3100001          TST      r0,#1
0002b0  1a000000          BNE      |L1.696|
;;;157                break;                      //When ACK is received
0002b4  ea000000          B        |L1.700|
;;;158        }					//If there is no ACK, repeat Tx(addr).
                  |L1.696|
0002b8  eaffffe8          B        |L1.608|
;;;159    
;;;160        rIICSTAT = 0xd0;                    //Stop MasTx condition
                  |L1.700|
0002bc  e3a000d0          MOV      r0,#0xd0
0002c0  e59f13a8          LDR      r1,|L1.1648|
0002c4  e5810004          STR      r0,[r1,#4]
;;;161        rIICCON  = 0xaf;                    //Resumes IIC operation.
0002c8  e3a000af          MOV      r0,#0xaf
0002cc  e1c11000          BIC      r1,r1,r0
0002d0  e5810000          STR      r0,[r1,#0]
;;;162        Delay(1);                           //Wait until stop condtion is in effect.
0002d4  e3a00001          MOV      r0,#1
0002d8  ebfffffe          BL       Delay
;;;163        //Write is completed.
;;;164    }
0002dc  e8bd8070          LDMFD    sp!,{r4-r6,pc}
                          ENDP

                  IicInt PROC
;;;193    void __irq IicInt(void)
;;;194    {
0002e0  e92d503f          STMFD    sp!,{r0-r5,r12,lr}
;;;195        U32 iicSt,i;
;;;196    
;;;197        rSRCPND = BIT_IIC;          //Clear pending bit
0002e4  e3a00680          MOV      r0,#0x8000000
0002e8  e59f1388          LDR      r1,|L1.1656|
0002ec  e5810000          STR      r0,[r1,#0]
;;;198        rINTPND = BIT_IIC;
0002f0  e3a00680          MOV      r0,#0x8000000
0002f4  e1c11000          BIC      r1,r1,r0
0002f8  e5810010          STR      r0,[r1,#0x10]
;;;199        iicSt   = rIICSTAT;
0002fc  e2810644          ADD      r0,r1,#0x4400000
000300  e5900004          LDR      r0,[r0,#4]
000304  e1a05000          MOV      r5,r0
;;;200    
;;;201        if(iicSt & 0x8){};           //When bus arbitration is failed.
000308  e1a00000          NOP      
;;;202        if(iicSt & 0x4){};           //When a slave address is matched with IICADD
00030c  e1a00000          NOP      
;;;203        if(iicSt & 0x2){};           //When a slave address is 0000000b
000310  e1a00000          NOP      
;;;204        if(iicSt & 0x1){};           //When ACK isn't received
000314  e1a00000          NOP      
;;;205    

⌨️ 快捷键说明

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