📄 iic.txt
字号:
; 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 + -