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

📄 saa7105.c

📁 TI DM642 DSP 驱动CMOS 成像芯片MT9T001(Micron)源代码,TI原版资料.包含驱动环境配置,对如基于DSP的数码相机,摄像机开发有重要参考价值.
💻 C
📖 第 1 页 / 共 2 页
字号:
    _IIC_write(hI2C, _SAA7105_IICADDR,0x6D,&charPtr[0x6D],1);       

}

/*
 * ======== setVideoDisplay ========
 */
static void setVideoDisplay(SAA7105_Mode displayType, 
    SAA7105_AnalogFormat outMode, SAA7105_InputFormat inFormat, Bool enableBT656Sync)
{                       
    Uint8 *charPtr;
    Uns activePixels,activeLines;     
    Uns hLen;
    Uns hStart,hEnd,fal, lal;
    volatile _SAA7105_Regs *regPtr = (_SAA7105_Regs *)&_SAA7105_settingsDef;    
    Uns yOffset;
    Uns xOffset;
    Uns yInc = 0; 
    Uns ySkip = 0;
    Uns yIWGTO = 100;
    Uns yIWGTE = 100;
    Uns xInc = 0;


    hStart = 272;
    xOffset = modeTbl[displayType][0];      
    yOffset = modeTbl[displayType][1];
    hLen = modeTbl[displayType][2];;
    activePixels = modeTbl[displayType][3];
    activeLines = modeTbl[displayType][4];
    regPtr->inputFormat = modeTbl[displayType][5];
    regPtr->pixClock0 = modeTbl[displayType][6];
    regPtr->pixClock1 = modeTbl[displayType][7];
    regPtr->pixClock2 = modeTbl[displayType][8];

    regPtr->chromaBinary = 1;
    regPtr->compSyncEnable = 0;
    regPtr->encOff = 1;
    regPtr->idel = 1;
    fal = 18;

    if(regPtr->inputFormat == SAA7105_IFMT_YCBCR422_NONEINTERLACED) {
        /* 54MHz input clock (input mode 3) */
        xInc = 0;
        regPtr->edge = 0;
        regPtr->slot = 1;
    } else if(regPtr->inputFormat == SAA7105_IFMT_YCBCR422_INTERLACED){
        /* 27MHz input clock (input mode 4) */
        xInc = 2048;
        regPtr->edge = 1;
        regPtr->slot = 0;
        regPtr->encOff = 0;
        regPtr->idel = 3;  
        regPtr->compSyncEnable = 0;
    } else if(regPtr->inputFormat == SAA7105_IFMT_RGB565) {
        xInc = 0;
        regPtr->edge = 1;
        regPtr->slot = 1;       
        regPtr->chromaBinary = 0;
    }               
    if(displayType == SAA7105_MODE_PAL720) {
        regPtr->palEnable = 1;
        regPtr->fise = 0;
        regPtr->burstStart = 0x21;
        regPtr->burstEnd = 0x1d;
        regPtr->chromaPhase = 0x6b;
        regPtr->burstAmplitude = 0x2d;      
        regPtr->subCarrier0 = 0xCB;
        regPtr->subCarrier1 = 0x8A;
        regPtr->subCarrier2 = 0x09;
        regPtr->subCarrier3 = 0x2A;
        regPtr->hTriggerMSBs = 0;   
        regPtr->hTrigger = 2;   

        if(enableBT656Sync) {
            hStart = 280;
            xOffset = 0;
            regPtr->syncVia656 = 1;
            fal = 21;
            regPtr->vTrigger = 0;   
        }
        else {
            hStart = 284;
            regPtr->syncVia656 = 0;
            fal = 21;             
            regPtr->vTrigger = 2;   
        }        

        regPtr->lumaDelay = 0;  
        regPtr->cbGain = 0x7b;
        regPtr->crGain = 0xAe;

    } else if(displayType == SAA7105_MODE_NTSC720){
        regPtr->hTriggerMSBs = 0;   
        regPtr->hTrigger = 2;
        
        if(enableBT656Sync) {
            regPtr->vTrigNegative = 1;
            regPtr->vTrigger = 4;   
            fal = 13;
            activeLines += 3;
            xOffset = 0;
            regPtr->syncVia656 = 1;

        }
        else {
            regPtr->vTrigNegative = 0;
            regPtr->vTrigger = 0;   
            fal = 17;
            regPtr->syncVia656 = 0;
        }        
        regPtr->lumaDelay = 0;  
        regPtr->chromaPhase = 0x33;
        regPtr->burstAmplitude = 0x3F;
        regPtr->subCarrier0 = 0x1F;
        regPtr->subCarrier1 = 0x7C;
        regPtr->subCarrier2 = 0xF0;
        regPtr->subCarrier3 = 0x21;
        regPtr->cbGain = 0x7b;
        regPtr->crGain = 0xAe;
    }

    regPtr->hLen = hLen;
    regPtr->hLenMsb = hLen >>  8;
    regPtr->xInc = xInc;
    regPtr->xIncMsb = xInc >> 8;
    regPtr->yInc = yInc;
    regPtr->yIncMsb = yInc >> 8;
    regPtr->yIWGTO = yIWGTO;
    regPtr->yIWGTOMsb = yIWGTO >> 8;
    regPtr->yIWGTE = yIWGTE;
    regPtr->yIWGTEMsb = yIWGTE >> 8;
    regPtr->ySkip = ySkip;
    regPtr->ySkipMsb = ySkip >> 8;

    hEnd = hStart + (2 * activePixels);
    regPtr->hStart = hStart; 
    regPtr->hEnd = hEnd;
    regPtr->hStartMSB = hStart >> 8;
    regPtr->hEndMSB = hEnd >> 8;
    
    if(regPtr->inputFormat != SAA7105_IFMT_YCBCR422_INTERLACED){
        activePixels /= 2;
    }
    regPtr->xPix = activePixels;
    regPtr->xPixMsb = activePixels >> 8;
    regPtr->yPix = activeLines;
    regPtr->yPixMsb = activeLines >> 8; 
    

    lal = fal + activeLines;
    regPtr->fal = fal;
    regPtr->falMsb = fal >> 8;
    regPtr->lal = lal;
    regPtr->lalMsb = lal >> 8;

    regPtr->xOfs = xOffset;
    regPtr->xOfsMsb = xOffset >> 8;
    regPtr->yOfsOdd = yOffset;
    regPtr->yOfsOddMsb = yOffset >> 8;
    regPtr->yOfsEven = yOffset;
    regPtr->yOfsEvenMsb = yOffset >> 8; 

    charPtr = (Uint8 *)&_SAA7105_settingsDef;
    _IIC_write(hI2C, _SAA7105_IICADDR,1,&charPtr[1],0xA3);
    _IIC_write(hI2C, _SAA7105_IICADDR,0xfd,&charPtr[0xfd],1);
    if(displayType >= SAA7105_MODE_VGA){
        clearHDSyncEngine();
        loadHDSyncEngine(displayType);
        startHDSyncEngine(displayType);
        setOutputMode(SAA7105_AFMT_RGB);
        /* reset the OSD_FPGA and configure it in approciate mode */
        *(volatile Uint8 *)(0x90080010) = 0x20; // 16-bit mode
    }else{
        setOutputMode(outMode);
        /* reset the OSD_FPGA and configure it in approciate mode */
        *(volatile Uint8 *)(0x90080010) = 0x28; // 8-bit mode
    }
    *(volatile Uint8 *)(0x90080010) &= ~0x20; // un-reset OSD FPGA */
    while(!(*(volatile Uint8 *)(0x90080013) & 0x40));
}

 
/*
 * ======== startHDSyncEngine ========
 */

static void startHDSyncEngine(SAA7105_Mode displayType)
{
    _SAA7105_Regs *regPtr;
    Uint8 *charPtr;
        
    regPtr = &_SAA7105_settingsDef;
    regPtr->hdRGB_YCbCr = 0;
    regPtr->hdFullGain = 1;
    regPtr->hdTriggerPhaseY = 0;
    switch(displayType) {
        case SAA7105_MODE_VGA:
        regPtr->hdLineCounter = 2;
        regPtr->hdTriggerPhaseX = 12;
        break;
        case SAA7105_MODE_SVGA:
        regPtr->hdLineCounter = 4;
        regPtr->hdTriggerPhaseX = 12;
        break;
        case SAA7105_MODE_XGA:
        regPtr->hdLineCounter = 6;
        regPtr->hdTriggerPhaseX = 12;
        break;
        case SAA7105_MODE_HD1080I30F:
        regPtr->hdLineCounter = 2;
        regPtr->hdTriggerPhaseX = 0;
        regPtr->hdRGB_YCbCr = 1;
        regPtr->hdFullGain = 0;
        regPtr->hdTriggerPhaseY = 95;
        break;
        case SAA7105_MODE_HD480P60F:
        regPtr->hdLineCounter = 2;
        regPtr->hdTriggerPhaseX = 5;
        regPtr->hdRGB_YCbCr = 1; 
        regPtr->hdFullGain = 0;
        regPtr->hdTriggerPhaseY = 0;
        break;
        case SAA7105_MODE_HD720P60F:
        regPtr->hdLineCounter = 2;
        regPtr->hdTriggerPhaseX = 15;
        regPtr->hdRGB_YCbCr = 1;
        regPtr->hdFullGain = 0;
        regPtr->hdTriggerPhaseY = 0;
        break;

        default:
        regPtr->hdLineCounter = 2;
        regPtr->hdTriggerPhaseX = 5;
        regPtr->hdRGB_YCbCr = 1;
        regPtr->hdFullGain = 0;
        regPtr->hdTriggerPhaseY = 0;        
        break;
    }       
    
    regPtr->hdLineTypePtr = 0;
    regPtr->hdLinePatternPtr = 0;
    regPtr->hdDurationCtr = 0;
    regPtr->hdEventTypePtr = 0;
    regPtr->hdColorInterpolator = 1;
    regPtr->hdActive = 1;

    charPtr = (Uint8 *)&_SAA7105_settingsDef;
    _IIC_write(hI2C, _SAA7105_IICADDR,0xD4,&charPtr[0xD4],9);
    return;
}



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


    /*First Check if the Handle is correct */
    if(devId == _SAA7105_IICADDR) {
        /*Put _SAA7105 in power down mode */
        powerdownSAA7105(TRUE);
        return EDC_SUCCESS;    
    } else 
        return EDC_FAILED;
}

/*
 * ======== SAA7105_ctrl ========
 */
static Int SAA7105_ctrl(EDC_Handle handle, SAA7105_Cmd cmd, Arg param)
{
    Int devId = (Int)handle;


    /*First Check if the Handle is correct */
    if(devId != _SAA7105_IICADDR){
        return EDC_FAILED;        
    }
    switch(cmd) {
        case EDC_CONFIG: {
            SAA7105_ConfParams *saa7105Params = (SAA7105_ConfParams *)param;
            hI2C = saa7105Params->hI2C;
            configSAA7105(saa7105Params->mode, saa7105Params->enableSlaveMode, 
                saa7105Params->aFmt, saa7105Params->iFmt, saa7105Params->enableBT656Sync);
            setSAA7105SyncMode(saa7105Params->mode,
                saa7105Params->enableBT656Sync);
        }
        break;
        case EDC_RESET:
        resetSAA7105();
        break;
        case SAA7105_POWERDOWN:
        powerdownSAA7105(TRUE);
        break;                 
        case SAA7105_POWERUP:
        powerdownSAA7105(FALSE);
        break;
        case SAA7105_ENABLE_SLAVE_MODE:  
        enableSlaveMode((Bool)param);
        break;
        case SAA7105_ENABLE_COLORBAR:     
        enableColorBars((Bool)param);
        break;
        case SAA7105_LOAD_CURSOR:/* load hardware cursor */
        break;
        case SAA7105_LOAD_LUT: /* load look-up table */
        break;
    }
    return EDC_SUCCESS;        
}


/*
 * ======== SAA7105_open ========
 */
static EDC_Handle SAA7105_open(String devName, Arg optArg)
{
    return (EDC_Handle)_SAA7105_IICADDR;
}




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

⌨️ 快捷键说明

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