📄 camif.txt
字号:
00091c e5900080 LDR r0,[r0,#0x80]
000920 e3800004 ORR r0,r0,#4
000924 e3a01448 MOV r1,#0x48000000
000928 e5810080 STR r0,[r1,#0x80]
;;;391 }
00092c e12fff1e BX lr
ENDP
CamPviewIsr PROC
;;;283 void __irq CamPviewIsr(void)
;;;284 {
000930 e92d501f STMFD sp!,{r0-r4,r12,lr}
000934 e24dd004 SUB sp,sp,#4
;;;285 U32 completedFrameIndex;
;;;286
;;;287 ClearPending(BIT_CAMIF_PREVIEW);
000938 e3a00a40 MOV r0,#0x40000
00093c e51f1090 LDR r1,|L1.2228|
000940 e5810000 STR r0,[r1,#0]
000944 e1c10000 BIC r0,r1,r0
000948 e5900010 LDR r0,[r0,#0x10]
00094c e5810010 STR r0,[r1,#0x10]
000950 e1a00001 MOV r0,r1
000954 e5900010 LDR r0,[r0,#0x10]
;;;288 completedFrameIndex=(((rCIPRSTATUS>>26)&0x3)+4-2)%4;
000958 e3a00448 MOV r0,#0x48000000
00095c e5900098 LDR r0,[r0,#0x98]
000960 e3a01002 MOV r1,#2
000964 e0810d20 ADD r0,r1,r0,LSR #26
000968 e2004003 AND r4,r0,#3
;;;289 //Uart_Printf("0x%x, 0x%x, %d\n", rCICOSTATUS&0xe0000000, rCIPRSTATUS&0xc0000000, completedFrameIndex);
;;;290 switch(camPviewStatus) {
00096c e59f011c LDR r0,|L1.2704|
000970 e5900000 LDR r0,[r0,#0] ; camPviewStatus
000974 e3500000 CMP r0,#0
000978 0a000016 BEQ |L1.2520|
00097c e3500001 CMP r0,#1
000980 0a000004 BEQ |L1.2456|
000984 e3500002 CMP r0,#2
000988 0a000007 BEQ |L1.2476|
00098c e3500003 CMP r0,#3
000990 1a000035 BNE |L1.2668|
000994 ea000009 B |L1.2496|
;;;291 case CAM_STOP_ISSUED:
;;;292 _CamPviewSetLastIrq();
|L1.2456|
000998 ebfffffe BL _CamPviewSetLastIrq
;;;293 camPviewStatus=CAM_LASTIRQ_ISSUED;
00099c e3a00002 MOV r0,#2
0009a0 e59f10e8 LDR r1,|L1.2704|
0009a4 e5810000 STR r0,[r1,#0] ; camPviewStatus
;;;294 break;
0009a8 ea000032 B |L1.2680|
;;;295 case CAM_LASTIRQ_ISSUED:
;;;296 _CamPviewStopHw();
|L1.2476|
0009ac ebfffffe BL _CamPviewStopHw
;;;297 camPviewStatus=CAM_LAST_CAPTURING;
0009b0 e3a00003 MOV r0,#3
0009b4 e59f10d4 LDR r1,|L1.2704|
0009b8 e5810000 STR r0,[r1,#0] ; camPviewStatus
;;;298 break;
0009bc ea00002d B |L1.2680|
;;;299 case CAM_LAST_CAPTURING:
;;;300 camPviewStatus=CAM_STOPPED;
|L1.2496|
0009c0 e3a00004 MOV r0,#4
0009c4 e59f10c4 LDR r1,|L1.2704|
0009c8 e5810000 STR r0,[r1,#0] ; camPviewStatus
;;;301 return;
;;;302 case CAM_STARTED:
;;;303 if(camTestMode&CAM_TEST_MODE_PVIEW_POST) {
;;;304 if(camPviewCaptureCount >0) {
;;;305 camPviewDataValid=1;
;;;306 if(postProcessingDone==0 && camPviewCaptureCount>1) {
;;;307 Uart_Printf("ERROR:Post not completed yet.\n");
;;;308 }
;;;309 completedFrameIndex=(((rCIPRSTATUS>>26)&0x3)+4-2)%4;
;;;310 PostStartProcessing(completedFrameIndex);
;;;311 }
;;;312 }
;;;313 else {
;;;314 if(camPviewCaptureCount>0) camPviewDataValid=1;
;;;315 }
;;;316 break;
;;;317 default:
;;;318 Uart_Printf("dummy\n");
;;;319 break;
;;;320 }
;;;321 camPviewCaptureCount++;
;;;322 }
|L1.2508|
0009cc e28dd004 ADD sp,sp,#4
0009d0 e8bd501f LDMFD sp!,{r0-r4,r12,lr}
0009d4 e25ef004 SUBS pc,lr,#4
|L1.2520|
0009d8 e51f0124 LDR r0,|L1.2236| ;303
0009dc e5900000 LDR r0,[r0,#0] ;303 ; camTestMode
0009e0 e3100008 TST r0,#8 ;303
0009e4 0a000018 BEQ |L1.2636| ;303
0009e8 e59f00a4 LDR r0,|L1.2708| ;304
0009ec e5900000 LDR r0,[r0,#0] ;304 ; camPviewCaptureCount
0009f0 e3500000 CMP r0,#0 ;304
0009f4 0a00001b BEQ |L1.2664| ;304
0009f8 e3a00001 MOV r0,#1 ;305
0009fc e59f1094 LDR r1,|L1.2712| ;305
000a00 e5810000 STR r0,[r1,#0] ;305 ; camPviewDataValid
000a04 e51f0144 LDR r0,|L1.2248| ;306
000a08 e5900000 LDR r0,[r0,#0] ;306 ; postProcessingDone
000a0c e3500000 CMP r0,#0 ;306
000a10 1a000005 BNE |L1.2604| ;306
000a14 e59f0078 LDR r0,|L1.2708| ;306
000a18 e5900000 LDR r0,[r0,#0] ;306 ; camPviewCaptureCount
000a1c e3500001 CMP r0,#1 ;306
000a20 9a000001 BLS |L1.2604| ;306
000a24 e24f0f58 ADR r0,|L1.2252| ;307
000a28 ebfffffe BL _printf ;307
|L1.2604|
000a2c e3a00448 MOV r0,#0x48000000 ;309
000a30 e5900098 LDR r0,[r0,#0x98] ;309
000a34 e3a01002 MOV r1,#2 ;309
000a38 e0810d20 ADD r0,r1,r0,LSR #26 ;309
000a3c e2004003 AND r4,r0,#3 ;309
000a40 e1a00004 MOV r0,r4 ;310
000a44 ebfffffe BL PostStartProcessing ;310
000a48 ea000006 B |L1.2664| ;310
|L1.2636|
000a4c e59f0040 LDR r0,|L1.2708| ;314
000a50 e5900000 LDR r0,[r0,#0] ;314 ; camPviewCaptureCount
000a54 e3500000 CMP r0,#0 ;314
000a58 0a000002 BEQ |L1.2664| ;314
000a5c e3a00001 MOV r0,#1 ;314
000a60 e59f1030 LDR r1,|L1.2712| ;314
000a64 e5810000 STR r0,[r1,#0] ;314 ; camPviewDataValid
|L1.2664|
000a68 ea000002 B |L1.2680| ;316
|L1.2668|
000a6c e28f0028 ADR r0,|L1.2716| ;318
000a70 ebfffffe BL _printf ;318
000a74 e1a00000 NOP ;319
|L1.2680|
000a78 e59f0014 LDR r0,|L1.2708| ;321
000a7c e5900000 LDR r0,[r0,#0] ;321 ; camPviewCaptureCount
000a80 e2800001 ADD r0,r0,#1 ;321
000a84 e59f1008 LDR r1,|L1.2708| ;321
000a88 e5810000 STR r0,[r1,#0] ;321 ; camPviewCaptureCount
000a8c eaffffce B |L1.2508|
|L1.2704|
000a90 00000010 DCD ||.bss$2|| + 16
|L1.2708|
000a94 00000008 DCD ||.bss$2|| + 8
|L1.2712|
000a98 00000020 DCD ||.bss$2|| + 32
|L1.2716|
000a9c 6d6d7564 DCB "dumm"
000aa0 00000a79 DCB "y\n\0\0"
ENDP
CamCaptureStart PROC
;;;333 void CamCaptureStart(U32 mode)
;;;334 {
000aa4 e3100440 TST r0,#0x40000000
;;;335
;;;336 if(mode&CAM_CODEC_SCALER_CAPTURE_ENABLE_BIT) {
000aa8 0a000007 BEQ |L1.2764|
;;;337 camCodecStatus=CAM_STARTED;
000aac e3a01000 MOV r1,#0
000ab0 e51f2200 LDR r2,|L1.2232|
000ab4 e5821000 STR r1,[r2,#0] ; camCodecStatus
;;;338 rCICOSCCTRL|=CAM_CODEC_SACLER_START_BIT;
000ab8 e3a01448 MOV r1,#0x48000000
000abc e5911058 LDR r1,[r1,#0x58]
000ac0 e3811c80 ORR r1,r1,#0x8000
000ac4 e3a02448 MOV r2,#0x48000000
000ac8 e5821058 STR r1,[r2,#0x58]
;;;339 }
;;;340
;;;341 if(mode&CAM_PVIEW_SCALER_CAPTURE_ENABLE_BIT) {
|L1.2764|
000acc e3100580 TST r0,#0x20000000
000ad0 0a000007 BEQ |L1.2804|
;;;342 camPviewStatus=CAM_STARTED;
000ad4 e3a01000 MOV r1,#0
000ad8 e51f2050 LDR r2,|L1.2704|
000adc e5821000 STR r1,[r2,#0] ; camPviewStatus
;;;343 rCIPRSCCTRL|=CAM_PVIEW_SACLER_START_BIT;
000ae0 e3a01448 MOV r1,#0x48000000
000ae4 e591108c LDR r1,[r1,#0x8c]
000ae8 e3811c80 ORR r1,r1,#0x8000
000aec e3a02448 MOV r2,#0x48000000
000af0 e582108c STR r1,[r2,#0x8c]
;;;344 }
;;;345
;;;346 rCIIMGCPT|=CAM_CAMIF_GLOBAL_CAPTURE_ENABLE_BIT|mode;
|L1.2804|
000af4 e3a01448 MOV r1,#0x48000000
000af8 e59110a0 LDR r1,[r1,#0xa0]
000afc e1811000 ORR r1,r1,r0
000b00 e3811480 ORR r1,r1,#0x80000000
000b04 e3a02448 MOV r2,#0x48000000
000b08 e58210a0 STR r1,[r2,#0xa0]
;;;347 }
000b0c e12fff1e BX lr
ENDP
CamCaptureStop PROC
;;;349 void CamCaptureStop(void)
;;;350 {
000b10 e3a00001 MOV r0,#1
;;;351 camCodecStatus=CAM_STOP_ISSUED;
000b14 e51f1264 LDR r1,|L1.2232|
000b18 e5810000 STR r0,[r1,#0] ; camCodecStatus
;;;352 camPviewStatus=CAM_STOP_ISSUED;
000b1c e3a00001 MOV r0,#1
000b20 e51f1098 LDR r1,|L1.2704|
000b24 e5810000 STR r0,[r1,#0] ; camPviewStatus
;;;353 }
000b28 e12fff1e BX lr
ENDP
SetCAMClockDivider PROC
;;;442 void SetCAMClockDivider(int divn)
;;;443 {
000b2c e3a01440 MOV r1,#0x40000000
;;;444 rCLKDIVN= (rCLKDIVN & ~(0xf<<8))|(divn<<8);
000b30 e5911028 LDR r1,[r1,#0x28]
000b34 e3c11ef0 BIC r1,r1,#0xf00
000b38 e1811400 ORR r1,r1,r0,LSL #8
000b3c e3a02440 MOV r2,#0x40000000
000b40 e5821028 STR r1,[r2,#0x28]
;;;445 }
000b44 e12fff1e BX lr
ENDP
CalculatePrescalerRatioShift PROC
;;;664 void CalculatePrescalerRatioShift(U32 SrcSize, U32 DstSize, U32 *ratio,U32 *shift)
;;;665 {
000b48 e92d41f0 STMFD sp!,{r4-r8,lr}
000b4c e1a04000 MOV r4,r0
000b50 e1a05001 MOV r5,r1
000b54 e1a06002 MOV r6,r2
000b58 e1a07003 MOV r7,r3
;;;666 if(SrcSize>=64*DstSize) {
000b5c e1540305 CMP r4,r5,LSL #6
000b60 3a000008 BCC |L1.2952|
;;;667 Uart_Printf("ERROR: out of the prescaler range: SrcSize/DstSize = %d(< 64)\n",SrcSize/DstSize);
000b64 e1a01004 MOV r1,r4
000b68 e1a00005 MOV r0,r5
000b6c ebfffffe BL __rt_udiv
000b70 e1a08000 MOV r8,r0
000b74 e1a01000 MOV r1,r0
000b78 e28f00a8 ADR r0,|L1.3112|
000b7c ebfffffe BL _printf
;;;668 while(1);
000b80 e1a00000 NOP
|L1.2948|
000b84 eafffffe B |L1.2948|
;;;669 }
;;;670 else if(SrcSize>=32*DstSize) {
|L1.2952|
000b88 e1540285 CMP r4,r5,LSL #5
000b8c 3a000004 BCC |L1.2980|
;;;671 *ratio=32;
000b90 e3a00020 MOV r0,#0x20
000b94 e5860000 STR r0,[r6,#0]
;;;672 *shift=5;
000b98 e3a00005 MOV r0,#5
000b9c e5870000 STR r0,[r7,#0]
000ba0 ea00001f B |L1.3108|
;;;673 }
;;;674 else if(SrcSize>=16*DstSize) {
|L1.2980|
000ba4 e1540205 CMP r4,r5,LSL #4
000ba8 3a000004 BCC |L1.3008|
;;;675 *ratio=16;
000bac e3a00010 MOV r0,#0x10
000bb0 e5860000 STR r0,[r6,#0]
;;;676 *shift=4;
000bb4 e3a00004 MOV r0,#4
000bb8 e5870000 STR r0,[r7,#0]
000bbc ea000018 B |L1.3108|
;;;677 }
;;;678 else if(SrcSize>=8*DstSize) {
|L1.3008|
000bc0 e1540185 CMP r4,r5,LSL #3
000bc4 3a000004 BCC |L1.3036|
;;;679 *ratio=8;
000bc8 e3a00008 MOV r0,#8
000bcc e5860000 STR r0,[r6,#0]
;;;680 *shift=3;
000bd0 e3a00003 MOV r0,#3
000bd4 e5870000 STR r0,[r7,#0]
000bd8 ea000011 B |L1.3108|
;;;681 }
;;;682 else if(SrcSize>=4*DstSize) {
|L1.3036|
000bdc e1540105 CMP r4,r5,LSL #2
000be0 3a000004 BCC |L1.3064|
;;;683 *ratio=4;
000be4 e3a00004 MOV r0,#4
000be8 e5860000 STR r0,[r6,#0]
;;;684 *shift=2;
000bec e3a00002 MOV r0,#2
000bf0 e5870000 STR r0,[r7,#0]
000bf4 ea00000a B |L1.3108|
;;;685 }
;;;686 else if(SrcSize>=2*DstSize) {
|L1.3064|
000bf8 e1540085 CMP r4,r5,LSL #1
000bfc 3a000004 BCC |L1.3092|
;;;687 *ratio=2;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -