📄 iic.txt
字号:
000664 0000022c DCD ||.bss$2|| + 556
|L1.1640|
000668 00000200 DCD ||.bss$2|| + 512
|L1.1644|
00066c 00000220 DCD ||.bss$2|| + 544
|L1.1648|
000670 44600000 DCD 0x44600000
|L1.1652|
000674 00000224 DCD ||.bss$2|| + 548
|L1.1656|
000678 40200000 DCD 0x40200000
|L1.1660|
00067c 4949205b DCB "[ II"
000680 65542043 DCB "C Te"
000684 49287473 DCB "st(I"
000688 7265746e DCB "nter"
00068c 74707572 DCB "rupt"
000690 73752029 DCB ") us"
000694 20676e69 DCB "ing "
000698 3432534b DCB "KS24"
00069c 30383043 DCB "C080"
0006a0 000a5d20 DCB " ]\n\0"
|L1.1700|
0006a4 00000000 DCD IicInt
|L1.1704|
0006a8 13fff000 DCD 0x13fff000
|L1.1708|
0006ac 74697257 DCB "Writ"
0006b0 65742065 DCB "e te"
0006b4 64207473 DCB "st d"
0006b8 20617461 DCB "ata "
0006bc 6f746e69 DCB "into"
0006c0 32534b20 DCB " KS2"
0006c4 38304334 DCB "4C08"
0006c8 00000a30 DCB "0\n\0\0"
|L1.1740|
0006cc 00000000 DCD ||.bss$2||
|L1.1744|
0006d0 64616552 DCB "Read"
0006d4 73657420 DCB " tes"
0006d8 61642074 DCB "t da"
0006dc 66206174 DCB "ta f"
0006e0 206d6f72 DCB "rom "
0006e4 3432534b DCB "KS24"
0006e8 30383043 DCB "C080"
|L1.1772|
0006ec 0000000a DCB "\n\0\0\0"
|L1.1776|
0006f0 20783225 DCB "%2x "
0006f4 00000000 DCB "\0\0\0\0"
ENDP
IicPoll PROC
;;;368 void IicPoll(void)
;;;369 {
0006f8 e92d4038 STMFD sp!,{r3-r5,lr}
;;;370 U32 iicSt,i;
;;;371
;;;372 iicSt = rIICSTAT;
0006fc e51f0094 LDR r0,|L1.1648|
000700 e5900004 LDR r0,[r0,#4]
000704 e1a05000 MOV r5,r0
;;;373 if(iicSt & 0x8){} //When bus arbitration is failed.
000708 e1a00000 NOP
;;;374 if(iicSt & 0x4){} //When a slave address is matched with IICADD
00070c e1a00000 NOP
;;;375 if(iicSt & 0x2){} //When a slave address is 0000000b
000710 e1a00000 NOP
;;;376 if(iicSt & 0x1){} //When ACK isn't received
000714 e1a00000 NOP
;;;377
;;;378 switch(_iicMode)
000718 e51f00c0 LDR r0,|L1.1632|
00071c e5900000 LDR r0,[r0,#0] ; _iicMode
000720 e3500001 CMP r0,#1
000724 0a000038 BEQ |L1.2060|
000728 e3500002 CMP r0,#2
00072c 0a000004 BEQ |L1.1860|
000730 e3500003 CMP r0,#3
000734 0a000005 BEQ |L1.1872|
000738 e3500004 CMP r0,#4
00073c 1a000070 BNE |L1.2308|
000740 ea000054 B |L1.2200|
;;;379 {
;;;380 case POLLACK:
;;;381 _iicStatus = iicSt;
|L1.1860|
000744 e51f00d8 LDR r0,|L1.1652|
000748 e5805000 STR r5,[r0,#0] ; _iicStatus
;;;382 break;
00074c ea00006d B |L1.2312|
;;;383
;;;384 case RDDATA:
;;;385 if((_iicDataCount--)==0)
|L1.1872|
000750 e51f00ec LDR r0,|L1.1644|
000754 e5900000 LDR r0,[r0,#0] ; _iicDataCount
000758 e2401001 SUB r1,r0,#1
00075c e51f00f8 LDR r0,|L1.1644|
000760 e5902000 LDR r2,[r0,#0] ; _iicDataCount
000764 e5801000 STR r1,[r0,#0] ; _iicDataCount
000768 e3520000 CMP r2,#0
00076c 1a000011 BNE |L1.1976|
;;;386 {
;;;387 _iicData[_iicPt++] = rIICDS;
000770 e51f0108 LDR r0,|L1.1648|
000774 e590100c LDR r1,[r0,#0xc]
000778 e51f011c LDR r0,|L1.1636|
00077c e5900000 LDR r0,[r0,#0] ; _iicPt
000780 e2802001 ADD r2,r0,#1
000784 e51f3128 LDR r3,|L1.1636|
000788 e5832000 STR r2,[r3,#0] ; _iicPt
00078c e51f212c LDR r2,|L1.1640|
000790 e7c21000 STRB r1,[r2,r0]
;;;388
;;;389 rIICSTAT = 0x90; //Stop MasRx condition
000794 e3a00090 MOV r0,#0x90
000798 e51f1130 LDR r1,|L1.1648|
00079c e5810004 STR r0,[r1,#4]
;;;390 rIICCON = 0xaf; //Resumes IIC operation.
0007a0 e3a000af MOV r0,#0xaf
0007a4 e1c11000 BIC r1,r1,r0
0007a8 e5810000 STR r0,[r1,#0]
;;;391 Delay(1); //Wait until stop condtion is in effect.
0007ac e3a00001 MOV r0,#1
0007b0 ebfffffe BL Delay
;;;392 //Too long time...
;;;393 //The pending bit will not be set after issuing stop condition.
;;;394 break;
0007b4 ea000053 B |L1.2312|
;;;395 }
;;;396 _iicData[_iicPt++] = rIICDS;
|L1.1976|
0007b8 e51f0150 LDR r0,|L1.1648|
0007bc e590100c LDR r1,[r0,#0xc]
0007c0 e51f0164 LDR r0,|L1.1636|
0007c4 e5900000 LDR r0,[r0,#0] ; _iicPt
0007c8 e2802001 ADD r2,r0,#1
0007cc e51f3170 LDR r3,|L1.1636|
0007d0 e5832000 STR r2,[r3,#0] ; _iicPt
0007d4 e51f2174 LDR r2,|L1.1640|
0007d8 e7c21000 STRB r1,[r2,r0]
;;;397 //The last data has to be read with no ack.
;;;398 if((_iicDataCount)==0)
0007dc e51f0178 LDR r0,|L1.1644|
0007e0 e5900000 LDR r0,[r0,#0] ; _iicDataCount
0007e4 e3500000 CMP r0,#0
0007e8 1a000003 BNE |L1.2044|
;;;399 rIICCON = 0x2f; //Resumes IIC operation with NOACK.
0007ec e3a0002f MOV r0,#0x2f
0007f0 e51f1188 LDR r1,|L1.1648|
0007f4 e5810000 STR r0,[r1,#0]
0007f8 ea000002 B |L1.2056|
;;;400 else
;;;401 rIICCON = 0xaf; //Resumes IIC operation with ACK
|L1.2044|
0007fc e3a000af MOV r0,#0xaf
000800 e51f1198 LDR r1,|L1.1648|
000804 e5810000 STR r0,[r1,#0]
;;;402 break;
|L1.2056|
000808 ea00003e B |L1.2312|
;;;403
;;;404 case WRDATA:
;;;405 if((_iicDataCount--)==0)
|L1.2060|
00080c e51f01a8 LDR r0,|L1.1644|
000810 e5900000 LDR r0,[r0,#0] ; _iicDataCount
000814 e2401001 SUB r1,r0,#1
000818 e51f01b4 LDR r0,|L1.1644|
00081c e5902000 LDR r2,[r0,#0] ; _iicDataCount
000820 e5801000 STR r1,[r0,#0] ; _iicDataCount
000824 e3520000 CMP r2,#0
000828 1a000008 BNE |L1.2128|
;;;406 {
;;;407 rIICSTAT = 0xd0; //stop MasTx condition
00082c e3a000d0 MOV r0,#0xd0
000830 e51f11c8 LDR r1,|L1.1648|
000834 e5810004 STR r0,[r1,#4]
;;;408 rIICCON = 0xaf; //resumes IIC operation.
000838 e3a000af MOV r0,#0xaf
00083c e1c11000 BIC r1,r1,r0
000840 e5810000 STR r0,[r1,#0]
;;;409 Delay(1); //wait until stop condtion is in effect.
000844 e3a00001 MOV r0,#1
000848 ebfffffe BL Delay
;;;410 //The pending bit will not be set after issuing stop condition.
;;;411 break;
00084c ea00002d B |L1.2312|
;;;412 }
;;;413 rIICDS = _iicData[_iicPt++]; //_iicData[0] has dummy.
|L1.2128|
000850 e51f01f4 LDR r0,|L1.1636|
000854 e5900000 LDR r0,[r0,#0] ; _iicPt
000858 e2801001 ADD r1,r0,#1
00085c e51f2200 LDR r2,|L1.1636|
000860 e5821000 STR r1,[r2,#0] ; _iicPt
000864 e51f1204 LDR r1,|L1.1640|
000868 e7d10000 LDRB r0,[r1,r0]
00086c e51f1204 LDR r1,|L1.1648|
000870 e581000c STR r0,[r1,#0xc]
;;;414 for(i=0;i<10;i++); //for setup time until rising edge of IICSCL
000874 e3a04000 MOV r4,#0
|L1.2168|
000878 e354000a CMP r4,#0xa
00087c 2a000001 BCS |L1.2184|
000880 e2844001 ADD r4,r4,#1
000884 eafffffb B |L1.2168|
;;;415 rIICCON = 0xaf; //resumes IIC operation.
|L1.2184|
000888 e3a000af MOV r0,#0xaf
00088c e51f1224 LDR r1,|L1.1648|
000890 e5810000 STR r0,[r1,#0]
;;;416 break;
000894 ea00001b B |L1.2312|
;;;417
;;;418 case SETRDADDR:
;;;419 // Uart_Printf("[S%d]",_iicDataCount);
;;;420 if((_iicDataCount--)==0)
|L1.2200|
000898 e51f0234 LDR r0,|L1.1644|
00089c e5900000 LDR r0,[r0,#0] ; _iicDataCount
0008a0 e2401001 SUB r1,r0,#1
0008a4 e51f0240 LDR r0,|L1.1644|
0008a8 e5902000 LDR r2,[r0,#0] ; _iicDataCount
0008ac e5801000 STR r1,[r0,#0] ; _iicDataCount
0008b0 e3520000 CMP r2,#0
0008b4 1a000000 BNE |L1.2236|
;;;421 {
;;;422 break; //IIC operation is stopped because of IICCON[4]
0008b8 ea000012 B |L1.2312|
;;;423 }
;;;424 rIICDS = _iicData[_iicPt++];
|L1.2236|
0008bc e51f0260 LDR r0,|L1.1636|
0008c0 e5900000 LDR r0,[r0,#0] ; _iicPt
0008c4 e2801001 ADD r1,r0,#1
0008c8 e51f226c LDR r2,|L1.1636|
0008cc e5821000 STR r1,[r2,#0] ; _iicPt
0008d0 e51f1270 LDR r1,|L1.1640|
0008d4 e7d10000 LDRB r0,[r1,r0]
0008d8 e51f1270 LDR r1,|L1.1648|
0008dc e581000c STR r0,[r1,#0xc]
;;;425 for(i=0;i<10;i++); //for setup time until rising edge of IICSCL
0008e0 e3a04000 MOV r4,#0
|L1.2276|
0008e4 e354000a CMP r4,#0xa
0008e8 2a000001 BCS |L1.2292|
0008ec e2844001 ADD r4,r4,#1
0008f0 eafffffb B |L1.2276|
;;;426 rIICCON = 0xaf; //resumes IIC operation.
|L1.2292|
0008f4 e3a000af MOV r0,#0xaf
0008f8 e51f1290 LDR r1,|L1.1648|
0008fc e5810000 STR r0,[r1,#0]
;;;427 break;
000900 ea000000 B |L1.2312|
;;;428
;;;429 default:
;;;430 break;
|L1.2308|
000904 e1a00000 NOP
;;;431 }
;;;432 }
|L1.2312|
000908 e8bd8038 LDMFD sp!,{r3-r5,pc}
ENDP
Run_IicPoll PROC
;;;361 void Run_IicPoll(void)
;;;362 {
00090c e92d4008 STMFD sp!,{r3,lr}
;;;363 if(rIICCON & 0x10) //Tx/Rx Interrupt Enable
000910 e51f02a8 LDR r0,|L1.1648|
000914 e5900000 LDR r0,[r0,#0]
000918 e3100010 TST r0,#0x10
00091c 0a000000 BEQ |L1.2340|
;;;364 IicPoll();
000920 ebfffffe BL IicPoll
;;;365 }
|L1.2340|
000924 e8bd8008 LDMFD sp!,{r3,pc}
ENDP
_Rd24C080 PROC
;;;334 void _Rd24C080(U32 slvAddr,U32 addr,U8 *data)
;;;335 {
000928 e92d4070 STMFD sp!,{r4-r6,lr}
00092c e1a04000 MOV r4,r0
000930 e1a05001 MOV r5,r1
000934 e1a06002 MOV r6,r2
;;;336 _iicMode = SETRDADDR;
000938 e3a00004 MOV r0,#4
00093c e51f12e4 LDR r1,|L1.1632|
000940 e5810000 STR r0,[r1,#0] ; _iicMode
;;;337 _iicPt = 0;
000944 e3a00000 MOV r0,#0
000948 e51f12ec LDR r1,|L1.1636|
00094c e5810000 STR r0,[r1,#0] ; _iicPt
;;;338 _iicData[0] = (U8)addr;
000950 e51f02f0 LDR r0,|L1.1640|
000954 e5c05000 STRB r5,[r0,#0] ; _iicData
;;;339 _iicDataCount = 1;
000958 e3a00001 MOV r0,#1
00095c e51f12f8 LDR r1,|L1.1644|
000960 e5810000 STR r0,[r1,#0] ; _iicDataCount
;;;340
;;;341 rIICDS = slvAddr;
000964 e51f02fc LDR r0,|L1.1648|
000968 e580400c STR r4,[r0,#0xc]
;;;342 rIICSTAT = 0xf0; //MasTx,Start
00096c e3a000f0 MOV r0,#0xf0
000970 e51f1308 LDR r1,|L1.1648|
000974 e5810004 STR r0,[r1,#4]
;;;343 //Clearing the pending bit isn't needed because the pending bit has been cleared.
;;;344 while(_iicDataCount!=-1)
000978 e1a00000 NOP
|L1.2428|
00097c e51f0318 LDR r0,|L1.1644|
000980 e5900000 LDR r0,[r0,#0] ; _iicDataCount
000984 e3700001 CMN r0,#1
000988 0a000001 BEQ |L1.2452|
;;;345 Run_IicPoll();
00098c ebfffffe BL Run_IicPoll
000990 eafffff9 B |L1.2428|
;;;346
;;;347 _iicMode = RDDATA;
|L1.2452|
000994 e3a00003 MOV r0,#3
000998 e51f1340 LDR r1,|L1.1632|
00099c e5810000 STR r0,[r1,#0] ; _iicMode
;;;348 _iicPt = 0;
0009a0 e3a00000 MOV r0,#0
0009a4 e51f1348 LDR r1,|L1.1636|
0009a8 e5810000 STR r0,[r1,#0] ; _iicPt
;;;349 _iicDataCount = 1;
0009ac e3a00001 MOV r0,#1
0009b0 e51f134c LDR r1,|L1.1644|
0009b4 e5810000 STR r0,[r1,#0] ; _iicDataCount
;;;350
;;;351 rIICDS = slvAddr;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -