⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 saa7115.c

📁 DM642的VP口驱动
💻 C
📖 第 1 页 / 共 2 页
字号:
    }
    else if(taskPtr->xPreScale > 63){
        taskPtr->xPreScale = 63;     
    }
    taskPtr->xAccLength = _SAA7115_xScale.xValues[taskPtr->xPreScale].acl;
    xRatio = 100 * taskPtr->xInputLength;
    xRatio /= taskPtr->xOutputLength;
    if(xRatio > 275){
        firLuma = 3; 
    }else if(xRatio > 200){
        firLuma = 2;      
    }else if(xRatio >= 170){
        firLuma = 1;        
    }else{
        firLuma = 0;
    }
    firChroma = firLuma;

    taskPtr->xACLWeighting = _SAA7115_xScale.xValues[taskPtr->xPreScale].c21;
    taskPtr->scalerDCGain = _SAA7115_xScale.xValues[taskPtr->xPreScale].dcGain;
    taskPtr->yPreFilterType = firLuma;
    taskPtr->cxPreFilterType = firChroma;

    xLumaInc = 1024 * taskPtr->xInputLength;
    xLumaInc /= taskPtr->xOutputLength;
    xLumaInc /= taskPtr->xPreScale;
    if(xLumaInc > 0x1FFF){
        xLumaInc = 0x1FFF;
    }

    yRatio = 100 * taskPtr->yInputLength;
    yRatio /= taskPtr->yOutputLength;
    taskPtr->brightness = 0x80;
    if(yRatio < 125){
        lpiMode = 0;
        taskPtr->contrast = 64;
        taskPtr->saturation = 64;
    }else{
        lpiMode = 1;
        saturation = 64 * taskPtr->yOutputLength;
        saturation /= taskPtr->yInputLength;
        taskPtr->contrast = (Uint8)saturation;
        taskPtr->saturation = (Uint8)saturation;
    }

    taskPtr->xLumaIncrement = xLumaInc;
    taskPtr->xChromaIncrement = xLumaInc / 2;
    taskPtr->xLumaPhaseOffset = 0;
    taskPtr->xChromaPhaseOffset = 0;

    yLumaInc = 1024 * taskPtr->yInputLength;
    yLumaInc /= taskPtr->yOutputLength;
    if(yLumaInc > 0xFFFF){
        yLumaInc = 0xFFFF;
    }
    taskPtr->yLumaIncrement = yLumaInc;
    taskPtr->yChromaIncrement = yLumaInc;
    taskPtr->verticalScalingType = lpiMode;

    for(i = 0; i < 4; i ++){
        taskPtr->yLumaPhaseOffset[i] = 0;
        taskPtr->yChromaPhaseOffset[i] = 0;
    }

    if(frameType == INTERLACED){
        taskPtr->eventTrigger = 1;
    }
    else {
        if(taskPtr == &regPtr->taskA){
            taskPtr->eventTrigger = 2;
        }else{
            taskPtr->eventTrigger = 3;
        }         
    }
    if(task == _SAA7115_TASKA){
        _IIC_write(hI2C[channel], addrI2C,0x90,(Uint8 *)taskPtr,0x30);  
    }
    else {
        _IIC_write(hI2C[channel], addrI2C,0xC0,(Uint8 *)taskPtr,0x30);  
    }
}


/*
 * ======== setScalerGlobals ========
 */
static void setScalerGlobals(Uns channel)
{
    _SAA7115_Globals *globalPtr;
    Uint8 addrI2C;


    addrI2C = (channel == 0) ? _SAA7115_IIC_ADDR0 : _SAA7115_IIC_ADDR1;
    globalPtr = &_SAA7115_settingsDef[channel].globals;
    _IIC_write(hI2C[channel], addrI2C,0x80,(Uint8 *)globalPtr,9);
}


/*
 * ======== setSAA7115InputFormat ========
 */
static void setSAA7115InputFormat(Int channel, SAA7115_AnalogFormat inFormat)
{
    _SAA7115_Generics *genericPtr; 
    Uint8 addrI2C;


    addrI2C = (channel == 0) ? _SAA7115_IIC_ADDR0 : _SAA7115_IIC_ADDR1;
    genericPtr = &_SAA7115_settingsDef[channel].generics;
    if(inFormat == SAA7115_AFMT_SVIDEO) {
        _SAA7115_settingsDef[channel].generics.analogMuxMode = 7; 
        _SAA7115_settingsDef[channel].generics.bypassYCombFilter = 1; 
        _SAA7115_settingsDef[channel].generics.yCombFilter = 0;
    }    
    else {
        _SAA7115_settingsDef[channel].generics.analogMuxMode = channel; 
        _SAA7115_settingsDef[channel].generics.bypassYCombFilter = 0; 
        _SAA7115_settingsDef[channel].generics.yCombFilter = 1;
    }
    _IIC_write(hI2C[channel], addrI2C, 0x2,(Uint8 *)genericPtr + 2,1);
    _IIC_write(hI2C[channel], addrI2C, 0x9,(Uint8 *)genericPtr + 9,1);
}



/*
 * ======== setSAA7115SyncMode ========
 */
static void setSAA7115SyncMode(Int channel, Bool enableBT656Sync)
{
    _SAA7115_Task *taskPtrA, *taskPtrB;
    _SAA7115_Generics *genericPtr; 
    Uint8 addrI2C;


    addrI2C = (channel == 0) ? _SAA7115_IIC_ADDR0 : _SAA7115_IIC_ADDR1;

    genericPtr = &_SAA7115_settingsDef[channel].generics;
    taskPtrA = &_SAA7115_settingsDef[channel].taskA;
    taskPtrB = &_SAA7115_settingsDef[channel].taskB;

    if(enableBT656Sync) {
        _SAA7115_settingsDef[channel].taskA.ccir656Enable = 1;
        _SAA7115_settingsDef[channel].taskB.ccir656Enable = 1;
        _SAA7115_settingsDef[channel].generics.ofts = 0;   
        _SAA7115_settingsDef[channel].generics.ofts3 = 0;
    } else {
        _SAA7115_settingsDef[channel].taskA.ccir656Enable = 0;
        _SAA7115_settingsDef[channel].taskB.ccir656Enable = 0;
        _SAA7115_settingsDef[channel].generics.ofts = 2;   
        _SAA7115_settingsDef[channel].generics.ofts3 = 0;
    
        
    }    
    _IIC_write(hI2C[channel], addrI2C,0x93,(Uint8 *)taskPtrA + 3,1);
    _IIC_write(hI2C[channel], addrI2C,0xc3,(Uint8 *)taskPtrB + 3,1);
    _IIC_write(hI2C[channel], addrI2C,0x13,(Uint8 *)genericPtr + 0x13, 1);
    _IIC_write(hI2C[channel], addrI2C,0x1b,(Uint8 *)genericPtr + 0x1b, 1);
    
}
 
/*
 * ======== setupUserDefResolution ========
 */
static void setupUserDefResolution(Arg arg)
{
    SAA7115_ConfParams *saa7115Params = (SAA7115_ConfParams *)arg;    
    if(saa7115Params->outMode == SAA7115_MODE_USER) {
        outModeTbl[SAA7115_MODE_USER][0] = saa7115Params->hSize;
        outModeTbl[SAA7115_MODE_USER][1] = saa7115Params->vSize;
        outModeTbl[SAA7115_MODE_USER][2] = saa7115Params->interlaced;
        
        
    }
    
}

/*
 * ======== SAA7115_close ========
 */
static Int SAA7115_close(EDC_Handle handle) 
{
    Int devId = (int)handle;


    /*First Check if the Handle is correct */
    if(devId == 0 || devId == 1) {
        /*Put _SAA7115 in power down mode */
        powerdownSAA7115(devId, TRUE);
        return EDC_SUCCESS;    
    } else {
        return EDC_FAILED;
    }
}

/*
 * ======== SAA7115_ctrl ========
 */
static Int SAA7115_ctrl(EDC_Handle handle, SAA7115_Cmd cmd, Arg arg)
{
    Int devId = (int)handle;                    
    _SAA7115_Generics *genericPtr; 
    Uint8 addrI2C;
    

    addrI2C = (devId == 0) ? _SAA7115_IIC_ADDR0 : _SAA7115_IIC_ADDR1;
    genericPtr = &_SAA7115_settingsDef[devId].generics;
    /*First Check if the Handle is correct */
    if(devId != 0 && devId != 1) {
        return EDC_FAILED;
    }
    
    switch(cmd) {
        case EDC_CONFIG: {
            SAA7115_ConfParams *saa7115Params = (SAA7115_ConfParams *)arg;
            hI2C[devId] = saa7115Params->hI2C;
            enableIPortOutput(devId, saa7115Params->enableIPortOutput);
            setupUserDefResolution(arg);
            configSAA7115(devId, saa7115Params->inMode, saa7115Params->outMode, 
                saa7115Params->aFmt);
            setSAA7115SyncMode(devId, saa7115Params->enableBT656Sync);
        }
        break;
        case EDC_RESET:
        resetSAA7115(devId);
        break;
        case SAA7115_POWERDOWN:
        powerdownSAA7115(devId, TRUE);
        break;                 
        case SAA7115_POWERUP:
        powerdownSAA7115(devId, FALSE);
        break;
        case SAA7115_SET_AMUXMODE:
        _SAA7115_settingsDef[devId].generics.analogMuxMode = (int)arg; 
        if((int)arg >= 6) {/* svideo input */
            _SAA7115_settingsDef[devId].generics.bypassYCombFilter = 1; 
           _SAA7115_settingsDef[devId].generics.yCombFilter = 0;
        }else {
            _SAA7115_settingsDef[devId].generics.bypassYCombFilter = 0;         
           _SAA7115_settingsDef[devId].generics.yCombFilter = 1;
        }
        _IIC_write(hI2C[0], addrI2C,0x2,(Uint8 *)genericPtr + 2,1);
        _IIC_write(hI2C[0], addrI2C,0x9,(Uint8 *)genericPtr + 9,1);
        break;
    }
    return EDC_SUCCESS;
}

 
/*
 * ======== SAA7115_open ========
 */
static EDC_Handle SAA7115_open(String devName, Arg optArg)
{
    Int devId;


    /* Check if the addresse is correct */
    if(devName[0] != '/') {
        devId = -1;
    } else if(devName[1] == '0') {
         devId = 0;
    } else if(devName[1] == '1'){
         devId = 1;
    } else {
         devId = -1;
    }
    return (EDC_Handle)devId;
}


/**************************************************************************/
/* End of file                                                                            */
/**************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -