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

📄 tw9906.c

📁 GM5621原代码
💻 C
📖 第 1 页 / 共 2 页
字号:

    switch (B_Status)
    {
        case 0x00:
            return VDD_MODE_NTSC;
        case 0x01:
            return VDD_MODE_PAL;
        case 0x02:
            return VDD_MODE_SECAM;
        default:
            return (dev_Read(TW9906_STATUS1_ADDR) & TW9906_VID_FIELD_FRQ_MASK) ? VDD_MODE_PAL : VDD_MODE_NTSC;
    }
}

//******************************************************************************
//
// FUNCTION     :   void dev_TW9906SetVideoInput(BYTE B_InType)
// USAGE        :   This function sets TW9906 input video type
// INPUT        :   input video type - COMPOSITE/SVIDEO
// OUTPUT       :   None
// GLOBALS      :   None
// USED_REGS    :
//******************************************************************************

static void __near dev_TW9906SetVideoInput(BYTE B_InType)
{

	msg("dev_TW9906SetVideoInput",0);
	msg("B_inType=%d",B_InType);

   switch (B_InType)
   {
      case VDD_INTYP_COMPOSITE   :
         B_InType = 0x40;   	// Setting for Composite input (MUX0)
         break;
      case VDD_INTYP_TUNER       :
         B_InType = 0x48;     	// Setting for Tuner input (MUX1)
         break;
      case VDD_INTYP_COMPOSITE2  :
         B_InType = 0x4C;     	// Setting for Composite input 2(MUX2)
         break;
      case VDD_INTYP_SVIDEO      :
         B_InType = 0x54;     	// MUX3
         break;
      case VDD_INTYP_COMPONENT   :
         break;
		 
      default  :
         return;
   }

    dev_Write(TW9906_INFORM_ADDR,B_InType); //TW9906_INFORM_ADDR
    return;
}

//******************************************************************************
//
// FUNCTION     :   void dev_TW9906SetVideoBrightness(BYTE B_BrightVal)
// USAGE        :   This function sets the brightness value for TW9906
// INPUT        :   brightness value
// OUTPUT       :   None
// GLOBALS      :   None
// USED_REGS    :
//******************************************************************************
static void __near dev_TW9906SetVideoBrightness(BYTE B_BrightVal)
{
    dev_Write(TW9906_BRT_ADDR, B_BrightVal);
}


//******************************************************************************
//
// FUNCTION     :   void dev_TW9906SetVideoContrast(BYTE B_ContrastVal)
// USAGE        :   This function sets the contrast value for TW9906
// INPUT        :   contrast value
// OUTPUT       :   None
// GLOBALS      :   None
// USED_REGS    :
//******************************************************************************
static void __near dev_TW9906SetVideoContrast(BYTE B_ContrastVal)
{
   dev_Write(TW9906_CON_ADDR,B_ContrastVal);
}

//******************************************************************************
//
// FUNCTION     :   void dev_TW9906SetVideoHue(BYTE B_HueVal)
// USAGE        :   This function sets the hue value for TW9906
// INPUT        :   hue value
// OUTPUT       :   None
// GLOBALS      :   None
// USED_REGS    :
//******************************************************************************
static void __near dev_TW9906SetVideoHue(BYTE B_HueVal)
{
    dev_Write(TW9906_HUE_ADDR,B_HueVal);
}

//******************************************************************************
//
// FUNCTION     :   void dev_TW9906SetVideoSaturation(BYTE B_SaturationVal)
// USAGE        :   This function sets the saturation value for TW9906
// INPUT        :   saturation value
// OUTPUT       :   None
// GLOBALS      :   None
// USED_REGS    :
//******************************************************************************
static void __near dev_TW9906SetVideoSaturation(BYTE B_SaturationVal)
{
    dev_Write(TW9906_SAT_U_ADDR, B_SaturationVal);
    dev_Write(TW9906_SAT_V_ADDR, B_SaturationVal);
}

//******************************************************************************
//
// FUNCTION     :   BYTE dev_TW9906GetVideoStatus(void)
// USAGE        :   This function returns the status of the incoming video
// INPUT        :   None
// OUTPUT       :   0 - Locked
//                  1 - Not Locked
// GLOBALS      :   None
// USED_REGS    :
//******************************************************************************
static BYTE __near dev_TW9906GetVideoStatus(void)
{
   BYTE B_Status;
   B_Status = dev_Read(TW9906_STATUS1_ADDR);
   if (B_Status==0xff)
   	{
   		msg("*** dev_TW9906GetVideoStatus: Gest Status AGAIN",0);
   		gm_Delay10ms(1);
		B_Status = dev_Read(TW9906_STATUS1_ADDR);
   	}
   if((B_Status & 0x80) != 0x80)
      return 0x00;
   msg("dev_TW9906GetVideoStatus: Gest Status= 0x%x",B_Status);	
   return (NO_HS | NO_VS);
}

//******************************************************************************
//
//  FUNCTION     :   void dev_TW9906PowerUp(void)
//  USAGE        :   This function powers up the TW9906 modules.
//  INPUT        :   None
//  OUTPUT       :   None
//  GLOBALS      :   None
//  USED_REGS    :   Power Save Control
//
//******************************************************************************
static void __near dev_TW9906PowerUp(void)
{


   VideoDecoderPowr_Reset_PinDirectionSet();
   VideoDecoderResetLow();   
   VideoDecoderPowerHigh();
//   gm_SetRegBitsByte(GPOUTPUT3, GPIO24_OUT);         
   msg("dev_TW9906PowerUp",0);
   gm_Delay10ms(8);			//80
   VideoDecoderResetHigh();
   gm_Delay10ms(2);
}

//******************************************************************************
//
//  FUNCTION     :   void dev_TW9906PowerDown(void)
//  USAGE        :   This function powers down the TW9906 modules.
//  INPUT        :   None
//  OUTPUT       :   None
//  GLOBALS      :   None
//  USED_REGS    :   Power Save Control
//
//******************************************************************************
static void __near dev_TW9906PowerDown(void)
{
	msg("dev_TW9906PowerDown",0);
#if POWER_DOWN_VID_IN_POWER_SAVING
	msg("***VID power low",0);
	VideoDecoderResetLow();   
	VideoDecoderPowerLow();
#else	//Just put Video decoder into software powerdown in Power saving mode	
	msg("***VID s/w power down",0);
    dev_Write(TW9906_OUTPUT_FORMAT_CTRL, 0xa6);	  //Tri-state 656 data output port
    dev_Write(TW9906_ANALOG_CONTRL_REG, 0x0f);		//Software power down
#endif  
}

//******************************************************************************
//
//  FUNCTION     :   BYTE dev_TW9906GetVideoInterlace(void)
//  USAGE        :   This function returns the current input video interlace status
//  INPUT        :   None
//  OUTPUT       :   0 - Non Interlaced
//                   1 - Interlaced
//  GLOBALS      :   None
//  USED_REGS    :
//******************************************************************************
static BYTE __near dev_TW9906GetVideoInterlace(void)
{
   BYTE B_Status;

   B_Status = dev_Read(TW9906_STATUS2_ADDR);

   if(B_Status & 0x08)
	   return D_NONINTERLACED;
   return D_INTERLACED;
}

//******************************************************************************
//
//  FUNCTION     :   TW9906_VideoDecoderEntry
//  USAGE        :   This function is main entry point into the video decoder
//                   driver.
//  INPUT        :   driver function and WORD value.
//  OUTPUT       :   returns WORD value.
//  GLOBALS      :   None
//  USED_REGS    :   None
//
//******************************************************************************
WORD TW9906_VideoDecoderEntry(BYTE func, void *p1, void *p2)
{
    WORD val = (WORD)p1;
    WORD val2 = (WORD)p2;

    WORD ret = 0;
	if (func!=gmd_VID_RAW_READ)
		{
        msgx("**From Call Driver:TW9906",0);
  		msgx("  Func number = %d", func);
		msgx("  P1= 0x%x", val);
		msgx("  P1= 0x%x", val2);
		}

    switch(func)
    {
  //      case gmd_VID_SET_TWOWIRE_PORT   :
  //          TWO_WIRE_PORT = (BYTE)val;
  //          break;

		
        case gmd_VID_SET_INPUT          :
            dev_TW9906SetVideoInput((BYTE)val);
            break;
        case gmd_VID_SET_OUTPUT_FORMAT  :
            // default is 656 output.
            break;
        case gmd_VID_SET_MODE           :
            dev_TW9906ConfigVideoMode((BYTE)val);
            break;
        case gmd_VID_SET_MIXER          :
            // No support for mixer.
            break;
        case gmd_VID_SET_BRIGHTNESS     :
            dev_TW9906SetVideoBrightness((BYTE)val);
            break;
        case gmd_VID_SET_CONTRAST       :
            dev_TW9906SetVideoContrast((BYTE)val);
            break;
        case gmd_VID_SET_SATURATION     :
            dev_TW9906SetVideoSaturation((BYTE)val);
            break;
        case gmd_VID_SET_HUE            :
            dev_TW9906SetVideoHue((BYTE)val);
            break;
        case gmd_VID_SET_SHARPNESS      :
            // No sharpness support
            break;
        case gmd_VID_GET_STATUS         :
            ret = (WORD)dev_TW9906GetVideoStatus();
            break;
        case gmd_VID_GET_INTERLACE      :
            ret = (WORD)dev_TW9906GetVideoInterlace();
            break;
        case gmd_VID_GET_LINES_PER_FIELD:
            // No support
            ret = 0;
            break;
        case gmd_VID_GET_SUB_MODE       :
            ret = (WORD)dev_TW9906GetVideoMode();
            break;
        case gmd_VID_GET_MODE           :
            ret = (WORD)dev_TW9906GetVideoMode();
            break;
        case gmd_VID_PWR_UP             :
            dev_TW9906PowerUp();
            break;
        case gmd_VID_PWR_DOWN           :
            dev_TW9906PowerDown();
           break;
        case gmd_VID_RAW_READ           :
            ret = (WORD)dev_Read(val);
            break;
        case gmd_VID_RAW_WRITE          :
            dev_Write((BYTE)val,(BYTE)val2);
           break;
        default :
            msg("TW9906: No Video Decoder Function!!",0);
            break;
    }
    return ret;
}

#endif //(USE_VPORT && USE_GSEL_DRVR_MODEL && (DEV_VIDEO_DECODER == DEV_TW9906))

⌨️ 快捷键说明

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