📄 iic.txt
字号:
000570 e5810040 STR r0,[r1,#0x40]
;;;87
;;;88 pISR_IIC = (unsigned)IicInt;
000574 e59f0194 LDR r0,|L1.1808|
000578 e59f1194 LDR r1,|L1.1812|
00057c e5810f8c STR r0,[r1,#0xf8c]
;;;89 rINTMSK &= ~(BIT_IIC);
000580 e3a0044a MOV r0,#0x4a000000
000584 e5900008 LDR r0,[r0,#8]
000588 e3c00680 BIC r0,r0,#0x8000000
00058c e3a0144a MOV r1,#0x4a000000
000590 e5810008 STR r0,[r1,#8]
;;;90
;;;91 //Enable ACK, Prescaler IICCLK=PCLK/16, Enable interrupt, Transmit clock value Tx clock=IICCLK/16
;;;92 // If PCLK 50.7MHz, IICCLK = 3.17MHz, Tx Clock = 0.198MHz
;;;93 rIICCON = (1<<7) | (0<<6) | (1<<5) | (0xf);
000594 e3a000af MOV r0,#0xaf
000598 e3a01454 MOV r1,#0x54000000
00059c e5810000 STR r0,[r1,#0]
;;;94
;;;95 rIICADD = 0x10; //2442 slave address = [7:1]
0005a0 e3a00010 MOV r0,#0x10
0005a4 e3a01454 MOV r1,#0x54000000
0005a8 e5810008 STR r0,[r1,#8]
;;;96 rIICSTAT = 0x10; //IIC bus data output enable(Rx/Tx)
0005ac e3a00010 MOV r0,#0x10
0005b0 e3a01454 MOV r1,#0x54000000
0005b4 e5810004 STR r0,[r1,#4]
;;;97 rIICLC = (1<<2)|(1); // Filter enable, 15 clocks SDA output delay added by junon
0005b8 e3a00005 MOV r0,#5
0005bc e3a01454 MOV r1,#0x54000000
0005c0 e5810010 STR r0,[r1,#0x10]
;;;98
;;;99 Uart_Printf("Write test data into KS24C080\n");
0005c4 e28f0f53 ADR r0,|L1.1816|
0005c8 ebfffffe BL Uart_Printf
;;;100
;;;101 for(i=0;i<256;i++)
0005cc e3a04000 MOV r4,#0
|L1.1488|
0005d0 e3540f40 CMP r4,#0x100
0005d4 2a000007 BCS |L1.1528|
0005d8 ea000001 B |L1.1508|
|L1.1500|
0005dc e2844001 ADD r4,r4,#1
0005e0 eafffffa B |L1.1488|
;;;102 Wr24C080(0xa0,(U8)i,i);
|L1.1508|
0005e4 e20420ff AND r2,r4,#0xff
0005e8 e20410ff AND r1,r4,#0xff
0005ec e3a000a0 MOV r0,#0xa0
0005f0 ebfffffe BL Wr24C080
0005f4 eafffff8 B |L1.1500|
;;;103
;;;104 for(i=0;i<256;i++)
|L1.1528|
0005f8 e3a04000 MOV r4,#0
|L1.1532|
0005fc e3540f40 CMP r4,#0x100
000600 2a000006 BCS |L1.1568|
000604 ea000001 B |L1.1552|
|L1.1544|
000608 e2844001 ADD r4,r4,#1
00060c eafffffa B |L1.1532|
;;;105 data[i] = 0;
|L1.1552|
000610 e3a00000 MOV r0,#0
000614 e59f111c LDR r1,|L1.1848|
000618 e7c10004 STRB r0,[r1,r4]
00061c eafffff9 B |L1.1544|
;;;106
;;;107 Uart_Printf("Read test data from KS24C080\n");
|L1.1568|
000620 e28f0f45 ADR r0,|L1.1852|
000624 ebfffffe BL Uart_Printf
;;;108
;;;109 for(i=0;i<256;i++)
000628 e3a04000 MOV r4,#0
|L1.1580|
00062c e3540f40 CMP r4,#0x100
000630 2a000008 BCS |L1.1624|
000634 ea000001 B |L1.1600|
|L1.1592|
000638 e2844001 ADD r4,r4,#1
00063c eafffffa B |L1.1580|
;;;110 Rd24C080(0xa0,(U8)i,&(data[i]));
|L1.1600|
000640 e59f00f0 LDR r0,|L1.1848|
000644 e0802004 ADD r2,r0,r4
000648 e20410ff AND r1,r4,#0xff
00064c e3a000a0 MOV r0,#0xa0
000650 ebfffffe BL Rd24C080
000654 eafffff7 B |L1.1592|
;;;111
;;;112 //Line changed 0 ~ f
;;;113 for(i=0;i<16;i++)
|L1.1624|
000658 e3a04000 MOV r4,#0
|L1.1628|
00065c e3540010 CMP r4,#0x10
000660 2a000011 BCS |L1.1708|
000664 ea000001 B |L1.1648|
|L1.1640|
000668 e2844001 ADD r4,r4,#1
00066c eafffffa B |L1.1628|
;;;114 {
;;;115 for(j=0;j<16;j++)
|L1.1648|
000670 e3a05000 MOV r5,#0
|L1.1652|
000674 e3550010 CMP r5,#0x10
000678 2a000008 BCS |L1.1696|
00067c ea000001 B |L1.1672|
|L1.1664|
000680 e2855001 ADD r5,r5,#1
000684 eafffffa B |L1.1652|
;;;116 Uart_Printf("%2x ",data[i*16+j]);
|L1.1672|
000688 e0850204 ADD r0,r5,r4,LSL #4
00068c e59f20a4 LDR r2,|L1.1848|
000690 e7d21000 LDRB r1,[r2,r0]
000694 e28f00c0 ADR r0,|L1.1884|
000698 ebfffffe BL Uart_Printf
00069c eafffff7 B |L1.1664|
;;;117 Uart_Printf("\n");
|L1.1696|
0006a0 e28f00b0 ADR r0,|L1.1880|
0006a4 ebfffffe BL Uart_Printf
;;;118 }
0006a8 eaffffee B |L1.1640|
;;;119 rINTMSK |= BIT_IIC;
|L1.1708|
0006ac e3a0044a MOV r0,#0x4a000000
0006b0 e5900008 LDR r0,[r0,#8]
0006b4 e3800680 ORR r0,r0,#0x8000000
0006b8 e3a0144a MOV r1,#0x4a000000
0006bc e5810008 STR r0,[r1,#8]
;;;120 rGPEUP = save_PE;
0006c0 e3a00456 MOV r0,#0x56000000
0006c4 e5807048 STR r7,[r0,#0x48]
;;;121 rGPECON = save_E;
0006c8 e3a00456 MOV r0,#0x56000000
0006cc e5806040 STR r6,[r0,#0x40]
;;;122 }
0006d0 e8bd80f8 LDMFD sp!,{r3-r7,pc}
|L1.1748|
0006d4 00000228 DCD ||.bss$2|| + 552
|L1.1752|
0006d8 0000022c DCD ||.bss$2|| + 556
|L1.1756|
0006dc 00000200 DCD ||.bss$2|| + 512
|L1.1760|
0006e0 00000220 DCD ||.bss$2|| + 544
|L1.1764|
0006e4 00000224 DCD ||.bss$2|| + 548
|L1.1768|
0006e8 4949205b DCB "[ II"
0006ec 65542043 DCB "C Te"
0006f0 49287473 DCB "st(I"
0006f4 7265746e DCB "nter"
0006f8 74707572 DCB "rupt"
0006fc 73752029 DCB ") us"
000700 20676e69 DCB "ing "
000704 3432534b DCB "KS24"
000708 30383043 DCB "C080"
00070c 000a5d20 DCB " ]\n\0"
|L1.1808|
000710 00000000 DCD IicInt
|L1.1812|
000714 31fff000 DCD 0x31fff000
|L1.1816|
000718 74697257 DCB "Writ"
00071c 65742065 DCB "e te"
000720 64207473 DCB "st d"
000724 20617461 DCB "ata "
000728 6f746e69 DCB "into"
00072c 32534b20 DCB " KS2"
000730 38304334 DCB "4C08"
000734 00000a30 DCB "0\n\0\0"
|L1.1848|
000738 00000000 DCD ||.bss$2||
|L1.1852|
00073c 64616552 DCB "Read"
000740 73657420 DCB " tes"
000744 61642074 DCB "t da"
000748 66206174 DCB "ta f"
00074c 206d6f72 DCB "rom "
000750 3432534b DCB "KS24"
000754 30383043 DCB "C080"
|L1.1880|
000758 0000000a DCB "\n\0\0\0"
|L1.1884|
00075c 20783225 DCB "%2x "
000760 00000000 DCB "\0\0\0\0"
ENDP
IicPoll PROC
;;;378 void IicPoll(void)
;;;379 {
000764 e92d4038 STMFD sp!,{r3-r5,lr}
;;;380 U32 iicSt,i;
;;;381
;;;382 iicSt = rIICSTAT;
000768 e3a00454 MOV r0,#0x54000000
00076c e5900004 LDR r0,[r0,#4]
000770 e1a05000 MOV r5,r0
;;;383 if(iicSt & 0x8){} //When bus arbitration is failed.
000774 e1a00000 NOP
;;;384 if(iicSt & 0x4){} //When a slave address is matched with IICADD
000778 e1a00000 NOP
;;;385 if(iicSt & 0x2){} //When a slave address is 0000000b
00077c e1a00000 NOP
;;;386 if(iicSt & 0x1){} //When ACK isn't received
000780 e1a00000 NOP
;;;387
;;;388 switch(_iicMode)
000784 e51f00b8 LDR r0,|L1.1748|
000788 e5900000 LDR r0,[r0,#0] ; _iicMode
00078c e3500001 CMP r0,#1
000790 0a000038 BEQ |L1.2168|
000794 e3500002 CMP r0,#2
000798 0a000004 BEQ |L1.1968|
00079c e3500003 CMP r0,#3
0007a0 0a000005 BEQ |L1.1980|
0007a4 e3500004 CMP r0,#4
0007a8 1a000070 BNE |L1.2416|
0007ac ea000054 B |L1.2308|
;;;389 {
;;;390 case POLLACK:
;;;391 _iicStatus = iicSt;
|L1.1968|
0007b0 e51f00d4 LDR r0,|L1.1764|
0007b4 e5805000 STR r5,[r0,#0] ; _iicStatus
;;;392 break;
0007b8 ea00006d B |L1.2420|
;;;393
;;;394 case RDDATA:
;;;395 if((_iicDataCount--)==0)
|L1.1980|
0007bc e51f00e4 LDR r0,|L1.1760|
0007c0 e5900000 LDR r0,[r0,#0] ; _iicDataCount
0007c4 e2401001 SUB r1,r0,#1
0007c8 e51f00f0 LDR r0,|L1.1760|
0007cc e5902000 LDR r2,[r0,#0] ; _iicDataCount
0007d0 e5801000 STR r1,[r0,#0] ; _iicDataCount
0007d4 e3520000 CMP r2,#0
0007d8 1a000011 BNE |L1.2084|
;;;396 {
;;;397 _iicData[_iicPt++] = rIICDS;
0007dc e3a00454 MOV r0,#0x54000000
0007e0 e590100c LDR r1,[r0,#0xc]
0007e4 e51f0114 LDR r0,|L1.1752|
0007e8 e5900000 LDR r0,[r0,#0] ; _iicPt
0007ec e2802001 ADD r2,r0,#1
0007f0 e51f3120 LDR r3,|L1.1752|
0007f4 e5832000 STR r2,[r3,#0] ; _iicPt
0007f8 e51f2124 LDR r2,|L1.1756|
0007fc e7c21000 STRB r1,[r2,r0]
;;;398
;;;399 rIICSTAT = 0x90; //Stop MasRx condition
000800 e3a00090 MOV r0,#0x90
000804 e3a01454 MOV r1,#0x54000000
000808 e5810004 STR r0,[r1,#4]
;;;400 rIICCON = 0xaf; //Resumes IIC operation.
00080c e3a000af MOV r0,#0xaf
000810 e3a01454 MOV r1,#0x54000000
000814 e5810000 STR r0,[r1,#0]
;;;401 Delay(1); //Wait until stop condtion is in effect.
000818 e3a00001 MOV r0,#1
00081c ebfffffe BL Delay
;;;402 //Too long time...
;;;403 //The pending bit will not be set after issuing stop condition.
;;;404 break;
000820 ea000053 B |L1.2420|
;;;405 }
;;;406 _iicData[_iicPt++] = rIICDS;
|L1.2084|
000824 e3a00454 MOV r0,#0x54000000
000828 e590100c LDR r1,[r0,#0xc]
00082c e51f015c LDR r0,|L1.1752|
000830 e5900000 LDR r0,[r0,#0] ; _iicPt
000834 e2802001 ADD r2,r0,#1
000838 e51f3168 LDR r3,|L1.1752|
00083c e5832000 STR r2,[r3,#0] ; _iicPt
000840 e51f216c LDR r2,|L1.1756|
000844 e7c21000 STRB r1,[r2,r0]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -