This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CCS/AM5729: Camera tuning

Part Number: AM5729

Tool/software: Code Composer Studio

Hello!

Given:

1 - Ubuntu 18.04 LTS

2 - CCS 9.2

3 - processor_sdk_rtos_am57xx_6_00_00_07

4 - pdk_am57xx_1_0_15

5 - JTAG emulator XDS220 Spectrum Digital

6 - Project - vps_captureVipExample_idkAM572x_armExampleProject

I have an ar 0134 sensor. I need to change the values of the RGB colors in the registers. We know the addresses of the RGB registers. Namely: green1 gain, blue gain, red gain and green2 gain. The transfer of register values is via the I2C interface. Question: how can register values be changed in the project code vps_captureVipExample_idkAM572x_armExampleProject?

Thanks!

  • Okay, I modified part of the project code vps_captureVipExample_idkAM572x_armExampleProject:

    static Int32 CaptApp_createVidDec(CaptApp_Obj     *appObj,
                                      CaptApp_InstObj *instObj)
    {
        Int32  retVal;
        UInt32 decInstId, decI2cInstId, decI2cAddr;
        Vps_CaptCreateParams  *pVipCreatePrms;
        Bsp_VidDecChipIdParams decChipIdPrms;
        Bsp_VidDecChipIdStatus decChipIdStatus;
        Bsp_VidDecCreateStatus decCreateStatus;
    
        pVipCreatePrms = &instObj->createPrms;
    
        decInstId = Bsp_boardGetVideoDeviceInstId(
                instObj->decDrvId,
                FVID2_VPS_CAPT_VID_DRV,
                instObj->instId);
        decI2cInstId = Bsp_boardGetVideoDeviceI2cInstId(
                instObj->decDrvId,
                FVID2_VPS_CAPT_VID_DRV,
                instObj->instId);
        decI2cAddr = Bsp_boardGetVideoDeviceI2cAddr(
                instObj->decDrvId,
                FVID2_VPS_CAPT_VID_DRV,
                instObj->instId);
    
        /* Power on video decoder */
        retVal = Bsp_boardPowerOnDevice(instObj->decDrvId, decInstId, TRUE);
        if (FVID2_SOK != retVal)
        {
            UART_printf("Device power-on failed\n");
        }
        if (FVID2_SOK == retVal)
        {
            /* select video decoder at board level mux */
            retVal = Bsp_boardSelectDevice(instObj->decDrvId, decInstId);
            if (FVID2_SOK != retVal)
            {
                UART_printf("Device select failed\n");
            }
        }
        if (FVID2_SOK == retVal)
        {
            /* Perform any reset needed at board level */
            retVal = Bsp_boardResetDevice(instObj->decDrvId, decInstId);
            if (FVID2_SOK != retVal)
            {
                UART_printf("Device reset failed\n");
            }
        }
    
        if (FVID2_SOK == retVal)
        {
            /* Select specific mode */
            retVal = Bsp_boardSelectMode(
                    instObj->decDrvId,
                    decInstId,
                    appObj->testPrms.boardMode);
            if (FVID2_SOK != retVal)
            {
                UART_printf("Device select mode failed\n");
            }
        }
    
        if (FVID2_SOK == retVal)
        {
            instObj->decCreatePrms.deviceI2cInstId    = decI2cInstId;
            instObj->decCreatePrms.numDevicesAtPort   = 1U;
            instObj->decCreatePrms.deviceI2cAddr[0]   = decI2cAddr;
            instObj->decCreatePrms.deviceResetGpio[0] = BSP_VID_DEC_GPIO_NONE;
            instObj->decHandle = Fvid2_create(
                    instObj->decDrvId,
                    decInstId,
                    &instObj->decCreatePrms,
                    &decCreateStatus,
                    NULL);
            //        GT_assert(BspAppTrace, instObj->decHandle != NULL);
    
            decChipIdPrms.deviceNum = 0;
            retVal = Fvid2_control(
                    instObj->decHandle,
                    IOCTL_BSP_VID_DEC_GET_CHIP_ID,
                    &decChipIdPrms,
                    &decChipIdStatus);
            //        GT_assert(BspAppTrace, (retVal == FVID2_SOK));
    
            UART_printf("Set values:\n");
    
            //for sensor ar0134
            UInt16 addr = 0, val = 0;
    
            //green1 gain
            addr = 0x3056;
            val = 0x0048;
            Bsp_deviceWrite16(decI2cInstId, decI2cAddr, &addr, &val, 2);
            BspOsal_sleep(10);
    
            //blue gain
            addr = 0x3058;
            val = 0x0050;
            Bsp_deviceWrite16(decI2cInstId, decI2cAddr, &addr, &val, 2);
            BspOsal_sleep(10);
    
            //red gain
            addr = 0x305A;
            val = 0x0052;
            Bsp_deviceWrite16(decI2cInstId, decI2cAddr, &addr, &val, 2);
            BspOsal_sleep(10);
    
            //green2 gain
            addr = 0x305C;
            val = 0x0054;
            Bsp_deviceWrite16(decI2cInstId, decI2cAddr, &addr, &val, 2);
            BspOsal_sleep(10);
    
            UART_printf(": VIP %d: VID DEC %04x (0x%02x): %04x:%04x:%04x\n",
                        instObj->instId,
                        instObj->decDrvId,
                        instObj->decCreatePrms.deviceI2cAddr[0],
                        decChipIdStatus.chipId,
                        decChipIdStatus.chipRevision,
                        decChipIdStatus.firmwareVersion);
    
            if (FVID2_SOK == retVal)
            {
                retVal =Fvid2_control(instObj->decHandle, FVID2_START, NULL, NULL);
            }
        }
        return (retVal);
    }

  • Sorry, I accidentally clicked. The question remains. Question: how can register values be changed in the project code vps_captureVipExample_idkAM572x_armExampleProject?

  • Yan,

    It appears you're on the right track. Here's what I see in the AR1034 datasheet:

    I'm not clear on whether the green1 gain, etc. registers are 8 or 16 bits. For 16 bit registers, I'd use Bsp_deviceWrite16() like you already have. For 8-bit registers, I'd try using Bsp_deviceWrite_Custom_16A8D().

    Do you see any activity on the I2C bus?

    Regards,
    Frank