📄 iic_s5x532.txt
字号:
Rd_S5X532 PROC
;;;242 void Rd_S5X532(U32 slvAddr,U32 addr,U8 *data)
;;;243 {
0005d4 e3a03004 MOV r3,#4
;;;244
;;;245 /*IIC Slave Addr Write + IIC Reg Addr Write */
;;;246 _iicMode = SETRDADDR;
0005d8 e51fc240 LDR r12,|L1.928|
0005dc e58c3000 STR r3,[r12,#0] ; _iicMode
;;;247 _iicPt = 0;
0005e0 e3a03000 MOV r3,#0
0005e4 e51fc240 LDR r12,|L1.940|
0005e8 e58c3000 STR r3,[r12,#0] ; _iicPt
;;;248 _iicData[0] = (U8)addr;
0005ec e51f3244 LDR r3,|L1.944|
0005f0 e5c31000 STRB r1,[r3,#0] ; _iicData
;;;249 _iicDataCount = 1;
0005f4 e3a03001 MOV r3,#1
0005f8 e51fc25c LDR r12,|L1.932|
0005fc e58c3000 STR r3,[r12,#0] ; _iicDataCount
;;;250
;;;251 rIICDS = slvAddr;
000600 e51f3260 LDR r3,|L1.936|
000604 e583000c STR r0,[r3,#0xc]
;;;252 rIICSTAT = 0xf0; //Master Tx, Start
000608 e3a030f0 MOV r3,#0xf0
00060c e51fc26c LDR r12,|L1.936|
000610 e58c3004 STR r3,[r12,#4]
;;;253 rIICCON = 0xef; //Resumes IIC operation.
000614 e3a030ef MOV r3,#0xef
000618 e1ccc003 BIC r12,r12,r3
00061c e58c3000 STR r3,[r12,#0]
;;;254 //Clearing the pending bit isn't needed because the pending bit has been cleared.
;;;255 while(_iicDataCount!=-1);
000620 e1a00000 NOP
|L1.1572|
000624 e51f3288 LDR r3,|L1.932|
000628 e5933000 LDR r3,[r3,#0] ; _iicDataCount
00062c e3730001 CMN r3,#1
000630 1afffffb BNE |L1.1572|
;;;256 // Run_Polling();
;;;257
;;;258 _iicMode = RDDATA;
000634 e3a03003 MOV r3,#3
000638 e51fc2a0 LDR r12,|L1.928|
00063c e58c3000 STR r3,[r12,#0] ; _iicMode
;;;259 _iicPt = 0;
000640 e3a03000 MOV r3,#0
000644 e51fc2a0 LDR r12,|L1.940|
000648 e58c3000 STR r3,[r12,#0] ; _iicPt
;;;260 _iicDataCount = 1;
00064c e3a03001 MOV r3,#1
000650 e51fc2b4 LDR r12,|L1.932|
000654 e58c3000 STR r3,[r12,#0] ; _iicDataCount
;;;261
;;;262 rIICDS = slvAddr;
000658 e51f32b8 LDR r3,|L1.936|
00065c e583000c STR r0,[r3,#0xc]
;;;263 rIICSTAT = 0xb0; //Master Rx,Start
000660 e3a030b0 MOV r3,#0xb0
000664 e51fc2c4 LDR r12,|L1.936|
000668 e58c3004 STR r3,[r12,#4]
;;;264 rIICCON = 0xef; //Resumes IIC operation.
00066c e3a030ef MOV r3,#0xef
000670 e1ccc003 BIC r12,r12,r3
000674 e58c3000 STR r3,[r12,#0]
;;;265
;;;266 while(_iicDataCount!=-1);
000678 e1a00000 NOP
|L1.1660|
00067c e51f32e0 LDR r3,|L1.932|
000680 e5933000 LDR r3,[r3,#0] ; _iicDataCount
000684 e3730001 CMN r3,#1
000688 1afffffb BNE |L1.1660|
;;;267 // Run_Polling();
;;;268
;;;269 *data = _iicData[1];
00068c e51f32e4 LDR r3,|L1.944|
000690 e5d33001 LDRB r3,[r3,#1] ; _iicData
000694 e5c23000 STRB r3,[r2,#0]
;;;270 }
000698 e12fff1e BX lr
ENDP
S5X532_ReadByte PROC
;;;142 void S5X532_ReadByte(void)
;;;143 {
00069c e92d4038 STMFD sp!,{r3-r5,lr}
;;;144 unsigned int i, j, save_E, save_PE, RegAddr, RegData, pageNo;
;;;145 static U8 rdata[8];
;;;146
;;;147 //Enable ACK, Prescaler IICCLK=PCLK/512, Enable interrupt, Transmit clock value Tx clock=IICCLK/16
;;;148 rIICCON = (1<<7) | (1<<6) | (1<<5) | (0xf);
0006a0 e3a000ef MOV r0,#0xef
0006a4 e51f1304 LDR r1,|L1.936|
0006a8 e5810000 STR r0,[r1,#0]
;;;149
;;;150 rIICADD = 0x10; //2440 slave address = [7:1]
0006ac e3a00010 MOV r0,#0x10
0006b0 e1c11000 BIC r1,r1,r0
0006b4 e5810008 STR r0,[r1,#8]
;;;151 rIICSTAT = 0x10; //IIC bus data output enable(Rx/Tx)
0006b8 e3a00010 MOV r0,#0x10
0006bc e1c11000 BIC r1,r1,r0
0006c0 e5810004 STR r0,[r1,#4]
;;;152 rIICSDADLY = 1; // SDAOUT has 5clock cycle delay
0006c4 e3a00001 MOV r0,#1
0006c8 e1c11000 BIC r1,r1,r0
0006cc e5810010 STR r0,[r1,#0x10]
;;;153
;;;154 Uart_Printf("Input Write Page No of S5X532\n=>");
0006d0 e24f0f60 ADR r0,|L1.1368|
0006d4 ebfffffe BL _printf
;;;155 pageNo = (U8)Uart_GetIntNum();
0006d8 ebfffffe BL Uart_GetIntNum
0006dc e20050ff AND r5,r0,#0xff
;;;156
;;;157 Wr_S5X532(SlaveID, (U8)0xec, pageNo); // set Page no
0006e0 e1a02005 MOV r2,r5
0006e4 e3a010ec MOV r1,#0xec
0006e8 e3a0005a MOV r0,#0x5a
0006ec ebfffffe BL Wr_S5X532
;;;158
;;;159 Uart_Printf("Input Read Register Address of S5X532\n=>");
0006f0 e28f0030 ADR r0,|L1.1832|
0006f4 ebfffffe BL _printf
;;;160 RegAddr = (U8)Uart_GetIntNum();
0006f8 ebfffffe BL Uart_GetIntNum
0006fc e20040ff AND r4,r0,#0xff
;;;161
;;;162 Rd_S5X532(SlaveID, RegAddr, &rdata[0]);
000700 e59f204c LDR r2,|L1.1876|
000704 e1a01004 MOV r1,r4
000708 e3a0005a MOV r0,#0x5a
00070c ebfffffe BL Rd_S5X532
;;;163 Uart_Printf("Register Addr: 0x%2x, data: 0x%2x\n", RegAddr,rdata[0]);
000710 e59f003c LDR r0,|L1.1876|
000714 e5d02000 LDRB r2,[r0,#0] ; rdata@S5X532_ReadByte_0
000718 e1a01004 MOV r1,r4
00071c e28f0034 ADR r0,|L1.1880|
000720 ebfffffe BL _printf
;;;164
;;;165 }
000724 e8bd8038 LDMFD sp!,{r3-r5,pc}
|L1.1832|
000728 75706e49 DCB "Inpu"
00072c 65522074 DCB "t Re"
000730 52206461 DCB "ad R"
000734 73696765 DCB "egis"
000738 20726574 DCB "ter "
00073c 72646441 DCB "Addr"
000740 20737365 DCB "ess "
000744 5320666f DCB "of S"
000748 33355835 DCB "5X53"
00074c 3e3d0a32 DCB "2\n=>"
000750 00000000 DCB "\0\0\0\0"
|L1.1876|
000754 00000000 DCD ||.bss$2||
|L1.1880|
000758 69676552 DCB "Regi"
00075c 72657473 DCB "ster"
000760 64644120 DCB " Add"
000764 30203a72 DCB "r: 0"
000768 78322578 DCB "x%2x"
00076c 6164202c DCB ", da"
000770 203a6174 DCB "ta: "
000774 32257830 DCB "0x%2"
000778 00000a78 DCB "x\n\0\0"
ENDP
S5X532_WriteBlock PROC
;;;168 void S5X532_WriteBlock(void)
;;;169 {
00077c e92d4010 STMFD sp!,{r4,lr}
;;;170 unsigned int i, j, save_E, save_PE, RegAddr, RegData;
;;;171 static U8 rdata[256];
;;;172
;;;173 // for camera init, added by junon
;;;174 pISR_IIC = (unsigned)S5X532_IicInt;
000780 e51f0358 LDR r0,|L1.1072|
000784 e51f1358 LDR r1,|L1.1076|
000788 e5810f8c STR r0,[r1,#0xf8c]
;;;175 rINTMSK &= ~(BIT_IIC);
00078c e51f03f8 LDR r0,|L1.924|
000790 e5900008 LDR r0,[r0,#8]
000794 e3c00680 BIC r0,r0,#0x8000000
000798 e51f1404 LDR r1,|L1.924|
00079c e5810008 STR r0,[r1,#8]
;;;176
;;;177 //Enable ACK, Prescaler IICCLK=PCLK/512, Enable interrupt, Transmit clock value Tx clock=IICCLK/16
;;;178 rIICCON = (1<<7) | (1<<6) | (1<<5) | (0xf);
0007a0 e3a000ef MOV r0,#0xef
0007a4 e2811644 ADD r1,r1,#0x4400000
0007a8 e5810000 STR r0,[r1,#0]
;;;179
;;;180 rIICADD = 0x10; //2440 slave address = [7:1]
0007ac e3a00010 MOV r0,#0x10
0007b0 e1c11000 BIC r1,r1,r0
0007b4 e5810008 STR r0,[r1,#8]
;;;181 rIICSTAT = 0x10; //IIC bus data output enable(Rx/Tx)
0007b8 e3a00010 MOV r0,#0x10
0007bc e1c11000 BIC r1,r1,r0
0007c0 e5810004 STR r0,[r1,#4]
;;;182 rIICSDADLY = 1; // SDAOUT has 5clock cycle delay
0007c4 e3a00001 MOV r0,#1
0007c8 e1c11000 BIC r1,r1,r0
0007cc e5810010 STR r0,[r1,#0x10]
;;;183
;;;184
;;;185 for(i=0; i<(sizeof(S5X532_TV)/2); i++)
0007d0 e3a04000 MOV r4,#0
|L1.2004|
0007d4 e354005d CMP r4,#0x5d
0007d8 2a00000a BCS |L1.2056|
0007dc ea000001 B |L1.2024|
|L1.2016|
0007e0 e2844001 ADD r4,r4,#1
0007e4 eafffffa B |L1.2004|
;;;186 {
;;;187 Wr_S5X532(SlaveID, S5X532_TV[i][0], S5X532_TV[i][1]);
|L1.2024|
0007e8 e59f0024 LDR r0,|L1.2068|
0007ec e0800084 ADD r0,r0,r4,LSL #1
0007f0 e5d02001 LDRB r2,[r0,#1]
0007f4 e59f0018 LDR r0,|L1.2068|
0007f8 e7d01084 LDRB r1,[r0,r4,LSL #1]
0007fc e3a0005a MOV r0,#0x5a
000800 ebfffffe BL Wr_S5X532
;;;188 }
000804 eafffff5 B |L1.2016|
;;;189
;;;190 Uart_Printf("\nBlock TX Ended...\n");
|L1.2056|
000808 e28f0008 ADR r0,|L1.2072|
00080c ebfffffe BL _printf
;;;191
;;;192 }
000810 e8bd8010 LDMFD sp!,{r4,pc}
|L1.2068|
000814 000000ac DCD ||.constdata$1|| + 172
|L1.2072|
000818 6f6c420a DCB "\nBlo"
00081c 54206b63 DCB "ck T"
000820 6e452058 DCB "X En"
000824 2e646564 DCB "ded."
000828 000a2e2e DCB "..\n\0"
ENDP
S5X532_ReadBlock PROC
;;;195 void S5X532_ReadBlock(void)
;;;196 {
00082c e92d4010 STMFD sp!,{r4,lr}
;;;197 unsigned int i, j, save_E, save_PE, RegAddr, RegData;
;;;198 static U8 rdata[256];
;;;199
;;;200 //Enable ACK, Prescaler IICCLK=PCLK/512, Enable interrupt, Transmit clock value Tx clock=IICCLK/16
;;;201 rIICCON = (1<<7) | (1<<6) | (1<<5) | (0xf);
000830 e3a000ef MOV r0,#0xef
000834 e51f1494 LDR r1,|L1.936|
000838 e5810000 STR r0,[r1,#0]
;;;202
;;;203 rIICADD = 0x10; //2440 slave address = [7:1]
00083c e3a00010 MOV r0,#0x10
000840 e1c11000 BIC r1,r1,r0
000844 e5810008 STR r0,[r1,#8]
;;;204 rIICSTAT = 0x10; //IIC bus data output enable(Rx/Tx)
000848 e3a00010 MOV r0,#0x10
00084c e1c11000 BIC r1,r1,r0
000850 e5810004 STR r0,[r1,#4]
;;;205 rIICSDADLY = 1; // SDAOUT has 5clock cycle delay
000854 e3a00001 MOV r0,#1
000858 e1c11000 BIC r1,r1,r0
00085c e5810010 STR r0,[r1,#0x10]
;;;206
;;;207 for(i=0; i<(sizeof(S5X532_TV)/2);i++)
000860 e3a04000 MOV r4,#0
|L1.2148|
000864 e354005d CMP r4,#0x5d
000868 2a000015 BCS |L1.2244|
00086c ea000001 B |L1.2168|
|L1.2160|
000870 e2844001 ADD r4,r4,#1
000874 eafffffa B |L1.2148|
;;;208 {
;;;209 if(S5X532_TV[i][0] == 0xec)
|L1.2168|
000878 e51f006c LDR r0,|L1.2068|
00087c e7d00084 LDRB r0,[r0,r4,LSL #1]
000880 e35000ec CMP r0,#0xec
000884 1a000007 BNE |L1.2216|
;;;210 Wr_S5X532(SlaveID, S5X532_TV[i][0], S5X532_TV[i][1]);
000888 e51f007c LDR r0,|L1.2068|
00088c e0800084 ADD r0,r0,r4,LSL #1
000890 e5d02001 LDRB r2,[r0,#1]
000894 e51f0088 LDR r0,|L1.2068|
000898 e7d01084 LDRB r1,[r0,r4,LSL #1]
00089c e3a0005a MOV r0,#0x5a
0008a0 ebfffffe BL Wr_S5X532
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -