📄 ov7670.txt
字号:
; generated by ARM C/C++ Compiler, 4.1 [Build 481]
; commandline ArmCC [--debug -c --asm --interleave -o.\OBJ\ov7670.o --depend=.\OBJ\ov7670.d --cpu=Cortex-M3 --apcs=interwork -O0 -I..\Demo -I.\HARDWARE\EXTI -I.\HARDWARE\KEY -I.\HARDWARE\LCD -I.\HARDWARE\LED -I.\HARDWARE\TIMER -I.\HARDWARE\WDG -I.\SYSTEM\delay -I.\SYSTEM\sys -I.\SYSTEM\usart -I.\USER -IC:\Keil\ARM\INC -IC:\Keil\ARM\INC\ST\STM32F10x --omf_browse=.\OBJ\ov7670.crf USER\ov7670.c]
THUMB
AREA ||.text||, CODE, READONLY, ALIGN=2
wrOV7670Reg PROC
;;;188 //返回:1-成功 0-失败
;;;189 uchar wrOV7670Reg(uchar regID, uchar regDat)
000000 b570 PUSH {r4-r6,lr}
;;;190 {
000002 4605 MOV r5,r0
000004 460c MOV r4,r1
;;;191 startSCCB();
000006 f7fffffe BL startSCCB
;;;192 if(0==SCCBwriteByte(0x42))
00000a 2042 MOVS r0,#0x42
00000c f7fffffe BL SCCBwriteByte
000010 b918 CBNZ r0,|L1.26|
;;;193 {
;;;194 stopSCCB();
000012 f7fffffe BL stopSCCB
;;;195 return(0);
000016 2000 MOVS r0,#0
|L1.24|
;;;196 }
;;;197 Delay_nUS(100);
;;;198 if(0==SCCBwriteByte(regID))
;;;199 {
;;;200 stopSCCB();
;;;201 return(0);
;;;202 }
;;;203 Delay_nUS(100);
;;;204 if(0==SCCBwriteByte(regDat))
;;;205 {
;;;206 stopSCCB();
;;;207 return(0);
;;;208 }
;;;209 stopSCCB();
;;;210
;;;211 return(1);
;;;212 }
000018 bd70 POP {r4-r6,pc}
|L1.26|
00001a 2064 MOVS r0,#0x64 ;197
00001c f7fffffe BL delay_us
000020 4628 MOV r0,r5 ;198
000022 f7fffffe BL SCCBwriteByte
000026 b918 CBNZ r0,|L1.48|
000028 f7fffffe BL stopSCCB
00002c 2000 MOVS r0,#0 ;201
00002e e7f3 B |L1.24|
|L1.48|
000030 2064 MOVS r0,#0x64 ;203
000032 f7fffffe BL delay_us
000036 4620 MOV r0,r4 ;204
000038 f7fffffe BL SCCBwriteByte
00003c b918 CBNZ r0,|L1.70|
00003e f7fffffe BL stopSCCB
000042 2000 MOVS r0,#0 ;207
000044 e7e8 B |L1.24|
|L1.70|
000046 f7fffffe BL stopSCCB
00004a 2001 MOVS r0,#1 ;211
00004c e7e4 B |L1.24|
;;;213 ////////////////////////////
ENDP
rdOV7670Reg PROC
;;;215 //返回:1-成功 0-失败
;;;216 uchar rdOV7670Reg(uchar regID, uchar *regDat)
00004e b570 PUSH {r4-r6,lr}
;;;217 {
000050 4605 MOV r5,r0
000052 460c MOV r4,r1
;;;218 //通过写操作设置寄存器地址
;;;219 startSCCB();
000054 f7fffffe BL startSCCB
;;;220 if(0==SCCBwriteByte(0x42))
000058 2042 MOVS r0,#0x42
00005a f7fffffe BL SCCBwriteByte
00005e b918 CBNZ r0,|L1.104|
;;;221 {
;;;222 stopSCCB();
000060 f7fffffe BL stopSCCB
;;;223 return(0);
000064 2000 MOVS r0,#0
|L1.102|
;;;224 }
;;;225 Delay_nUS(100);
;;;226 if(0==SCCBwriteByte(regID))
;;;227 {
;;;228 stopSCCB();
;;;229 return(0);
;;;230 }
;;;231 stopSCCB();
;;;232
;;;233 Delay_nUS(100);
;;;234
;;;235 //设置寄存器地址后,才是读
;;;236 startSCCB();
;;;237 if(0==SCCBwriteByte(0x43))
;;;238 {
;;;239 stopSCCB();
;;;240 return(0);
;;;241 }
;;;242 Delay_nUS(100);
;;;243 *regDat=SCCBreadByte();
;;;244 noAck();
;;;245 stopSCCB();
;;;246 return(1);
;;;247 }
000066 bd70 POP {r4-r6,pc}
|L1.104|
000068 2064 MOVS r0,#0x64 ;225
00006a f7fffffe BL delay_us
00006e 4628 MOV r0,r5 ;226
000070 f7fffffe BL SCCBwriteByte
000074 b918 CBNZ r0,|L1.126|
000076 f7fffffe BL stopSCCB
00007a 2000 MOVS r0,#0 ;229
00007c e7f3 B |L1.102|
|L1.126|
00007e f7fffffe BL stopSCCB
000082 2064 MOVS r0,#0x64 ;233
000084 f7fffffe BL delay_us
000088 f7fffffe BL startSCCB
00008c 2043 MOVS r0,#0x43 ;237
00008e f7fffffe BL SCCBwriteByte
000092 b918 CBNZ r0,|L1.156|
000094 f7fffffe BL stopSCCB
000098 2000 MOVS r0,#0 ;240
00009a e7e4 B |L1.102|
|L1.156|
00009c 2064 MOVS r0,#0x64 ;242
00009e f7fffffe BL delay_us
0000a2 f7fffffe BL SCCBreadByte
0000a6 7020 STRB r0,[r4,#0] ;243
0000a8 f7fffffe BL noAck
0000ac f7fffffe BL stopSCCB
0000b0 2001 MOVS r0,#1 ;246
0000b2 e7d8 B |L1.102|
;;;248
ENDP
OV7670_init PROC
;;;253 //返回1成功,返回0失败
;;;254 uchar OV7670_init(void)
0000b4 b538 PUSH {r3-r5,lr}
;;;255 {
;;;256 uchar temp;
;;;257
;;;258 uint i=0;
0000b6 2400 MOVS r4,#0
;;;259
;;;260
;;;261 InitSCCB();//io init..
0000b8 f7fffffe BL InitSCCB
;;;262
;;;263 temp=0x80;
0000bc 2080 MOVS r0,#0x80
0000be 9000 STR r0,[sp,#0]
;;;264 if(0==wrOV7670Reg(0x12, temp)) //Reset SCCB
0000c0 f89d1000 LDRB r1,[sp,#0]
0000c4 2012 MOVS r0,#0x12
0000c6 f7fffffe BL wrOV7670Reg
0000ca b908 CBNZ r0,|L1.208|
;;;265 {
;;;266 return 0 ;
0000cc 2000 MOVS r0,#0
|L1.206|
;;;267
;;;268 }
;;;269 while(0)
;;;270 {
;;;271 rdOV7670Reg(0x1C, &temp);
;;;272 UART_Transmit(temp);
;;;273 Delay_nMS(100);
;;;274 }
;;;275 Delay_nMS(10);
;;;276
;;;277 for(i=0;i<CHANGE_REG_NUM;i++)
;;;278 {
;;;279 if( 0 == wrOV7670Reg (change_reg[i][0],change_reg[i][1]) )
;;;280 {
;;;281 return 0;
;;;282 }
;;;283 }
;;;284
;;;285 return 0x01; //ok
;;;286
;;;287
;;;288 }
0000ce bd38 POP {r3-r5,pc}
|L1.208|
0000d0 bf00 NOP ;269
0000d2 bf00 NOP ;269
0000d4 200a MOVS r0,#0xa ;275
0000d6 f7fffffe BL delay_ms
0000da 2400 MOVS r4,#0 ;277
0000dc e00e B |L1.252|
|L1.222|
0000de 4a09 LDR r2,|L1.260|
0000e0 eb0202c4 ADD r2,r2,r4,LSL #3 ;279
0000e4 6852 LDR r2,[r2,#4] ;279
0000e6 b2d1 UXTB r1,r2 ;279
0000e8 4a06 LDR r2,|L1.260|
0000ea f8522034 LDR r2,[r2,r4,LSL #3] ;279
0000ee b2d0 UXTB r0,r2 ;279
0000f0 f7fffffe BL wrOV7670Reg
0000f4 b908 CBNZ r0,|L1.250|
0000f6 2000 MOVS r0,#0 ;281
0000f8 e7e9 B |L1.206|
|L1.250|
0000fa 1c64 ADDS r4,r4,#1 ;277
|L1.252|
0000fc 2cb0 CMP r4,#0xb0 ;277
0000fe d3ee BCC |L1.222|
000100 2001 MOVS r0,#1 ;285
000102 e7e4 B |L1.206|
;;;289
ENDP
|L1.260|
DCD change_reg
AREA ||.constdata||, DATA, READONLY, ALIGN=2
change_reg
DCD 0x0000003a
DCD 0x00000004
DCD 0x00000040
DCD 0x000000d0
DCD 0x00000012
DCD 0x00000014
DCD 0x00000032
DCD 0x00000080
DCD 0x00000017
DCD 0x00000016
DCD 0x00000018
DCD 0x00000004
DCD 0x00000019
DCD 0x00000002
DCD 0x0000001a
DCD 0x0000007b
DCD 0x00000003
DCD 0x00000006
DCD 0x0000000c
DCD 0x00000000
DCD 0x0000003e
DCD 0x00000000
DCD 0x00000070
DCD 0x00000000
DCD 0x00000071
DCD 0x00000000
DCD 0x00000072
DCD 0x00000011
DCD 0x00000073
DCD 0x00000000
DCD 0x000000a2
DCD 0x00000002
DCD 0x00000011
DCD 0x00000002
DCD 0x0000007a
DCD 0x00000020
DCD 0x0000007b
DCD 0x0000001c
DCD 0x0000007c
DCD 0x00000028
DCD 0x0000007d
DCD 0x0000003c
DCD 0x0000007e
DCD 0x00000055
DCD 0x0000007f
DCD 0x00000068
DCD 0x00000080
DCD 0x00000076
DCD 0x00000081
DCD 0x00000080
DCD 0x00000082
DCD 0x00000088
DCD 0x00000083
DCD 0x0000008f
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -