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