📄 adv7179.c
字号:
regPtr->encOff = 0;
regPtr->idel = 3;
regPtr->compSyncEnable = 0;
} else if(regPtr->inputFormat == adv7179_IFMT_RGB565) {
xInc = 0;
regPtr->edge = 1;
regPtr->slot = 1;
regPtr->chromaBinary = 0;
}
if(displayType == adv7179_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 == adv7179_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 != adv7179_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 *)&_adv7179_settingsDef;
_IIC_write(hI2C, _adv7179_IICADDR,1,&charPtr[1],0xA3);
_IIC_write(hI2C, _adv7179_IICADDR,0xfd,&charPtr[0xfd],1);
if(displayType >= adv7179_MODE_VGA){
clearHDSyncEngine();
loadHDSyncEngine(displayType);
startHDSyncEngine(displayType);
setOutputMode(adv7179_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(adv7179_Mode displayType)
{
_adv7179_Regs *regPtr;
Uint8 *charPtr;
regPtr = &_adv7179_settingsDef;
regPtr->hdRGB_YCbCr = 0;
regPtr->hdFullGain = 1;
regPtr->hdTriggerPhaseY = 0;
switch(displayType) {
case adv7179_MODE_VGA:
regPtr->hdLineCounter = 2;
regPtr->hdTriggerPhaseX = 12;
break;
case adv7179_MODE_SVGA:
regPtr->hdLineCounter = 4;
regPtr->hdTriggerPhaseX = 12;
break;
case adv7179_MODE_XGA:
regPtr->hdLineCounter = 6;
regPtr->hdTriggerPhaseX = 12;
break;
case adv7179_MODE_HD1080I30F:
regPtr->hdLineCounter = 2;
regPtr->hdTriggerPhaseX = 0;
regPtr->hdRGB_YCbCr = 1;
regPtr->hdFullGain = 0;
regPtr->hdTriggerPhaseY = 95;
break;
case adv7179_MODE_HD480P60F:
regPtr->hdLineCounter = 2;
regPtr->hdTriggerPhaseX = 5;
regPtr->hdRGB_YCbCr = 1;
regPtr->hdFullGain = 0;
regPtr->hdTriggerPhaseY = 0;
break;
case adv7179_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 *)&_adv7179_settingsDef;
_IIC_write(hI2C, _adv7179_IICADDR,0xD4,&charPtr[0xD4],9);
return;
}
/*
* ======== adv7179_close ========
*/
static Int adv7179_close(EDC_Handle handle)
{
Int devId = (Int)handle;
/*First Check if the Handle is correct */
if(devId == _adv7179_IICADDR) {
/*Put _adv7179 in power down mode */
powerdownadv7179(TRUE);
return EDC_SUCCESS;
} else
return EDC_FAILED;
}
/*
* ======== adv7179_ctrl ========
*/
static Int adv7179_ctrl(EDC_Handle handle, adv7179_Cmd cmd, Arg param)
{
Int devId = (Int)handle;
/*First Check if the Handle is correct */
if(devId != _adv7179_IICADDR){
return EDC_FAILED;
}
switch(cmd) {
case EDC_CONFIG: {
adv7179_ConfParams *adv7179Params = (adv7179_ConfParams *)param;
hI2C = adv7179Params->hI2C;
configadv7179(adv7179Params->mode, adv7179Params->enableSlaveMode,
adv7179Params->aFmt, adv7179Params->iFmt, adv7179Params->enableBT656Sync);
setadv7179SyncMode(adv7179Params->mode,
adv7179Params->enableBT656Sync);
}
break;
case EDC_RESET:
resetadv7179();
break;
case adv7179_POWERDOWN:
powerdownadv7179(TRUE);
break;
case adv7179_POWERUP:
powerdownadv7179(FALSE);
break;
case adv7179_ENABLE_SLAVE_MODE:
enableSlaveMode((Bool)param);
break;
case adv7179_ENABLE_COLORBAR:
enableColorBars((Bool)param);
break;
case adv7179_LOAD_CURSOR:/* load hardware cursor */
break;
case adv7179_LOAD_LUT: /* load look-up table */
break;
}
return EDC_SUCCESS;
}
/*
* ======== adv7179_open ========
*/
static EDC_Handle adv7179_open(String devName, Arg optArg)
{
return (EDC_Handle)_adv7179_IICADDR;
}
/**************************************************************************/
/* End of file */
/**************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -