📄 camproset.txt
字号:
; generated by ARM C Compiler, ADS1.2 [Build 805]
; commandline [-errors .\err\camproset.err -O0 -asm -g+ -cpu ARM920T -fs "-IC:\Program Files\ARM\ADSv1_2\INCLUDE"]
CODE32
AREA ||.text||, CODE, READONLY
Wr_CamIIC PROC
;;;126 void Wr_CamIIC(U32 slvAddr, U32 addr, U8 data)
;;;127 {
|L1.0|
000000 e3a03001 MOV r3,#1
;;;128 _CAMiicMode = CAMWRDATA;
000004 e59fc0b0 LDR r12,|L1.188|
000008 e58c3000 STR r3,[r12,#0] ; _CAMiicMode
;;;129 _CAMiicPt = 0;
00000c e3a03000 MOV r3,#0
000010 e59fc0a8 LDR r12,|L1.192|
000014 e58c3000 STR r3,[r12,#0] ; _CAMiicPt
;;;130 _CAMiicData[0] = (U8)addr;
000018 e59f30a4 LDR r3,|L1.196|
00001c e5c31000 STRB r1,[r3,#0] ; _CAMiicData
;;;131 _CAMiicData[1] = data;
000020 e59f309c LDR r3,|L1.196|
000024 e5c32001 STRB r2,[r3,#1] ; _CAMiicData
;;;132 _CAMiicDataCount = 2;
000028 e3a03002 MOV r3,#2
00002c e59fc094 LDR r12,|L1.200|
000030 e58c3000 STR r3,[r12,#0] ; _CAMiicDataCount
;;;133
;;;134 rIICDS = slvAddr; //0x5a: S5X532 Slave ID
000034 e3a03454 MOV r3,#0x54000000
000038 e583000c STR r0,[r3,#0xc]
;;;135 rIICSTAT = 0xf0; //Start Master TX Condition
00003c e3a030f0 MOV r3,#0xf0
000040 e3a0c454 MOV r12,#0x54000000
000044 e58c3004 STR r3,[r12,#4]
;;;136 rIICCON &= ~(1<<4); //Clearing the pending bit isn't needed because the pending bit has been cleared.
000048 e3a03454 MOV r3,#0x54000000
00004c e5933000 LDR r3,[r3,#0]
000050 e3c33010 BIC r3,r3,#0x10
000054 e3a0c454 MOV r12,#0x54000000
000058 e58c3000 STR r3,[r12,#0]
;;;137
;;;138 while(_CAMiicDataCount!=-1);
00005c e1a00000 NOP
|L1.96|
000060 e59f3060 LDR r3,|L1.200|
000064 e5933000 LDR r3,[r3,#0] ; _CAMiicDataCount
000068 e3730001 CMN r3,#1
00006c 1afffffb BNE |L1.96|
;;;139 }
000070 e1a0f00e MOV pc,lr
ENDP
Camera_WriteBlock PROC
;;;274 void Camera_WriteBlock(void)
;;;275 {
000074 e92d4010 STMFD sp!,{r4,lr}
;;;276 unsigned int i, j, save_E, save_PE, RegAddr, RegData;
;;;277 static U8 rdata[256];
;;;278
;;;279 #if USED_CAM_TYPE==CAM_OV7620
;;;280 for(i=0; i<(sizeof(Ov7620_YCbCr8bit)/2); i++)
;;;281 Wr_CamIIC(CAM_ID, Ov7620_YCbCr8bit[i][0], Ov7620_YCbCr8bit[i][1]);
;;;282 #elif USED_CAM_TYPE==CAM_S5X532
;;;283 for(i=0; i<(sizeof(S5X532_YCbCr8bit)/2); i++)
000078 e3a04000 MOV r4,#0
|L1.124|
00007c e354005e CMP r4,#0x5e
000080 2a00000a BCS |L1.176|
000084 ea000001 B |L1.144|
|L1.136|
000088 e2844001 ADD r4,r4,#1
00008c eafffffa B |L1.124|
;;;284 Wr_CamIIC(CAM_ID, S5X532_YCbCr8bit[i][0], S5X532_YCbCr8bit[i][1]);
|L1.144|
000090 e59f0034 LDR r0,|L1.204|
000094 e0800084 ADD r0,r0,r4,LSL #1
000098 e5d02001 LDRB r2,[r0,#1]
00009c e59f0028 LDR r0,|L1.204|
0000a0 e7d01084 LDRB r1,[r0,r4,LSL #1]
0000a4 e3a0005a MOV r0,#0x5a
0000a8 ebfffffe BL Wr_CamIIC
0000ac eafffff5 B |L1.136|
;;;285 #elif USED_CAM_TYPE==CAM_S5X3A1
;;;286 for(i=0; i<(sizeof(S5X3A1_YCbCr8bit)/2); i++)
;;;287 Wr_CamIIC(CAM_ID, S5X3A1_YCbCr8bit[i][0], S5X3A1_YCbCr8bit[i][1]);
;;;288 #elif USED_CAM_TYPE==CAM_AU70H
;;;289 for(i=0; i<(sizeof(Au70h)/2); i++)
;;;290 Wr_CamIIC(CAM_ID, Au70h[i][0], Au70h[i][1]);
;;;291 #endif
;;;292
;;;293 Uart_Printf("\nBlock TX Ended...\n");
|L1.176|
0000b0 e28f0018 ADR r0,|L1.208|
0000b4 ebfffffe BL Uart_Printf
;;;294 }
0000b8 e8bd8010 LDMFD sp!,{r4,pc}
|L1.188|
0000bc 00000330 DCD ||.bss$2|| + 816
|L1.192|
0000c0 00000334 DCD ||.bss$2|| + 820
|L1.196|
0000c4 00000308 DCD ||.bss$2|| + 776
|L1.200|
0000c8 00000328 DCD ||.bss$2|| + 808
|L1.204|
0000cc 000001e4 DCD ||.constdata$1|| + 484
|L1.208|
0000d0 6f6c420a DCB "\nBlo"
0000d4 54206b63 DCB "ck T"
0000d8 6e452058 DCB "X En"
0000dc 2e646564 DCB "ded."
0000e0 000a2e2e DCB "..\n\0"
ENDP
Cam_IICInt PROC
;;;170 void __irq Cam_IICInt(void)
;;;171 {
0000e4 e92d503f STMFD sp!,{r0-r5,r12,lr}
;;;172 U32 iicSt,i;
;;;173
;;;174 ClearPending(BIT_IIC);
0000e8 e3a00680 MOV r0,#0x8000000
0000ec e3a0144a MOV r1,#0x4a000000
0000f0 e5810000 STR r0,[r1,#0]
0000f4 e3a00680 MOV r0,#0x8000000
0000f8 e3a0144a MOV r1,#0x4a000000
0000fc e5810010 STR r0,[r1,#0x10]
000100 e3a0044a MOV r0,#0x4a000000
000104 e5900010 LDR r0,[r0,#0x10]
;;;175 iicSt = rIICSTAT;
000108 e3a00454 MOV r0,#0x54000000
00010c e5900004 LDR r0,[r0,#4]
000110 e1a05000 MOV r5,r0
;;;176 rINTMSK |= BIT_IIC;
000114 e3a0044a MOV r0,#0x4a000000
000118 e5900008 LDR r0,[r0,#8]
00011c e3800680 ORR r0,r0,#0x8000000
000120 e3a0144a MOV r1,#0x4a000000
000124 e5810008 STR r0,[r1,#8]
;;;177
;;;178 if(iicSt & 0x8){} //When bus arbitration is failed.
000128 e1a00000 NOP
;;;179 if(iicSt & 0x4){} //When a slave address is matched with IICADD
00012c e1a00000 NOP
;;;180 if(iicSt & 0x2){} //When a slave address is 0000000b
000130 e1a00000 NOP
;;;181 if(iicSt & 0x1){} //When ACK isn't received
000134 e1a00000 NOP
;;;182
;;;183 switch(_CAMiicMode) {
000138 e51f0084 LDR r0,|L1.188|
00013c e5900000 LDR r0,[r0,#0] ; _CAMiicMode
000140 e3500001 CMP r0,#1
000144 0a000039 BEQ |L1.560|
000148 e3500003 CMP r0,#3
00014c 0a000002 BEQ |L1.348|
000150 e3500004 CMP r0,#4
000154 1a000083 BNE |L1.872|
000158 ea00005b B |L1.716|
;;;184 case CAMRDDATA:
;;;185 if((_CAMiicDataCount--)==0) {
|L1.348|
00015c e51f009c LDR r0,|L1.200|
000160 e5900000 LDR r0,[r0,#0] ; _CAMiicDataCount
000164 e2401001 SUB r1,r0,#1
000168 e51f00a8 LDR r0,|L1.200|
00016c e5902000 LDR r2,[r0,#0] ; _CAMiicDataCount
000170 e5801000 STR r1,[r0,#0] ; _CAMiicDataCount
000174 e3520000 CMP r2,#0
000178 1a000013 BNE |L1.460|
;;;186 _CAMiicData[_CAMiicPt++] = rIICDS;
00017c e3a00454 MOV r0,#0x54000000
000180 e590100c LDR r1,[r0,#0xc]
000184 e51f00cc LDR r0,|L1.192|
000188 e5900000 LDR r0,[r0,#0] ; _CAMiicPt
00018c e2802001 ADD r2,r0,#1
000190 e51f30d8 LDR r3,|L1.192|
000194 e5832000 STR r2,[r3,#0] ; _CAMiicPt
000198 e51f20dc LDR r2,|L1.196|
00019c e7c21000 STRB r1,[r2,r0]
;;;187
;;;188 rIICSTAT = 0x90; //Stop MasRx condition
0001a0 e3a00090 MOV r0,#0x90
0001a4 e3a01454 MOV r1,#0x54000000
0001a8 e5810004 STR r0,[r1,#4]
;;;189 rIICCON &= ~(1<<4); //Resumes IIC operation.
0001ac e3a00454 MOV r0,#0x54000000
0001b0 e5900000 LDR r0,[r0,#0]
0001b4 e3c00010 BIC r0,r0,#0x10
0001b8 e3a01454 MOV r1,#0x54000000
0001bc e5810000 STR r0,[r1,#0]
;;;190 Delay(1); //Wait until stop condtion is in effect., Too long time... # need the time 2442:Delay(1), 24A0: Delay(2)
0001c0 e3a00001 MOV r0,#1
0001c4 ebfffffe BL Delay
;;;191 //The pending bit will not be set after issuing stop condition.
;;;192 break;
0001c8 ea000067 B |L1.876|
;;;193 }
;;;194 _CAMiicData[_CAMiicPt++] = rIICDS; //The last data has to be read with no ack.
|L1.460|
0001cc e3a00454 MOV r0,#0x54000000
0001d0 e590100c LDR r1,[r0,#0xc]
0001d4 e51f011c LDR r0,|L1.192|
0001d8 e5900000 LDR r0,[r0,#0] ; _CAMiicPt
0001dc e2802001 ADD r2,r0,#1
0001e0 e51f3128 LDR r3,|L1.192|
0001e4 e5832000 STR r2,[r3,#0] ; _CAMiicPt
0001e8 e51f212c LDR r2,|L1.196|
0001ec e7c21000 STRB r1,[r2,r0]
;;;195
;;;196 if((_CAMiicDataCount)==0)
0001f0 e51f0130 LDR r0,|L1.200|
0001f4 e5900000 LDR r0,[r0,#0] ; _CAMiicDataCount
0001f8 e3500000 CMP r0,#0
0001fc 1a000005 BNE |L1.536|
;;;197 rIICCON &= ~((1<<7)|(1<<4)); //Resumes IIC operation with NOACK in case of S5X532 Cameara
000200 e3a00454 MOV r0,#0x54000000
000204 e5900000 LDR r0,[r0,#0]
000208 e3c00090 BIC r0,r0,#0x90
00020c e3a01454 MOV r1,#0x54000000
000210 e5810000 STR r0,[r1,#0]
000214 ea000004 B |L1.556|
;;;198 // rIICCON = 0x6f; //Resumes IIC operation with NOACK in case of S5X532 Cameara
;;;199 else
;;;200 rIICCON &= ~(1<<4); //Resumes IIC operation with ACK
|L1.536|
000218 e3a00454 MOV r0,#0x54000000
00021c e5900000 LDR r0,[r0,#0]
000220 e3c00010 BIC r0,r0,#0x10
000224 e3a01454 MOV r1,#0x54000000
000228 e5810000 STR r0,[r1,#0]
;;;201 break;
|L1.556|
00022c ea00004e B |L1.876|
;;;202 case CAMWRDATA:
;;;203 if((_CAMiicDataCount--)==0) {
|L1.560|
000230 e51f0170 LDR r0,|L1.200|
000234 e5900000 LDR r0,[r0,#0] ; _CAMiicDataCount
000238 e2401001 SUB r1,r0,#1
00023c e51f017c LDR r0,|L1.200|
000240 e5902000 LDR r2,[r0,#0] ; _CAMiicDataCount
000244 e5801000 STR r1,[r0,#0] ; _CAMiicDataCount
000248 e3520000 CMP r2,#0
00024c 1a00000a BNE |L1.636|
;;;204 rIICSTAT = 0xd0; //stop MasTx condition
000250 e3a000d0 MOV r0,#0xd0
000254 e3a01454 MOV r1,#0x54000000
000258 e5810004 STR r0,[r1,#4]
;;;205 rIICCON &= ~(1<<4); //resumes IIC operation.
00025c e3a00454 MOV r0,#0x54000000
000260 e5900000 LDR r0,[r0,#0]
000264 e3c00010 BIC r0,r0,#0x10
000268 e3a01454 MOV r1,#0x54000000
00026c e5810000 STR r0,[r1,#0]
;;;206 Delay(1); //wait until stop condtion is in effect. # need the time 2442:Delay(1), 24A0: Delay(2)
000270 e3a00001 MOV r0,#1
000274 ebfffffe BL Delay
;;;207 //The pending bit will not be set after issuing stop condition.
;;;208 break;
000278 ea00003b B |L1.876|
;;;209 }
;;;210 rIICDS = _CAMiicData[_CAMiicPt++]; //_iicData[0] has dummy.
|L1.636|
00027c e51f01c4 LDR r0,|L1.192|
000280 e5900000 LDR r0,[r0,#0] ; _CAMiicPt
000284 e2801001 ADD r1,r0,#1
000288 e51f21d0 LDR r2,|L1.192|
00028c e5821000 STR r1,[r2,#0] ; _CAMiicPt
000290 e51f11d4 LDR r1,|L1.196|
000294 e7d10000 LDRB r0,[r1,r0]
000298 e3a01454 MOV r1,#0x54000000
00029c e581000c STR r0,[r1,#0xc]
;;;211 for(i=0;i<10;i++); //for setup time until rising edge of IICSCL
0002a0 e3a04000 MOV r4,#0
|L1.676|
0002a4 e354000a CMP r4,#0xa
0002a8 2a000001 BCS |L1.692|
0002ac e2844001 ADD r4,r4,#1
0002b0 eafffffb B |L1.676|
;;;212 rIICCON &= ~(1<<4); //resumes IIC operation.
|L1.692|
0002b4 e3a00454 MOV r0,#0x54000000
0002b8 e5900000 LDR r0,[r0,#0]
0002bc e3c00010 BIC r0,r0,#0x10
0002c0 e3a01454 MOV r1,#0x54000000
0002c4 e5810000 STR r0,[r1,#0]
;;;213 break;
0002c8 ea000027 B |L1.876|
;;;214 case CAMSETRDADDR: //Uart_Printf("[S%d]",_iicDataCount);
;;;215 if((_CAMiicDataCount--)==0) {
|L1.716|
0002cc e51f020c LDR r0,|L1.200|
0002d0 e5900000 LDR r0,[r0,#0] ; _CAMiicDataCount
0002d4 e2401001 SUB r1,r0,#1
0002d8 e51f0218 LDR r0,|L1.200|
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -