亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? autofunc.c

?? LCD OSD 程序用於8051 開發lcd
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include <math.h>
#include "types.h"
#include "board.h"
#include "global.h"
#include "ms_reg.h"
#include "adjust.h"
#include "ms_rwreg.h"
#include "misc.h"
#include "debug.h"
#include "power.h"
#include "menudef.h"
#include "msosd.h"
#include "mstar.h"

#define UseWorstPhase	1
#define EvenClock	0
#define QuickAuto	0

#define OverFlow	BIT7
#define NoneOverFlow	BIT6
#define UnderFlow	BIT7
#define NoneUnderFlow	BIT6

extern BYTE MenuPageIndex;

//===============================================================
// local declaration
Bool mStar_AutoAdcColor(BYTE vsyncTime);


//===============================================================
//===============================================================
// Code
Bool CheckSyncLoss(void)
{
#if UseINT
  if (InputTimingChangeFlag)
    { Power_TurnOffPanel();
      return TRUE;
    }
  else
    return FALSE;
#else
  Bool result=FALSE;

  if (abs(SrcHPeriod-mStar_ReadWord(HSPRD_H))>10)
    result=TRUE;
  else if (abs(SrcVTotal-mStar_ReadWord(VTOTAL_H))>10)
    result=TRUE;
  if (result)
    { Power_TurnOffPanel();
      Set_InputTimingChangeFlag();
    }
  return result;
#endif
}


void WaitAutoStatusReady(BYTE regAddr, BYTE regFlag)
{ BYTE waits=200;
  while (waits-- && !(mStar_ReadByte(regAddr)&regFlag));
}

WORD GetAutoValue(BYTE regAddr)
{ WaitAutoStatusReady(ATOCTRL, ATOR_B);
  return mStar_ReadWord(regAddr);
}


BYTE GetTranstionPosition(BYTE vsyncTime, BYTE regAddr)
{ BYTE retry=6;
  BYTE adjPhase;
  WORD pos;
  BYTE minPhase, maxPhase;

  maxPhase=0x3F;
  minPhase=0x0;
  mStar_AdjustPhase(0);
  Delay1ms(vsyncTime);
  pos=GetAutoValue(regAddr);
  adjPhase=(maxPhase+minPhase)/2;
  while (retry--)
    { mStar_AdjustPhase(adjPhase);
      Delay1ms(vsyncTime);
      if (GetAutoValue(regAddr)!=pos)
      	maxPhase=adjPhase;
      else
      	minPhase=adjPhase;
      adjPhase=(maxPhase+minPhase)/2;
      if (CheckSyncLoss())
       return FALSE;
    }
//  printData("trans phase %d", adjPhase);
  return (adjPhase);
}

#if !QuickAuto
BYTE AutoSetDataThreshold(BYTE vsyncTime)
{ BYTE thr;
  BYTE adjPhase;
  WORD regWord1, regWord2;

  for (thr=4; thr<0x10; thr++)
    { mStar_WriteByte(AOVDV, thr<<4);
      mStar_AdjustPhase(0);
      Delay1ms(vsyncTime);
      regWord1=GetAutoValue(AOHST_H);
      for (adjPhase=4; adjPhase<0x40; adjPhase+=4)
      	{ mStar_AdjustPhase(adjPhase);
          Delay1ms(vsyncTime);
          regWord2=GetAutoValue(AOHST_H);
          if (abs(regWord1-regWord2)>3)
            break;
          if (CheckSyncLoss())
            return FALSE;
      	}
      if (adjPhase>=0x40)
      	break;
    }
  return thr;
}
#endif

WORD SearchMaxWidth(BYTE vsyncTime)
{ BYTE startPhase;
  WORD hStart, hEnd;

  mStar_AdjustPhase(0);
  Delay1ms(vsyncTime);
  Delay1ms(vsyncTime);
  hStart=GetAutoValue(AOHST_H);
//  printData("hStart %d", hStart);
  startPhase=GetTranstionPosition(vsyncTime, AOHST_H);
  hEnd=GetAutoValue(AOHEND_H);
//  printData("hEnd %d", hEnd);
  hStart=hEnd-hStart+1;

  return hStart;
}

Bool mStar_AutoHTotal(BYTE vsyncTime)
{ WORD tempHTotal;
  WORD autoWidth;
  BYTE result;

  // 1st to coast tune HTotal
  mStar_AdjustPhase(0);
  Delay1ms(vsyncTime);
  autoWidth=GetAutoValue(AOHEND_H)-GetAutoValue(AOHST_H);

  tempHTotal=StandardModeWidth/3;
  if (abs(autoWidth-StandardModeWidth)>tempHTotal)
    return FALSE;

  tempHTotal=UserPrefHTotal;
  //printData("1st htotal %d", tempHTotal);
  //printData("1st max width %d", autoWidth);
  if (abs(autoWidth-StandardModeWidth)>1)
    { tempHTotal=(DWORD)UserPrefHTotal*StandardModeWidth/autoWidth;
      if (abs(tempHTotal-StandardModeHTotal)>ClockAdjRange)
      	goto AutoHTotalFailed;
      mStar_AdjustHTotal(tempHTotal);
      //printData("2nd htotal %d", tempHTotal);
    }

  autoWidth=SearchMaxWidth(vsyncTime);
  //printData("2nd max width %d", autoWidth);
  // autoWidth=SearchMaxWidth(vsyncTime);
  // 2nd fine tune
  if (autoWidth!=StandardModeWidth)
    { tempHTotal=tempHTotal+(StandardModeWidth-autoWidth);
      mStar_AdjustHTotal(tempHTotal);
      autoWidth=SearchMaxWidth(vsyncTime);
      // printData("3rd htotal %d", tempHTotal);
      // printData("max width %d", autoWidth);
      tempHTotal=tempHTotal+(StandardModeWidth-autoWidth);
    }
  else if (tempHTotal&1)
    { WORD autoWidth2;

      //tempHTotal=tempHTotal-1;
      mStar_AdjustHTotal(tempHTotal-1);
      autoWidth=SearchMaxWidth(vsyncTime);
      mStar_AdjustHTotal(tempHTotal+1);
      autoWidth2=SearchMaxWidth(vsyncTime);
      if (autoWidth2==StandardModeWidth)
        tempHTotal=tempHTotal+1;
      else if (autoWidth==StandardModeWidth)
        tempHTotal=tempHTotal-1;
      //printData("4th htotal %d", tempHTotal);
      //printData("4th max width %d", autoWidth);
      //printData("4th max width2 %d", autoWidth2);
    #if 0
      if (autoWidth!=StandardModeWidth)
        tempHTotal=tempHTotal+(StandardModeWidth-autoWidth);
    #endif
    }

#if EvenClock
 if (tempHTotal%4)
   tempHTotal=((tempHTotal+1)/4)*4;
#endif

AutoHTotalFailed:
  result=FALSE;
  if (abs(tempHTotal-StandardModeHTotal)<60)
    { UserPrefHTotal=tempHTotal;
      result=TRUE;
    }
  mStar_AdjustHTotal(UserPrefHTotal);
  mStar_AdjustPhase(UserPrefPhase);
//  printData("final htotal %d", UserPrefHTotal);

  return result;
#undef result
}

Bool mStar_AutoPhase(BYTE vsyncTime)
{ BYTE adjPhase, i;
#if UseWorstPhase    
  BYTE worsePhase, worsePhase2;
  DWORD mincksum, cksum;

  mincksum=0xFFFFFFFFul;
  for (adjPhase=0; adjPhase<0x40; adjPhase+=3)
    { mStar_AdjustPhase(adjPhase);
      Delay1ms(vsyncTime);
      WaitAutoStatusReady(ATPCTRL, ATPR_B);
      cksum=mStar_ReadWord(ATPV4);
      cksum=(cksum<<16)|mStar_ReadWord(ATPV2);
      if (cksum<mincksum)
      	{ mincksum=cksum;
      	  worsePhase=adjPhase;
      	}
      if (CheckSyncLoss())
      	return FALSE;
    }
//  printData("coast phase %d", bestPhase);
  // 2nd Search
  if (worsePhase<3)
    worsePhase=(worsePhase+61)%0x40; // 64-3
  else
    worsePhase-=3;
  mincksum=0xFFFFFFFFul;
  for (adjPhase=worsePhase; adjPhase<worsePhase+5; adjPhase++)
    { i=adjPhase%0x40;
      mStar_AdjustPhase(i);
      Delay1ms(vsyncTime);
      WaitAutoStatusReady(ATPCTRL, ATPR_B);
      cksum=mStar_ReadWord(ATPV4);
      cksum=(cksum<<16)|mStar_ReadWord(ATPV2);
      if (cksum<mincksum)
      	{ mincksum=cksum;
      	  worsePhase2=i;
      	}
      if (CheckSyncLoss())
      	return FALSE;
    }
  UserPrefPhase=(worsePhase2+31)%0x40;
#else
  BYTE bestPhase, bestPhase2;
  DWORD maxcksum, cksum;

  maxcksum=0;
  for (adjPhase=0; adjPhase<0x40; adjPhase+=3)
    { mStar_AdjustPhase(adjPhase);
      Delay1ms(vsyncTime);
      WaitAutoStatusReady(ATPCTRL, ATPR_B);
      cksum=mStar_ReadWord(ATPV4);
      cksum=(cksum<<16)|mStar_ReadWord(ATPV2);
      if (cksum>maxcksum)
      	{ maxcksum=cksum;
      	  bestPhase=adjPhase;
      	}
      if (CheckSyncLoss())
      	return FALSE;
    }
//  printData("coast phase %d", bestPhase);
  // 2nd Search
  if (bestPhase<3)
    bestPhase=(bestPhase+61)%0x40; // 64-3
  else
    bestPhase-=3;
  maxcksum=0;
  for (adjPhase=bestPhase; adjPhase<bestPhase+5; adjPhase++)
    { i=adjPhase%0x40;
      mStar_AdjustPhase(i);
      Delay1ms(vsyncTime);
      WaitAutoStatusReady(ATPCTRL, ATPR_B);
      cksum=mStar_ReadWord(ATPV4);
      cksum=(cksum<<16)|mStar_ReadWord(ATPV2);
      if (cksum>maxcksum)
      	{ maxcksum=cksum;
      	  bestPhase2=i;
      	}
      if (CheckSyncLoss())
      	return FALSE;
    }
  UserPrefPhase=bestPhase2;
#endif

  mStar_AdjustPhase(UserPrefPhase);
  printData("final phase %d", UserPrefPhase);

  return UserPrefPhase;
}


void mStar_AutoPosition(void)
{ 
WORD height, width;
  WORD actHeight;
  WORD hStart, vStart;

  hStart=GetAutoValue(AOHST_H);
  vStart=GetAutoValue(AOVST_H);

  if (hStart>StandardModeWidth || vStart>StandardModeHeight)
    return;

  width=GetAutoValue(AOHEND_H)-hStart+1;
  height=GetAutoValue(AOVEND_H)-vStart;

  actHeight=mStar_ReadWord(SPRVDC_H);

  if (UserModeFlag)
    { if (height<(StandardModeHeight*2/3) ||    width<(StandardModeWidth*2/3))
        return;
    }
  else if (height<(StandardModeHeight-80) ||    width<(StandardModeWidth-120))
    { return;
    }

  if (actHeight>height)
    { height=(actHeight-height)/2;
      if (vStart>height)
        UserPrefVStart=vStart-height;
      else
      	UserPrefVStart=0;
    }

  UserPrefHStart=hStart;
  if (SrcInputType==Input_Digital)
    UserPrefHStart-=0x10;

  mStar_WriteWord(SPRHST_H, UserPrefHStart);
  mStar_WriteWord(SPRVST_H, UserPrefVStart);

}
//=================================================================================
//=================================================================================
// Auto Color Setting

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品国产三级国产| 天堂va蜜桃一区二区三区| 一区二区三区中文字幕精品精品| 亚洲自拍偷拍网站| 国产99久久久国产精品潘金| 欧美色倩网站大全免费| 国产婷婷色一区二区三区在线| 亚洲第一主播视频| 成人激情电影免费在线观看| 日韩一区二区三区免费看| 亚洲欧美福利一区二区| 国产精品白丝av| 91精品国产综合久久久久久漫画| 亚洲色欲色欲www| 国产剧情av麻豆香蕉精品| 91精品国产一区二区| 一个色综合网站| 99久久精品免费| 欧美国产国产综合| 国产乱码精品一区二区三区忘忧草| 欧美少妇xxx| 樱花影视一区二区| 51午夜精品国产| 亚洲国产日日夜夜| 91一区在线观看| 中文字幕中文字幕中文字幕亚洲无线| 精品亚洲国内自在自线福利| 777午夜精品视频在线播放| 亚洲精品成人少妇| 99久久综合狠狠综合久久| 久久久国产精品午夜一区ai换脸| 精品一二三四区| 6080午夜不卡| 免费看欧美美女黄的网站| 制服丝袜激情欧洲亚洲| 视频一区二区三区在线| 9191成人精品久久| 日韩电影一区二区三区| 欧美一区日本一区韩国一区| 日韩精品免费专区| 欧美一区二区三区视频免费 | 日韩你懂的在线播放| 奇米综合一区二区三区精品视频| 欧美二区三区91| 美女在线观看视频一区二区| 日韩欧美久久久| 国产一区二区女| 国产精品欧美一区喷水| 99精品视频在线免费观看| 亚洲猫色日本管| 欧美午夜精品一区二区三区| 午夜精品久久久久久久久| 日韩一区二区三区视频在线观看| 精品一区二区三区影院在线午夜| www欧美成人18+| av男人天堂一区| 亚洲一区二区3| 日韩欧美激情四射| 成人一区二区三区视频| 免费观看一级特黄欧美大片| 2020日本不卡一区二区视频| 成人免费av在线| 亚洲一区视频在线| 欧美精品一区男女天堂| 91免费精品国自产拍在线不卡| 亚洲一区二区三区自拍| 日韩一卡二卡三卡国产欧美| 国产成人综合网| 亚洲午夜久久久久久久久电影网 | 亚洲123区在线观看| 日韩你懂的电影在线观看| 99久久精品免费看国产| 青青草一区二区三区| 国产精品福利一区二区三区| 欧美精品vⅰdeose4hd| 懂色av一区二区三区免费观看| 亚洲国产精品精华液网站| 久久久国产午夜精品| 欧美日韩一区视频| 成人国产一区二区三区精品| 日韩在线卡一卡二| 亚洲欧美乱综合| 久久女同精品一区二区| 欧美亚洲国产一区二区三区va| 国产在线精品视频| 午夜欧美在线一二页| 国产精品久久一卡二卡| 精品国产乱码久久久久久图片| 在线免费观看日韩欧美| 国产激情一区二区三区四区| 日韩专区在线视频| 亚洲靠逼com| 亚洲国产精品二十页| 日韩一区二区三区高清免费看看| 一本到不卡精品视频在线观看| 精品午夜久久福利影院 | 国产精品一二三区在线| 天天影视网天天综合色在线播放| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 日韩亚洲欧美一区二区三区| 欧美日韩一区久久| 色噜噜狠狠色综合中国| av亚洲精华国产精华精华| 懂色av噜噜一区二区三区av| 国产九九视频一区二区三区| 久久aⅴ国产欧美74aaa| 美女性感视频久久| 日韩国产欧美在线观看| 婷婷久久综合九色综合绿巨人 | 亚洲午夜av在线| 日韩美女啊v在线免费观看| 精品久久久久久亚洲综合网| 在线视频你懂得一区| 91官网在线免费观看| 成a人片亚洲日本久久| 免费成人在线观看| 亚洲免费视频成人| 亚洲精品国产一区二区精华液 | 日日夜夜免费精品| 亚洲少妇中出一区| 国产精品视频免费看| 久久久蜜臀国产一区二区| 日韩一区二区在线观看| 精品免费日韩av| 欧美一区二区三区视频在线观看| 欧美性大战久久久久久久蜜臀| 成人精品视频一区二区三区尤物| 久久精品久久综合| 五月婷婷另类国产| 亚洲国产欧美在线| 亚洲午夜私人影院| 亚洲高清不卡在线观看| 亚洲综合久久av| 日本成人在线看| 青青草伊人久久| 日本不卡视频在线观看| 舔着乳尖日韩一区| 日韩国产欧美三级| 风流少妇一区二区| 成人免费毛片aaaaa**| 高清免费成人av| 北岛玲一区二区三区四区| 国产精品综合二区| 色婷婷av一区二区三区软件| 色综合久久久久综合| 色婷婷香蕉在线一区二区| 欧洲色大大久久| 在线一区二区视频| 精品美女一区二区| 久久精子c满五个校花| 欧美韩日一区二区三区| 亚洲私人影院在线观看| 国产精品国产三级国产普通话99 | 欧美无人高清视频在线观看| 欧美性猛交xxxx乱大交退制版 | 91久久精品网| 91精品国产全国免费观看| 日韩一区二区三区电影| 久久久精品中文字幕麻豆发布| 亚洲精选在线视频| 日韩电影一区二区三区四区| 麻豆成人久久精品二区三区小说| 国产一区二区三区在线观看精品 | 免费高清在线视频一区·| 久久国产尿小便嘘嘘尿| 国产尤物一区二区| 91网站最新地址| 88在线观看91蜜桃国自产| 国产精品国产三级国产| 亚洲午夜久久久久中文字幕久| 免费高清在线一区| av不卡免费电影| 欧美在线免费观看亚洲| 国产精品超碰97尤物18| 午夜精品福利久久久| 国产成人精品免费看| 欧美亚洲综合久久| 亚洲三级在线播放| 久久国产精品一区二区| 99久久er热在这里只有精品66| 欧美日本国产一区| 欧美变态凌虐bdsm| 亚洲国产一二三| 国产成人av影院| 欧美日韩国产小视频在线观看| 久久精品欧美日韩| 国产一区二区女| 欧美区在线观看| 国产精品国产精品国产专区不片 | 亚洲女同一区二区| 久久精品99久久久| 欧美日韩一区国产| 亚洲人妖av一区二区| 亚洲超碰精品一区二区| heyzo一本久久综合| 精品国产乱码久久久久久影片| 一区二区三区视频在线看| 久久99精品国产91久久来源| 日韩一级二级三级| 亚洲成在人线在线播放|