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

📄 iic.txt

📁 SMDK2442所有设备的驱动测试程序。运行monitor程序
💻 TXT
📖 第 1 页 / 共 5 页
字号:
; generated by ARM C Compiler, ADS1.2 [Build 805]

; commandline [-errors .\err\iic.err -O0 -asm -g+ -cpu ARM920T -fs "-IC:\Program Files\ARM\ADSv1_2\INCLUDE"]
                          CODE32

                          AREA ||.text||, CODE, READONLY

                  Iic_Test PROC
;;;40     void Iic_Test(void)
;;;41     {
                  |L1.0|
000000  e92d4010          STMFD    sp!,{r4,lr}
;;;42     	int i;
;;;43     	
;;;44     	Uart_Printf("\n======  IIC Test program start ======\n");
000004  e28f00b4          ADR      r0,|L1.192|
000008  ebfffffe          BL       Uart_Printf
;;;45     		
;;;46     	while(1)
00000c  e1a00000          NOP      
                  |L1.16|
000010  e1a00000          NOP      
;;;47     	{
;;;48     		i=0;
000014  e3a04000          MOV      r4,#0
;;;49     		Uart_Printf("\n\n");
000018  e28f00c8          ADR      r0,|L1.232|
00001c  ebfffffe          BL       Uart_Printf
;;;50     		while(1)
000020  e1a00000          NOP      
                  |L1.36|
000024  e1a00000          NOP      
;;;51     		{   //display menu
;;;52     			Uart_Printf("%2d:%s",i,func_iic_test[i][1]);
000028  e59f00bc          LDR      r0,|L1.236|
00002c  e0800184          ADD      r0,r0,r4,LSL #3
000030  e1a01004          MOV      r1,r4
000034  e5902004          LDR      r2,[r0,#4]
000038  e28f00b0          ADR      r0,|L1.240|
00003c  ebfffffe          BL       Uart_Printf
;;;53     			i++;
000040  e2844001          ADD      r4,r4,#1
;;;54     			if((int)(func_iic_test[i][0])==0)
000044  e59f00a0          LDR      r0,|L1.236|
000048  e7900184          LDR      r0,[r0,r4,LSL #3]
00004c  e3500000          CMP      r0,#0
000050  1a000002          BNE      |L1.96|
;;;55     			{
;;;56     				Uart_Printf("\n");
000054  e28f009c          ADR      r0,|L1.248|
000058  ebfffffe          BL       Uart_Printf
;;;57     				break;
00005c  ea000004          B        |L1.116|
;;;58     			}
;;;59     			if((i%4)==0)
                  |L1.96|
000060  e3140003          TST      r4,#3
000064  1a000001          BNE      |L1.112|
;;;60     			Uart_Printf("\n");
000068  e28f0088          ADR      r0,|L1.248|
00006c  ebfffffe          BL       Uart_Printf
;;;61     		}
                  |L1.112|
000070  eaffffeb          B        |L1.36|
;;;62     
;;;63     		Uart_Printf("\nPress Enter key to exit : ");
                  |L1.116|
000074  e28f0080          ADR      r0,|L1.252|
000078  ebfffffe          BL       Uart_Printf
;;;64     		i = Uart_GetIntNum();
00007c  ebfffffe          BL       Uart_GetIntNum
000080  e1a04000          MOV      r4,r0
;;;65     		if(i==-1) break;		// return.
000084  e3740001          CMN      r4,#1
000088  1a000000          BNE      |L1.144|
00008c  ea000008          B        |L1.180|
;;;66     		if(i>=0 && (i<((sizeof(func_iic_test)-1)/8)) )	// select and execute...
                  |L1.144|
000090  e3540000          CMP      r4,#0
000094  ba000005          BLT      |L1.176|
000098  e3540002          CMP      r4,#2
00009c  2a000003          BCS      |L1.176|
;;;67     			( (void (*)(void)) (func_iic_test[i][0]) )();
0000a0  e59f1044          LDR      r1,|L1.236|
0000a4  e7910184          LDR      r0,[r1,r4,LSL #3]
0000a8  e1a0e00f          MOV      lr,pc
0000ac  e1a0f000          MOV      pc,r0
;;;68     	}
                  |L1.176|
0000b0  eaffffd6          B        |L1.16|
;;;69     	
;;;70     	Uart_Printf("\n====== IIC Test program end ======\n");
                  |L1.180|
0000b4  e28f005c          ADR      r0,|L1.280|
0000b8  ebfffffe          BL       Uart_Printf
;;;71     }
0000bc  e8bd8010          LDMFD    sp!,{r4,pc}
                  |L1.192|
0000c0  3d3d3d0a          DCB      "\n==="
0000c4  203d3d3d          DCB      "=== "
0000c8  43494920          DCB      " IIC"
0000cc  73655420          DCB      " Tes"
0000d0  72702074          DCB      "t pr"
0000d4  6172676f          DCB      "ogra"
0000d8  7473206d          DCB      "m st"
0000dc  20747261          DCB      "art "
0000e0  3d3d3d3d          DCB      "===="
0000e4  000a3d3d          DCB      "==\n\0"
                  |L1.232|
0000e8  00000a0a          DCB      "\n\n\0\0"
                  |L1.236|
0000ec  00000000          DCD      func_iic_test
                  |L1.240|
0000f0  3a643225          DCB      "%2d:"
0000f4  00007325          DCB      "%s\0\0"
                  |L1.248|
0000f8  0000000a          DCB      "\n\0\0\0"
                  |L1.252|
0000fc  6572500a          DCB      "\nPre"
000100  45207373          DCB      "ss E"
000104  7265746e          DCB      "nter"
000108  79656b20          DCB      " key"
00010c  206f7420          DCB      " to "
000110  74697865          DCB      "exit"
000114  00203a20          DCB      " : \0"
                  |L1.280|
000118  3d3d3d0a          DCB      "\n==="
00011c  203d3d3d          DCB      "=== "
000120  20434949          DCB      "IIC "
000124  74736554          DCB      "Test"
000128  6f727020          DCB      " pro"
00012c  6d617267          DCB      "gram"
000130  646e6520          DCB      " end"
000134  3d3d3d20          DCB      " ==="
000138  0a3d3d3d          DCB      "===\n"
00013c  00000000          DCB      "\0\0\0\0"
                          ENDP

                  Rd24C080 PROC
;;;161    void Rd24C080(U32 slvAddr,U32 addr,U8 *data)
;;;162    {
000140  e3a03004          MOV      r3,#4
;;;163        _iicMode      = SETRDADDR;
000144  e59fc588          LDR      r12,|L1.1748|
000148  e58c3000          STR      r3,[r12,#0]  ; _iicMode
;;;164        _iicPt        = 0;
00014c  e3a03000          MOV      r3,#0
000150  e59fc580          LDR      r12,|L1.1752|
000154  e58c3000          STR      r3,[r12,#0]  ; _iicPt
;;;165        _iicData[0]   = (U8)addr;
000158  e59f357c          LDR      r3,|L1.1756|
00015c  e5c31000          STRB     r1,[r3,#0]  ; _iicData
;;;166        _iicDataCount = 1;
000160  e3a03001          MOV      r3,#1
000164  e59fc574          LDR      r12,|L1.1760|
000168  e58c3000          STR      r3,[r12,#0]  ; _iicDataCount
;;;167    
;;;168        rIICDS   = slvAddr;
00016c  e3a03454          MOV      r3,#0x54000000
000170  e583000c          STR      r0,[r3,#0xc]
;;;169        rIICSTAT = 0xf0;                    //MasTx,Start  
000174  e3a030f0          MOV      r3,#0xf0
000178  e3a0c454          MOV      r12,#0x54000000
00017c  e58c3004          STR      r3,[r12,#4]
;;;170          //Clearing the pending bit isn't needed because the pending bit has been cleared.
;;;171        while(_iicDataCount!=-1);
000180  e1a00000          NOP      
                  |L1.388|
000184  e59f3554          LDR      r3,|L1.1760|
000188  e5933000          LDR      r3,[r3,#0]  ; _iicDataCount
00018c  e3730001          CMN      r3,#1
000190  1afffffb          BNE      |L1.388|
;;;172    
;;;173        _iicMode      = RDDATA;
000194  e3a03003          MOV      r3,#3
000198  e59fc534          LDR      r12,|L1.1748|
00019c  e58c3000          STR      r3,[r12,#0]  ; _iicMode
;;;174        _iicPt        = 0;
0001a0  e3a03000          MOV      r3,#0
0001a4  e59fc52c          LDR      r12,|L1.1752|
0001a8  e58c3000          STR      r3,[r12,#0]  ; _iicPt
;;;175        _iicDataCount = 1;
0001ac  e3a03001          MOV      r3,#1
0001b0  e59fc528          LDR      r12,|L1.1760|
0001b4  e58c3000          STR      r3,[r12,#0]  ; _iicDataCount
;;;176        
;;;177        rIICDS        = slvAddr;
0001b8  e3a03454          MOV      r3,#0x54000000
0001bc  e583000c          STR      r0,[r3,#0xc]
;;;178        rIICSTAT      = 0xb0;               //MasRx,Start
0001c0  e3a030b0          MOV      r3,#0xb0
0001c4  e3a0c454          MOV      r12,#0x54000000
0001c8  e58c3004          STR      r3,[r12,#4]
;;;179        rIICCON       = 0xaf;               //Resumes IIC operation.   
0001cc  e3a030af          MOV      r3,#0xaf
0001d0  e3a0c454          MOV      r12,#0x54000000
0001d4  e58c3000          STR      r3,[r12,#0]
;;;180        while(_iicDataCount!=-1);
0001d8  e1a00000          NOP      
                  |L1.476|
0001dc  e59f34fc          LDR      r3,|L1.1760|
0001e0  e5933000          LDR      r3,[r3,#0]  ; _iicDataCount
0001e4  e3730001          CMN      r3,#1
0001e8  1afffffb          BNE      |L1.476|
;;;181    
;;;182        *data = _iicData[1];
0001ec  e59f34e8          LDR      r3,|L1.1756|
0001f0  e5d33001          LDRB     r3,[r3,#1]  ; _iicData
0001f4  e5c23000          STRB     r3,[r2,#0]
;;;183    }
0001f8  e1a0f00e          MOV      pc,lr
                          ENDP

                  Wr24C080 PROC
;;;126    void Wr24C080(U32 slvAddr,U32 addr,U8 data)
;;;127    {
0001fc  e92d4070          STMFD    sp!,{r4-r6,lr}
000200  e1a04000          MOV      r4,r0
000204  e1a05001          MOV      r5,r1
000208  e1a06002          MOV      r6,r2
;;;128        _iicMode      = WRDATA;
00020c  e3a00001          MOV      r0,#1
000210  e59f14bc          LDR      r1,|L1.1748|
000214  e5810000          STR      r0,[r1,#0]  ; _iicMode
;;;129        _iicPt        = 0;
000218  e3a00000          MOV      r0,#0
00021c  e59f14b4          LDR      r1,|L1.1752|
000220  e5810000          STR      r0,[r1,#0]  ; _iicPt
;;;130        _iicData[0]   = (U8)addr;
000224  e59f04b0          LDR      r0,|L1.1756|
000228  e5c05000          STRB     r5,[r0,#0]  ; _iicData
;;;131        _iicData[1]   = data;
00022c  e59f04a8          LDR      r0,|L1.1756|
000230  e5c06001          STRB     r6,[r0,#1]  ; _iicData
;;;132        _iicDataCount = 2;
000234  e3a00002          MOV      r0,#2
000238  e59f14a0          LDR      r1,|L1.1760|
00023c  e5810000          STR      r0,[r1,#0]  ; _iicDataCount
;;;133        
;;;134        rIICDS   = slvAddr;                 //0xa0
000240  e3a00454          MOV      r0,#0x54000000
000244  e580400c          STR      r4,[r0,#0xc]
;;;135        rIICSTAT = 0xf0;                    //MasTx,Start
000248  e3a000f0          MOV      r0,#0xf0
00024c  e3a01454          MOV      r1,#0x54000000
000250  e5810004          STR      r0,[r1,#4]
;;;136          //Clearing the pending bit isn't needed because the pending bit has been cleared.
;;;137        
;;;138        while(_iicDataCount!=-1);
000254  e1a00000          NOP      
                  |L1.600|
000258  e59f0480          LDR      r0,|L1.1760|
00025c  e5900000          LDR      r0,[r0,#0]  ; _iicDataCount
000260  e3700001          CMN      r0,#1
000264  1afffffb          BNE      |L1.600|
;;;139    
;;;140        _iicMode = POLLACK;
000268  e3a00002          MOV      r0,#2
00026c  e59f1460          LDR      r1,|L1.1748|
000270  e5810000          STR      r0,[r1,#0]  ; _iicMode
;;;141    
;;;142        while(1)
000274  e1a00000          NOP      
                  |L1.632|
000278  e1a00000          NOP      
;;;143        {
;;;144            rIICDS     = slvAddr;
00027c  e3a00454          MOV      r0,#0x54000000
000280  e580400c          STR      r4,[r0,#0xc]
;;;145            _iicStatus = 0x100;
000284  e3a00f40          MOV      r0,#0x100
000288  e59f1454          LDR      r1,|L1.1764|
00028c  e5810000          STR      r0,[r1,#0]  ; _iicStatus
;;;146            rIICSTAT   = 0xf0;              //MasTx,Start
000290  e3a000f0          MOV      r0,#0xf0
000294  e3a01454          MOV      r1,#0x54000000
000298  e5810004          STR      r0,[r1,#4]
;;;147            rIICCON    = 0xaf;              //Resumes IIC operation. 
00029c  e3a000af          MOV      r0,#0xaf
0002a0  e3a01454          MOV      r1,#0x54000000
0002a4  e5810000          STR      r0,[r1,#0]
;;;148               
;;;149            while(_iicStatus==0x100);
0002a8  e1a00000          NOP      
                  |L1.684|
0002ac  e59f0430          LDR      r0,|L1.1764|

⌨️ 快捷键说明

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