📄 camif.txt
字号:
000928 4f525245 DCB "ERRO"
00092c 6f503a52 DCB "R:Po"
000930 6e207473 DCB "st n"
000934 6320746f DCB "ot c"
000938 6c706d6f DCB "ompl"
00093c 64657465 DCB "eted"
000940 74657920 DCB " yet"
000944 00000a2e DCB ".\n\0\0"
ENDP
_CamPviewStopHw PROC
;;;400 void _CamPviewStopHw(void)
;;;401 {
000948 e3a00448 MOV r0,#0x48000000
;;;402 rCIPRSCCTRL&=~CAM_PVIEW_SACLER_START_BIT; //stop preview scaler.
00094c e590008c LDR r0,[r0,#0x8c]
000950 e3c00c80 BIC r0,r0,#0x8000
000954 e3a01448 MOV r1,#0x48000000
000958 e581008c STR r0,[r1,#0x8c]
;;;403 rCIIMGCPT&=~(CAM_CAMIF_GLOBAL_CAPTURE_ENABLE_BIT|CAM_PVIEW_SCALER_CAPTURE_ENABLE_BIT); //stop capturing for preview scaler and global capture.
00095c e3a00448 MOV r0,#0x48000000
000960 e59000a0 LDR r0,[r0,#0xa0]
000964 e3c004a0 BIC r0,r0,#0xa0000000
000968 e3a01448 MOV r1,#0x48000000
00096c e58100a0 STR r0,[r1,#0xa0]
;;;404 }
000970 e12fff1e BX lr
ENDP
_CamPviewSetLastIrq PROC
;;;395 void _CamPviewSetLastIrq(void)
;;;396 {
000974 e3a00448 MOV r0,#0x48000000
;;;397 rCIPRCTRL|=(1<<2); // Bit of LastIRQEn_Pr is cleared automatically.
000978 e5900080 LDR r0,[r0,#0x80]
00097c e3800004 ORR r0,r0,#4
000980 e3a01448 MOV r1,#0x48000000
000984 e5810080 STR r0,[r1,#0x80]
;;;398 }
000988 e12fff1e BX lr
ENDP
CamPviewIsr PROC
;;;290 void __irq CamPviewIsr(void)
;;;291 {
00098c e92d501f STMFD sp!,{r0-r4,r12,lr}
000990 e24dd004 SUB sp,sp,#4
;;;292 U32 completedFrameIndex;
;;;293
;;;294 ClearPending(BIT_CAMIF_PREVIEW);
000994 e3a00a40 MOV r0,#0x40000
000998 e51f1090 LDR r1,|L1.2320|
00099c e5810000 STR r0,[r1,#0]
0009a0 e1c10000 BIC r0,r1,r0
0009a4 e5900010 LDR r0,[r0,#0x10]
0009a8 e5810010 STR r0,[r1,#0x10]
0009ac e1a00001 MOV r0,r1
0009b0 e5900010 LDR r0,[r0,#0x10]
;;;295 completedFrameIndex=(((rCIPRSTATUS>>26)&0x3)+4-2)%4;
0009b4 e3a00448 MOV r0,#0x48000000
0009b8 e5900098 LDR r0,[r0,#0x98]
0009bc e3a01002 MOV r1,#2
0009c0 e0810d20 ADD r0,r1,r0,LSR #26
0009c4 e2004003 AND r4,r0,#3
;;;296 //Uart_Printf("0x%x, 0x%x, %d\n", rCICOSTATUS&0xe0000000, rCIPRSTATUS&0xc0000000, completedFrameIndex);
;;;297 switch(camPviewStatus) {
0009c8 e59f011c LDR r0,|L1.2796|
0009cc e5900000 LDR r0,[r0,#0] ; camPviewStatus
0009d0 e3500000 CMP r0,#0
0009d4 0a000016 BEQ |L1.2612|
0009d8 e3500001 CMP r0,#1
0009dc 0a000004 BEQ |L1.2548|
0009e0 e3500002 CMP r0,#2
0009e4 0a000007 BEQ |L1.2568|
0009e8 e3500003 CMP r0,#3
0009ec 1a000035 BNE |L1.2760|
0009f0 ea000009 B |L1.2588|
;;;298 case CAM_STOP_ISSUED:
;;;299 _CamPviewSetLastIrq();
|L1.2548|
0009f4 ebfffffe BL _CamPviewSetLastIrq
;;;300 camPviewStatus=CAM_LASTIRQ_ISSUED;
0009f8 e3a00002 MOV r0,#2
0009fc e59f10e8 LDR r1,|L1.2796|
000a00 e5810000 STR r0,[r1,#0] ; camPviewStatus
;;;301 break;
000a04 ea000032 B |L1.2772|
;;;302 case CAM_LASTIRQ_ISSUED:
;;;303 _CamPviewStopHw();
|L1.2568|
000a08 ebfffffe BL _CamPviewStopHw
;;;304 camPviewStatus=CAM_LAST_CAPTURING;
000a0c e3a00003 MOV r0,#3
000a10 e59f10d4 LDR r1,|L1.2796|
000a14 e5810000 STR r0,[r1,#0] ; camPviewStatus
;;;305 break;
000a18 ea00002d B |L1.2772|
;;;306 case CAM_LAST_CAPTURING:
;;;307 camPviewStatus=CAM_STOPPED;
|L1.2588|
000a1c e3a00004 MOV r0,#4
000a20 e59f10c4 LDR r1,|L1.2796|
000a24 e5810000 STR r0,[r1,#0] ; camPviewStatus
;;;308 return;
;;;309 case CAM_STARTED:
;;;310 if(camTestMode&CAM_TEST_MODE_PVIEW_POST) {
;;;311 if(camPviewCaptureCount >0) {
;;;312 camPviewDataValid=1;
;;;313 if(postProcessingDone==0 && camPviewCaptureCount>1) {
;;;314 Uart_Printf("ERROR:Post not completed yet.\n");
;;;315 }
;;;316 completedFrameIndex=(((rCIPRSTATUS>>26)&0x3)+4-2)%4;
;;;317 PostStartProcessing(completedFrameIndex);
;;;318 }
;;;319 }
;;;320 else {
;;;321 if(camPviewCaptureCount>0) camPviewDataValid=1;
;;;322 }
;;;323 break;
;;;324 default:
;;;325 Uart_Printf("dummy\n");
;;;326 break;
;;;327 }
;;;328 camPviewCaptureCount++;
;;;329 }
|L1.2600|
000a28 e28dd004 ADD sp,sp,#4
000a2c e8bd501f LDMFD sp!,{r0-r4,r12,lr}
000a30 e25ef004 SUBS pc,lr,#4
|L1.2612|
000a34 e51f0124 LDR r0,|L1.2328| ;310
000a38 e5900000 LDR r0,[r0,#0] ;310 ; camTestMode
000a3c e3100008 TST r0,#8 ;310
000a40 0a000018 BEQ |L1.2728| ;310
000a44 e59f00a4 LDR r0,|L1.2800| ;311
000a48 e5900000 LDR r0,[r0,#0] ;311 ; camPviewCaptureCount
000a4c e3500000 CMP r0,#0 ;311
000a50 0a00001b BEQ |L1.2756| ;311
000a54 e3a00001 MOV r0,#1 ;312
000a58 e59f1094 LDR r1,|L1.2804| ;312
000a5c e5810000 STR r0,[r1,#0] ;312 ; camPviewDataValid
000a60 e51f0144 LDR r0,|L1.2340| ;313
000a64 e5900000 LDR r0,[r0,#0] ;313 ; postProcessingDone
000a68 e3500000 CMP r0,#0 ;313
000a6c 1a000005 BNE |L1.2696| ;313
000a70 e59f0078 LDR r0,|L1.2800| ;313
000a74 e5900000 LDR r0,[r0,#0] ;313 ; camPviewCaptureCount
000a78 e3500001 CMP r0,#1 ;313
000a7c 9a000001 BLS |L1.2696| ;313
000a80 e24f0f58 ADR r0,|L1.2344| ;314
000a84 ebfffffe BL _printf ;314
|L1.2696|
000a88 e3a00448 MOV r0,#0x48000000 ;316
000a8c e5900098 LDR r0,[r0,#0x98] ;316
000a90 e3a01002 MOV r1,#2 ;316
000a94 e0810d20 ADD r0,r1,r0,LSR #26 ;316
000a98 e2004003 AND r4,r0,#3 ;316
000a9c e1a00004 MOV r0,r4 ;317
000aa0 ebfffffe BL PostStartProcessing ;317
000aa4 ea000006 B |L1.2756| ;317
|L1.2728|
000aa8 e59f0040 LDR r0,|L1.2800| ;321
000aac e5900000 LDR r0,[r0,#0] ;321 ; camPviewCaptureCount
000ab0 e3500000 CMP r0,#0 ;321
000ab4 0a000002 BEQ |L1.2756| ;321
000ab8 e3a00001 MOV r0,#1 ;321
000abc e59f1030 LDR r1,|L1.2804| ;321
000ac0 e5810000 STR r0,[r1,#0] ;321 ; camPviewDataValid
|L1.2756|
000ac4 ea000002 B |L1.2772| ;323
|L1.2760|
000ac8 e28f0028 ADR r0,|L1.2808| ;325
000acc ebfffffe BL _printf ;325
000ad0 e1a00000 NOP ;326
|L1.2772|
000ad4 e59f0014 LDR r0,|L1.2800| ;328
000ad8 e5900000 LDR r0,[r0,#0] ;328 ; camPviewCaptureCount
000adc e2800001 ADD r0,r0,#1 ;328
000ae0 e59f1008 LDR r1,|L1.2800| ;328
000ae4 e5810000 STR r0,[r1,#0] ;328 ; camPviewCaptureCount
000ae8 eaffffce B |L1.2600|
|L1.2796|
000aec 00000010 DCD ||.bss$2|| + 16
|L1.2800|
000af0 00000008 DCD ||.bss$2|| + 8
|L1.2804|
000af4 00000020 DCD ||.bss$2|| + 32
|L1.2808|
000af8 6d6d7564 DCB "dumm"
000afc 00000a79 DCB "y\n\0\0"
ENDP
CamCaptureStart PROC
;;;340 void CamCaptureStart(U32 mode)
;;;341 {
000b00 e3100440 TST r0,#0x40000000
;;;342
;;;343 if(mode&CAM_CODEC_SCALER_CAPTURE_ENABLE_BIT) {
000b04 0a000007 BEQ |L1.2856|
;;;344 camCodecStatus=CAM_STARTED;
000b08 e3a01000 MOV r1,#0
000b0c e51f2200 LDR r2,|L1.2324|
000b10 e5821000 STR r1,[r2,#0] ; camCodecStatus
;;;345 rCICOSCCTRL|=CAM_CODEC_SACLER_START_BIT;
000b14 e3a01448 MOV r1,#0x48000000
000b18 e5911058 LDR r1,[r1,#0x58]
000b1c e3811c80 ORR r1,r1,#0x8000
000b20 e3a02448 MOV r2,#0x48000000
000b24 e5821058 STR r1,[r2,#0x58]
;;;346 }
;;;347
;;;348 if(mode&CAM_PVIEW_SCALER_CAPTURE_ENABLE_BIT) {
|L1.2856|
000b28 e3100580 TST r0,#0x20000000
000b2c 0a000007 BEQ |L1.2896|
;;;349 camPviewStatus=CAM_STARTED;
000b30 e3a01000 MOV r1,#0
000b34 e51f2050 LDR r2,|L1.2796|
000b38 e5821000 STR r1,[r2,#0] ; camPviewStatus
;;;350 rCIPRSCCTRL|=CAM_PVIEW_SACLER_START_BIT;
000b3c e3a01448 MOV r1,#0x48000000
000b40 e591108c LDR r1,[r1,#0x8c]
000b44 e3811c80 ORR r1,r1,#0x8000
000b48 e3a02448 MOV r2,#0x48000000
000b4c e582108c STR r1,[r2,#0x8c]
;;;351 }
;;;352
;;;353 rCIIMGCPT|=CAM_CAMIF_GLOBAL_CAPTURE_ENABLE_BIT|mode;
|L1.2896|
000b50 e3a01448 MOV r1,#0x48000000
000b54 e59110a0 LDR r1,[r1,#0xa0]
000b58 e1811000 ORR r1,r1,r0
000b5c e3811480 ORR r1,r1,#0x80000000
000b60 e3a02448 MOV r2,#0x48000000
000b64 e58210a0 STR r1,[r2,#0xa0]
;;;354 }
000b68 e12fff1e BX lr
ENDP
CamCaptureStop PROC
;;;356 void CamCaptureStop(void)
;;;357 {
000b6c e3a00001 MOV r0,#1
;;;358 camCodecStatus=CAM_STOP_ISSUED;
000b70 e51f1264 LDR r1,|L1.2324|
000b74 e5810000 STR r0,[r1,#0] ; camCodecStatus
;;;359 camPviewStatus=CAM_STOP_ISSUED;
000b78 e3a00001 MOV r0,#1
000b7c e51f1098 LDR r1,|L1.2796|
000b80 e5810000 STR r0,[r1,#0] ; camPviewStatus
;;;360 }
000b84 e12fff1e BX lr
ENDP
SetCAMClockDivider PROC
;;;450 void SetCAMClockDivider(int divn)
;;;451 {
000b88 e3a01440 MOV r1,#0x40000000
;;;452 rCLKDIVN= (rCLKDIVN & ~(0xf<<8))|(divn<<8);
000b8c e5911028 LDR r1,[r1,#0x28]
000b90 e3c11ef0 BIC r1,r1,#0xf00
000b94 e1811400 ORR r1,r1,r0,LSL #8
000b98 e3a02440 MOV r2,#0x40000000
000b9c e5821028 STR r1,[r2,#0x28]
;;;453 }
000ba0 e12fff1e BX lr
ENDP
CalculatePrescalerRatioShift PROC
;;;677 void CalculatePrescalerRatioShift(U32 SrcSize, U32 DstSize, U32 *ratio,U32 *shift)
;;;678 {
000ba4 e92d41f0 STMFD sp!,{r4-r8,lr}
000ba8 e1a04000 MOV r4,r0
000bac e1a05001 MOV r5,r1
000bb0 e1a06002 MOV r6,r2
000bb4 e1a07003 MOV r7,r3
;;;679 if(SrcSize>=64*DstSize) {
000bb8 e1540305 CMP r4,r5,LSL #6
000bbc 3a000008 BCC |L1.3044|
;;;680 Uart_Printf("ERROR: out of the prescaler range: SrcSize/DstSize = %d(< 64)\n",SrcSize/DstSize);
000bc0 e1a01004 MOV r1,r4
000bc4 e1a00005 MOV r0,r5
000bc8 ebfffffe BL __rt_udiv
000bcc e1a08000 MOV r8,r0
000bd0 e1a01000 MOV r1,r0
000bd4 e28f00a8 ADR r0,|L1.3204|
000bd8 ebfffffe BL _printf
;;;681 while(1);
000bdc e1a00000 NOP
|L1.3040|
000be0 eafffffe B |L1.3040|
;;;682 }
;;;683 else if(SrcSize>=32*DstSize) {
|L1.3044|
000be4 e1540285 CMP r4,r5,LSL #5
000be8 3a000004 BCC |L1.3072|
;;;684 *ratio=32;
000bec e3a00020 MOV r0,#0x20
000bf0 e5860000 STR r0,[r6,#0]
;;;685 *shift=5;
000bf4 e3a00005 MOV r0,#5
000bf8 e5870000 STR r0,[r7,#0]
000bfc ea00001f B |L1.3200|
;;;686 }
;;;687 else if(SrcSize>=16*DstSize) {
|L1.3072|
000c00 e1540205 CMP r4,r5,LSL #4
000c04 3a000004 BCC |L1.3100|
;;;688 *ratio=16;
000c08 e3a00010 MOV r0,#0x10
000c0c e5860000 STR r0,[r6,#0]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -