📄 xllp_camera.cod
字号:
00000 |XllpCameraDeInit| PROC
; 255 : {
00000 |$L2279|
00000 e92d41f0 stmdb sp!, {r4 - r8, lr}
00004 |$M2277|
00004 e1a05000 mov r5, r0
; 256 : XLLP_STATUS_T status;
; 257 : int i;
; 258 :
; 259 : // free dma channel
; 260 : for(i=0; i<3; i++)
; 261 : {
; 262 : if (camera_context->dma_channels[i] != 0xFF)
; 263 : {
; 264 : OS_DmaFreeChannel(camera_context->dma_channels[i], CAMERA_DMA_DEVICE[i]);
; 265 : camera_context->dma_channels[i] = 0xFF;
00008 e59f3060 ldr r3, [pc, #0x60]
0000c e1a04005 mov r4, r5
00010 e3a06003 mov r6, #3
00014 e0437005 sub r7, r3, r5
00018 e3a080ff mov r8, #0xFF
0001c |$L2126|
0001c e5940068 ldr r0, [r4, #0x68]
00020 e35000ff cmp r0, #0xFF
00024 0a000002 beq |$L2127|
00028 e7971004 ldr r1, [r7, +r4]
0002c eb000000 bl OS_DmaFreeChannel
00030 e5848068 str r8, [r4, #0x68]
00034 |$L2127|
00034 e2844004 add r4, r4, #4
00038 e2566001 subs r6, r6, #1
0003c 1afffff6 bne |$L2126|
; 266 : }
; 267 : }
; 268 : // deinit sensor
; 269 : status = camera_context->camera_functions->deinit(camera_context);
00040 e5953064 ldr r3, [r5, #0x64]
00044 e1a00005 mov r0, r5
00048 e5933004 ldr r3, [r3, #4]
0004c e1a0e00f mov lr, pc
00050 e12fff13 bx r3
; 270 :
; 271 : // capture interface deinit
; 272 : XllpCIDeInit(camera_context->ci_reg_base, camera_context->clk_reg_base);
00054 e5951050 ldr r1, [r5, #0x50]
00058 e1a04000 mov r4, r0
0005c e595005c ldr r0, [r5, #0x5C]
00060 eb000000 bl XllpCIDeInit
; 273 :
; 274 : return status;
00064 e1a00004 mov r0, r4
; 275 : }
00068 e8bd41f0 ldmia sp!, {r4 - r8, lr}
0006c e12fff1e bx lr
00070 |$L2282|
00070 00000000 DCD |CAMERA_DMA_DEVICE|
00074 |$M2278|
ENDP ; |XllpCameraDeInit|
EXPORT |XllpCameraSetCaptureFormat|
IMPORT |__rt_udiv|
IMPORT |XllpCISetImageFormat|
IMPORT |XllpCIConfigureMP|
00000 AREA |.text| { |XllpCameraSetCaptureFormat| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpCameraSetCaptureFormat|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpCameraSetCaptureFormat| } ; comdat associative
|$T2297| DCD |$L2296|
DCD 0x40004d02
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpCameraSetCaptureFormat| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpCameraSetCaptureFormat| PROC
; 285 : {
00000 |$L2296|
00000 e92d4030 stmdb sp!, {r4, r5, lr}
00004 e24dd008 sub sp, sp, #8
00008 |$M2294|
00008 e1a04000 mov r4, r0
; 286 : XLLP_STATUS_T status;
; 287 :
; 288 : unsigned frame_size;
; 289 : XLLP_CI_IMAGE_FORMAT ci_input_format, ci_output_format;
; 290 : XLLP_CI_MP_TIMING timing;
; 291 :
; 292 : // set capture interface
; 293 : if (camera_context->capture_input_format > XLLP_CAMERA_IMAGE_FORMAT_MAX ||
; 294 : camera_context->capture_output_format > XLLP_CAMERA_IMAGE_FORMAT_MAX )
0000c e594101c ldr r1, [r4, #0x1C]
00010 e3510012 cmp r1, #0x12
00014 8a000041 bhi |$L2139|
00018 e5942020 ldr r2, [r4, #0x20]
0001c e3520012 cmp r2, #0x12
00020 8a00003e bhi |$L2139|
; 296 : ci_input_format = FORMAT_MAPPINGS[camera_context->capture_input_format];
00024 e59f3104 ldr r3, [pc, #0x104]
00028 e7931101 ldr r1, [r3, +r1, lsl #2]
; 297 : ci_output_format = FORMAT_MAPPINGS[camera_context->capture_output_format];
0002c e7932102 ldr r2, [r3, +r2, lsl #2]
; 298 : if (ci_input_format == XLLP_CI_INVALID_FORMAT || ci_output_format == XLLP_CI_INVALID_FORMAT)
00030 e35100ff cmp r1, #0xFF
00034 0a000039 beq |$L2139|
00038 e35200ff cmp r2, #0xFF
0003c 0a000037 beq |$L2139|
; 299 : return XLLP_STATUS_WRONG_PARAMETER;
; 300 : XllpCISetImageFormat(camera_context->ci_reg_base, ci_input_format, ci_output_format);
00040 e594005c ldr r0, [r4, #0x5C]
00044 eb000000 bl XllpCISetImageFormat
; 301 : timing.BFW = timing.BLW = 0;
; 302 : XllpCIConfigureMP(camera_context->ci_reg_base, camera_context->capture_width-1, camera_context->capture_height-1, &timing);
00048 e5943008 ldr r3, [r4, #8]
0004c e5941004 ldr r1, [r4, #4]
00050 e594005c ldr r0, [r4, #0x5C]
00054 e2432001 sub r2, r3, #1
00058 e3a0e000 mov lr, #0
0005c e3a05000 mov r5, #0
00060 e28d3000 add r3, sp, #0
00064 e2411001 sub r1, r1, #1
00068 e58de004 str lr, [sp, #4]
0006c e58d5000 str r5, [sp]
00070 eb000000 bl XllpCIConfigureMP
; 303 :
; 304 : // set sensor setting
; 305 : status = camera_context->camera_functions->set_capture_format(camera_context);
00074 e5943064 ldr r3, [r4, #0x64]
00078 e1a00004 mov r0, r4
0007c e5933008 ldr r3, [r3, #8]
00080 e1a0e00f mov lr, pc
00084 e12fff13 bx r3
00088 e3500000 cmp r0, #0
; 306 : if (status)
; 307 : return status;
0008c 1a000024 bne |$L2132|
; 308 :
; 309 : // ring buffer init
; 310 : switch(camera_context->capture_output_format) {
00090 e5943020 ldr r3, [r4, #0x20]
00094 e3530004 cmp r3, #4
00098 3a000020 bcc |$L2139|
0009c e3a05000 mov r5, #0
000a0 e3530005 cmp r3, #5
000a4 9a00000d bls |$L2147|
000a8 e353000f cmp r3, #0xF
000ac 0a00000b beq |$L2147|
000b0 e3530010 cmp r3, #0x10
000b4 1a000019 bne |$L2139|
; 317 : break;
; 318 : case XLLP_CAMERA_IMAGE_FORMAT_YCBCR422_PACKED:
; 319 : frame_size = camera_context->capture_width * camera_context->capture_height * 2;
; 320 : camera_context->fifo0_transfer_size = frame_size;
; 321 : camera_context->fifo1_transfer_size = 0;
; 322 : camera_context->fifo2_transfer_size = 0;
; 323 : break;
; 324 : case XLLP_CAMERA_IMAGE_FORMAT_YCBCR422_PLANAR:
; 325 : frame_size = camera_context->capture_width * camera_context->capture_height * 2;
000b8 e5942008 ldr r2, [r4, #8]
000bc e5943004 ldr r3, [r4, #4]
000c0 e0030392 mul r3, r2, r3
000c4 e1a0e083 mov lr, r3, lsl #1
; 326 : camera_context->fifo0_transfer_size = frame_size / 2;
000c8 e1a030ae mov r3, lr, lsr #1
; 327 : camera_context->fifo1_transfer_size = frame_size / 4;
000cc e1a0212e mov r2, lr, lsr #2
000d0 e58430a0 str r3, [r4, #0xA0]
000d4 e58420a4 str r2, [r4, #0xA4]
; 328 : camera_context->fifo2_transfer_size = frame_size / 4;
000d8 e58420a8 str r2, [r4, #0xA8]
; 329 : break;
000dc ea000006 b |$L2144|
000e0 |$L2147|
; 311 : case XLLP_CAMERA_IMAGE_FORMAT_RGB555:
; 312 : case XLLP_CAMERA_IMAGE_FORMAT_RGB565:
; 313 : frame_size = camera_context->capture_width * camera_context->capture_height * 2;
000e0 e5943004 ldr r3, [r4, #4]
000e4 e5942008 ldr r2, [r4, #8]
; 314 : camera_context->fifo0_transfer_size = frame_size;
; 315 : camera_context->fifo1_transfer_size = 0;
; 316 : camera_context->fifo2_transfer_size = 0;
000e8 e58450a8 str r5, [r4, #0xA8]
000ec e58450a4 str r5, [r4, #0xA4]
000f0 e0030392 mul r3, r2, r3
000f4 e1a0e083 mov lr, r3, lsl #1
000f8 e584e0a0 str lr, [r4, #0xA0]
000fc |$L2144|
; 330 : default:
; 331 : return XLLP_STATUS_WRONG_PARAMETER;
; 332 : break;
; 333 : }
; 334 : camera_context->block_size = frame_size;
; 335 : camera_context->block_number = camera_context->buf_size / frame_size;
000fc e5941040 ldr r1, [r4, #0x40]
00100 e1a0000e mov r0, lr
00104 e584e07c str lr, [r4, #0x7C]
00108 eb000000 bl __rt_udiv
0010c e5840078 str r0, [r4, #0x78]
; 336 : camera_context->block_header = camera_context->block_tail = 0;
; 337 :
; 338 : return XLLP_STATUS_SUCCESS;
00110 e3a00000 mov r0, #0
00114 e5845084 str r5, [r4, #0x84]
00118 e5845080 str r5, [r4, #0x80]
0011c ea000000 b |$L2132|
00120 |$L2139|
; 295 : return XLLP_STATUS_WRONG_PARAMETER;
00120 e3a00003 mov r0, #3
00124 |$L2132|
; 339 : }
00124 e28dd008 add sp, sp, #8
00128 e8bd4030 ldmia sp!, {r4, r5, lr}
0012c e12fff1e bx lr
00130 |$L2299|
00130 00000000 DCD |FORMAT_MAPPINGS|
00134 |$M2295|
ENDP ; |XllpCameraSetCaptureFormat|
EXPORT |XllpCameraCaptureStillImage|
00000 AREA |.text| { |XllpCameraCaptureStillImage| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpCameraCaptureStillImage|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpCameraCaptureStillImage| } ; comdat associative
|$T2309| DCD |$L2308|
DCD 0x40000501
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpCameraCaptureStillImage| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpCameraCaptureStillImage| PROC
; 343 : {
00000 |$L2308|
00000 e52de004 str lr, [sp, #-4]!
00004 |$M2306|
; 344 : XLLP_STATUS_T status;
; 345 : status = PrvStartCapture( camera_context, block_id, 1 );
00004 e3a02001 mov r2, #1
00008 eb000000 bl PrvStartCapture
; 346 : return status;
; 347 : }
0000c e49de004 ldr lr, [sp], #4
00010 e12fff1e bx lr
00014 |$M2307|
ENDP ; |XllpCameraCaptureStillImage|
EXPORT |XllpCameraStartVideoCapture|
00000 AREA |.text| { |XllpCameraStartVideoCapture| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpCameraStartVideoCapture|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpCameraStartVideoCapture| } ; comdat associative
|$T2320| DCD |$L2319|
DCD 0x40000501
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpCameraStartVideoCapture| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpCameraStartVideoCapture| PROC
; 351 : {
00000 |$L2319|
00000 e52de004 str lr, [sp, #-4]!
00004 |$M2317|
; 352 : XLLP_STATUS_T status;
; 353 : status = PrvStartCapture( camera_context, block_id, 0 );
00004 e3a02000 mov r2, #0
00008 eb000000 bl PrvStartCapture
; 354 : return status;
; 355 : }
0000c e49de004 ldr lr, [sp], #4
00010 e12fff1e bx lr
00014 |$M2318|
ENDP ; |XllpCameraStartVideoCapture|
EXPORT |XllpCameraStopVideoCapture|
00000 AREA |.text| { |XllpCameraStopVideoCapture| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpCameraStopVideoCapture|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpCameraStopVideoCapture| } ; comdat associative
|$T2332| DCD |$L2331|
DCD 0x40001101
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpCameraStopVideoCapture| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpCameraStopVideoCapture| PROC
; 359 : {
00000 |$L2331|
00000 e92d4010 stmdb sp!, {r4, lr}
00004 |$M2329|
00004 e1a04000 mov r4, r0
; 360 : XLLP_STATUS_T status;
; 361 :
; 362 : // stop capture
; 363 : status = camera_context->camera_functions->stop_capture(camera_context);
00008 e5943064 ldr r3, [r4, #0x64]
0000c e5933010 ldr r3, [r3, #0x10]
00010 e1a0e00f mov lr, pc
00014 e12fff13 bx r3
; 364 :
; 365 : // stop dma
; 366 : PrvStopDMATransfer(camera_context);
00018 e5940068 ldr r0, [r4, #0x68]
0001c eb000000 bl OS_DmaStopTransfer
00020 e5943020 ldr r3, [r4, #0x20]
00024 e3530010 cmp r3, #0x10
00028 1a000003 bne |$L2326|
0002c e594006c ldr r0, [r4, #0x6C]
00030 eb000000 bl OS_DmaStopTransfer
00034 e5940070 ldr r0, [r4, #0x70]
00038 eb000000 bl OS_DmaStopTransfer
0003c |$L2326|
; 367 :
; 368 : return;
; 369 : }
0003c e8bd4010 ldmia sp!, {r4, lr}
00040 e12fff1e bx lr
00044 |$M2330|
ENDP ; |XllpCameraStopVideoCapture|
EXPORT |XllpCameraSetCaptureFrameRate|
IMPORT |XllpCISetFrameRate|
00000 AREA |.text| { |XllpCameraSetCaptureFrameRate| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$XllpCameraSetCaptureFrameRate|, PDATA, SELECTION=5, ASSOC=|.text| { |XllpCameraSetCaptureFrameRate| } ; comdat associative
|$T2340| DCD |$L2339|
DCD 0x40000601
; Function compile flags: /Ogsy
00000 AREA |.text| { |XllpCameraSetCaptureFrameRate| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |XllpCameraSetCaptureFrameRate| PROC
; 378 : {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -