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

📄 dvhdmirxr8j66030ft.c

📁 the HDMI(High Definition Multimedia Interface) driver code
💻 C
📖 第 1 页 / 共 3 页
字号:
	if (ret == HDMIDRV_OK) {
		// 儈儔乕儗僕僗僞峏怴
		gHdmiRxDrvR8J66030FTReg.GeneralControlReg2 = reg[1];
	} else {
		HdmiRxDrvErrCatch("_dvHdmiRxR8J66030FTSetVideoPath failed %d\n", ret);
	}
	return ret;
}

//*******************************************************************
//! @brief		R8J66030FT 塮憸宱楬愝掕忣曬庢摼
//! @retval		張棟寢壥
//! @param		VideoPath(O):塮憸宱楬愝掕張棟忣曬<BR>
//! @note		儈儔乕 GeneralControl儗僕僗僞2偺庢摼傪峴偆<BR>
//! @attention	<BR>
//! @author		Y.Takeuchi
//! @date		07/03/22
//*******************************************************************
IW	_dvHdmiRxR8J66030FTGetVideoPath(UB * VideoPath)
{
	// 儈儔乕儗僕僗僞偺GeneralControl儗僕僗僞2忣曬傪庢摼
	*VideoPath = gHdmiRxDrvR8J66030FTReg.GeneralControlReg2;
	return HDMIDRV_OK;
}

//*******************************************************************
//! @brief		R8J66030FT 塮憸夝憸搙忣曬庢摼
//! @retval		張棟寢壥
//! @param		HRes(O):悈暯夝憸搙<BR>
//! @param		VRes(O):悅捈夝憸搙<BR>
//! @param		Interlace(O):憖嶌曽幃<BR>
//! @note		僞僀儈儞僌儗僕僗僞偺撉崬傒傪峴偆<BR>
//! @attention	<BR>
//! @author		Y.Takeuchi
//! @date		07/03/22
//*******************************************************************
IW	_dvHdmiRxR8J66030FTGetInputVideoRes(UH * HRes, UH * VRes, UB * Interlace)
{
	IW ret = HDMIDRV_OK;
	UB reg[13];

	memset(reg, 0x00, sizeof(reg));
	reg[0] = 0x3B;

	// 僞僀儈儞僌 儗僕僗僞撉崬傒
	ret = _HdmiRxDrvRegRead(DV_HDMIRX_DEF_SLAVE_ADDR, sizeof(reg), reg);
	if (ret == HDMIDRV_OK) {
		*HRes = ((UH)reg[1] << 8) + (UH)reg[0];		// 悈暯夝憸搙	//L4_Modify
		*VRes = ((UH)reg[9] << 8) + (UH)reg[8];		// 悅捈夝憸搙	//L4_Modify
		if (reg[12] & 0x80) {
			*Interlace = 1;					// 憖嶌曽幃 僀儞僞乕儗僗
		} else {
			*Interlace = 0;					// 憖嶌曽幃 僾儘僌儗僢僔僽
		}
		// 儈儔乕儗僕僗僞峏怴
		memcpy(&gHdmiRxDrvR8J66030FTReg.TimingReg, reg, sizeof(reg));
	} else {
		HdmiRxDrvErrCatch("_dvHdmiRxR8J66030FTGetInputVideoRes failed %d\n", ret);
	}
	return ret;
}

//*******************************************************************
//! @brief		R8J66030FT 壒惡PLL愝掕張棟
//! @retval		張棟寢壥
//! @param		UseCrystal(I):PLL庬暿<BR>
//! @note		GeneralControl儗僕僗僞4(0x44)偺彂崬傒傪峴偆
//! @attention	<BR>
//! @author		Y.Takeuchi
//! @date		07/07/31
//*******************************************************************
IW	_dvHdmiRxSetR8J66030FTSetAudioCrystal(UB UseCrystal)
{
	IW ret = HDMIDRV_OK;
	UB	reg[2];

	// GeneralControl儗僕僗僞4愝掕
	reg[0] = GENERAL_CONTROL_REG4_ADDR;
	reg[1] = gHdmiRxDrvR8J66030FTReg.GeneralControlReg4 & ~X_POT;
	reg[1] |= UseCrystal;

	// 儗僕僗僞彂崬傒
	ret = _HdmiRxDrvRegWrite(DV_HDMIRX_DEF_SLAVE_ADDR, sizeof(reg), reg);
	if (ret == HDMIDRV_OK) {
		// 儈儔乕儗僕僗僞峏怴
		gHdmiRxDrvR8J66030FTReg.GeneralControlReg4 = reg[1];
	} else {
		HdmiRxDrvErrCatch("_dvHdmiRxSetR8J66030FTSetAudioPath failed %d\n", ret);
		return ret;
	}
	return ret;
}

/* #AUDIO_PLL ADD S 2007/11/01 Y.Takeuchi */
//*******************************************************************
//! @brief		R8J66030FT 壒惡PLL愝掕張棟
//! @retval		張棟寢壥
//! @param		UseCrystal(I):PLL庬暿<BR>
//! @note		GeneralControl儗僕僗僞4(0x44)偺彂崬傒傪峴偆
//! @attention	<BR>
//! @author		Y.Takeuchi
//! @date		07/07/31
//*******************************************************************
IW	_dvHdmiRxSetR8J66030FTSetCTSAutoAdjustMode(UB Mode)
{
	IW ret = HDMIDRV_OK;
	UB	reg[2];

	// GeneralControl儗僕僗僞4愝掕
	reg[0] = GENERAL_CONTROL_REG4_ADDR;
	reg[1] = gHdmiRxDrvR8J66030FTReg.GeneralControlReg4 & ~CTS_ADJ_DIS;
	reg[1] |= Mode;

	// 儗僕僗僞彂崬傒
	ret = _HdmiRxDrvRegWrite(DV_HDMIRX_DEF_SLAVE_ADDR, sizeof(reg), reg);
	if (ret == HDMIDRV_OK) {
		// 儈儔乕儗僕僗僞峏怴
		gHdmiRxDrvR8J66030FTReg.GeneralControlReg4 = reg[1];
	} else {
		HdmiRxDrvErrCatch("_dvHdmiRxSetR8J66030FTSetCTSAutoAdjustMode failed %d\n", ret);
		return ret;
	}
	return ret;
}
/* #AUDIO_PLL ADD E 2007/11/01 Y.Takeuchi */

//*******************************************************************
//! @brief		R8J66030FT 壒惡宱楬愝掕張棟
//! @retval		張棟寢壥
//! @param		AudioPath1(I):宱楬愝掕張棟忣曬1<BR>
//! @param		AudioPath2(I):宱楬愝掕張棟忣曬2<BR>
//! @note		GeneralControl儗僕僗僞4(0x44)偺彂崬傒偲
//!				GeneralControl儗僕僗僞5(0x45)偺彂崬傒傪峴偆
//! @attention	X_OPT偲SF_MODE偺椉曽偑桳岠偱側偄偲僒儞僾儕儞僌廃攇悢
//!				偺愝掕偑 峴偊側偄偨傔杮娭悢偱偼X_POT偼忢偵桳岠
//!				働乕僽儖枹愙懕専弌帪摍偱X_POT傪柍岠偵偡傞応崌偼
//!				_dvHdmiRxSetR8J66030FTSetAudioCrystal()傪幚峴偡傞偙偲
//! @author		Y.Takeuchi
//! @date		07/03/22
//*******************************************************************
IW	_dvHdmiRxSetR8J66030FTSetAudioPath(UB AudioPath1, UB AudioPath2)
{
	IW ret = HDMIDRV_OK;
	UB	reg[2];

	// GeneralControl儗僕僗僞4愝掕
	reg[0] = GENERAL_CONTROL_REG4_ADDR;
	/* #AUDIO_PLL CHG S 2007/11/01 Y.Takeuchi */
	// 儈儔乕儗僕僗僞偐傜X_Opt CTS_ADJ_DIS偺抣傪庢摼
	reg[1] = gHdmiRxDrvR8J66030FTReg.GeneralControlReg4 & (X_POT | CTS_ADJ_DIS);
	reg[1] |= AudioPath1 | SF_MODE;
	/* #AUDIO_PLL CHG E 2007/11/01 Y.Takeuchi */
	// 儗僕僗僞彂崬傒
	ret = _HdmiRxDrvRegWrite(DV_HDMIRX_DEF_SLAVE_ADDR, sizeof(reg), reg);
	if (ret == HDMIDRV_OK) {
		// 儈儔乕儗僕僗僞峏怴
		gHdmiRxDrvR8J66030FTReg.GeneralControlReg4 = reg[1];
	} else {
		HdmiRxDrvErrCatch("_dvHdmiRxSetR8J66030FTSetAudioPath failed %d\n", ret);
		return ret;
	}

	// 擮偺偨傔10ms懸偪
	WAIT(IIC_WAIT_TIME);

	// GeneralControl儗僕僗僞5愝掕
	reg[0] = GENERAL_CONTROL_REG5_ADDR;
	reg[1] = gHdmiRxDrvR8J66030FTReg.GeneralControlReg5;
	// MCLK_SEL價僢僩傪棊偲偡
	reg[1] &= ~0x03;
	// MCLK_SEL價僢僩傪愝掕
	reg[1] |= AudioPath2;
	// 儗僕僗僞彂崬傒
	ret = _HdmiRxDrvRegWrite(DV_HDMIRX_DEF_SLAVE_ADDR, sizeof(reg), reg);
	if (ret == HDMIDRV_OK) {
		// 儈儔乕儗僕僗僞峏怴
		gHdmiRxDrvR8J66030FTReg.GeneralControlReg5 = reg[1];
	} else {
		HdmiRxDrvErrCatch("_dvHdmiRxSetR8J66030FTSetAudioPath failed %d\n", ret);
	}
	return ret;
}

//*******************************************************************
//! @brief		R8J66030FT 壒惡宱楬愝掕忣曬庢摼
//! @retval		張棟寢壥
//! @param		AudioPath1(O):宱楬愝掕張棟忣曬1<BR>
//! @param		AudioPath2(O):宱楬愝掕張棟忣曬2<BR>
//! @attention	<BR>
//! @author		Y.Takeuchi
//! @date		07/03/22
//*******************************************************************
IW	_dvHdmiRxR8J66030FTGetAudioPath(UB * AudioPath1, UB * AudioPath2)
{
	IW ret = HDMIDRV_OK;

	*AudioPath1 = gHdmiRxDrvR8J66030FTReg.GeneralControlReg4;
	*AudioPath2 = gHdmiRxDrvR8J66030FTReg.GeneralControlReg5;
	return ret;
}

//*******************************************************************
//! @brief		R8J66030FT 壒惡怣崋僒儞僾儕儞僌廃攇悢偺庢摼
//! @retval		張棟寢壥
//! @param		AudioPath1(O):宱楬愝掕張棟忣曬1<BR>
//! @note		GeneralControl儗僕僗僞4(0x44)偺SF_R傪撉傒崬傓
//! @attention	<BR>
//! @author		Y.Takeuchi
//! @date		07/04/18
//*******************************************************************
IW	_dvHdmiRxR8J66030FTGetAudioSampleFreq(UB * SampleFreq)
{
	IW ret = HDMIDRV_OK;
	UB reg = GENERAL_CONTROL_REG4_ADDR;

	*SampleFreq = 0xFF;

	// General Control Reg4撉崬傒
	ret = _HdmiRxDrvRegRead(DV_HDMIRX_DEF_SLAVE_ADDR, sizeof(reg), &reg);
	if (ret == HDMIDRV_OK) {
		reg = reg & 0x07;
		// Audio InfoFrame偺宍幃偵偁傢偣傞偨傔偵僀儞僋儕儊儞僩偟偰偍偔
		// InfoFrame 32kHz:"1" General Control Reg4 32kHz:"0"
		reg++;
		*SampleFreq = reg;
	}
	return ret;
}

//*******************************************************************
//! @brief		R8J66030FT SPDIF僠儍儞僱儖儗僕僗僞忣曬偺庢摼
//! @retval		張棟寢壥
//! @param		Size(I)丗撉崬傒儗僕僗僞僒僀僘<BR>
//! @param		OutParam(O)丗SPDIF僠儍儞僱儖儗僕僗僞忣曬<BR>
//! @note		GeneralControl儗僕僗僞4(0x44)偺SF_R傪撉傒崬傓
//! @attention	<BR>
//! @author		Y.Takeuchi
//! @date		07/04/18
//*******************************************************************
IW _dvHdmiRxR8J66030FTGetAudioChannelStsReg(UB Size, UB* OutReg)
{
	IW ret;
	UB reg[5];

	reg[0] = 0x3E;
	// SPDIF 僠儍儞僱儖 儗僕僗僞撉崬傒
	ret = _HdmiRxDrvRegRead(DV_HDMIRX_DEF_SLAVE_ADDR, Size, reg);
	if (ret  == HDMIDRV_OK) {
		// SPDIF 僠儍儞僱儖 儗僕僗僞忣曬奿擺
		memcpy(OutReg, reg, Size);
	}
	return ret;
}

//*******************************************************************
//! @brief		R8J66030FT AVMute愝掕張棟
//! @retval		張棟寢壥
//! @param		AVMute(I):AVMute巜帵僼儔僌<BR>
//! @note		GeneralControl儗僕僗僞3(0x43)偺彂崬傒傪峴偆
//! @attention	<BR>
//! @author		Y.Takeuchi
//! @date		07/03/22
//*******************************************************************
IW	_dvHdmiRxR8J66030FTSetAudioVideoMute(UB AVMute)
{
	IW ret = HDMIDRV_OK;
	UB	reg[2] = {0, 0};

	// AV Mute愝掕
	// GeneralControl儗僕僗僞3 愝掕
	reg[0] = GENERAL_CONTROL_REG3_ADDR;
	reg[1] = gHdmiRxDrvR8J66030FTReg.GeneralControlReg3;
	// AVMute儗僕僗僞偺壓埵2bit傪棊偲偡
	reg[1] &= AV_MUTE_MASK;	 // 0xFC;
	// AVMute儗僕僗僞偺壓埵2bit愝掕
	reg[1] |= AVMute;
	// 儗僕僗僞彂崬傒
	ret = _HdmiRxDrvRegWrite(DV_HDMIRX_DEF_SLAVE_ADDR, sizeof(reg), reg);
	if (ret == HDMIDRV_OK) {
		// 儈儔乕儗僕僗僞峏怴
		gHdmiRxDrvR8J66030FTReg.GeneralControlReg3 = reg[1];
	} else {
		HdmiRxDrvErrCatch("_dvHdmiRxR8J66030FTSetAudioVideoMute failed %d\n", ret);
		return ret;
	}
	return ret;
}

//*******************************************************************
//! @brief		R8J66030FT AVMute忣曬庢摼張棟
//! @retval		張棟寢壥
//! @param		AV Mute(O):AV Mute巜帵僼儔僌<BR>
//! @note		儈儔乕 GeneralControl儗僕僗僞3(0x43)偺庢摼傪峴偆
//! @attention	<BR>
//! @author		Y.Takeuchi
//! @date		07/03/22
//*******************************************************************
IW	_dvHdmiRxR8J66030FTGetAudioVideoMute(UB * AVMute)
{
	IW ret = HDMIDRV_OK;
	* AVMute = gHdmiRxDrvR8J66030FTReg.GeneralControlReg3;
	return ret;
}

/* #HDCP_RESET ADD S 2007/11/07 Y.Takeuchi */
//*******************************************************************
//! @brief		R8J66030FT HDCP Bcap 儕僙僢僩
//! @retval		張棟寢壥
//! @param		void<BR>
//! @note		0x30 Bcap/Bstatus reg 偺弶婜壔傪峴偆
//! @attention	<BR>
//! @author		Y.Takeuchi
//! @date		07/11/07
//*******************************************************************
IW	_dvHdmiRxR8J66030FTHdcpBcapReset(void)
{
	IW ret = HDMIDRV_OK;
	UB	w_reg[4] = {0x30, 0x91, 0x00, 0x00};
	UB	r_reg[3] = {0x30, 0x00, 0x00};

	// 儗僕僗僞彂崬傒
	ret = _HdmiRxDrvRegWrite(DV_HDMIRX_DEF_SLAVE_ADDR, sizeof(w_reg), w_reg);
	if (ret != HDMIDRV_OK) {
		HdmiRxDrvErrCatch("_dvHdmiRxR8J66030FTHdcpBcapReset failed %d\n", ret);
		return ret;
	}
	// 擮偺偨傔10ms懸偪
	WAIT(IIC_WAIT_TIME);
	// 儗僕僗僞撉傒崬傒
	ret = _HdmiRxDrvRegRead(DV_HDMIRX_DEF_SLAVE_ADDR, sizeof(r_reg), r_reg);
#if 0
	// 彂崬傒僨乕僞偲撉傒崬傒僨乕僞偺堦抳傪妋擣
	if (memcmp(r_reg, &w_reg[1], sizeof(r_reg))) {
		HdmiRxDrvErrCatch("_dvHdmiRxR8J66030FTHdcpBcapReset write failed \n");
	}
#endif

	return ret;
}

//*******************************************************************
//! @brief		R8J66030FT HDCP KSV 儕僙僢僩
//! @retval		張棟寢壥
//! @param		void<BR>
//! @note		0x32 乣 0x33 KSV[0 - 7] reg 偺弶婜壔傪峴偆
//! @attention	<BR>
//! @author		Y.Takeuchi
//! @date		07/11/07
//*******************************************************************
IW	_dvHdmiRxR8J66030FTHdcpKSVReset(void)
{
	IW ret = HDMIDRV_OK;
	UB w_reg[6];
	UB r_reg[5];
	UB i;

	for (i=0; i<8; i++) {
		memset(w_reg, 0x00, sizeof(w_reg));
		w_reg[0] = i + 0x32;
		// 儗僕僗僞彂崬傒
		ret = _HdmiRxDrvRegWrite(DV_HDMIRX_DEF_SLAVE_ADDR, sizeof(w_reg), w_reg);
		if (ret != HDMIDRV_OK) {
			HdmiRxDrvErrCatch("_dvHdmiRxR8J66030FTHdcpKSVReset failed %d\n", ret);
			return ret;
		}
		// 擮偺偨傔10ms懸偪
		WAIT(IIC_WAIT_TIME);
		memset(r_reg, 0x00, sizeof(r_reg));
		r_reg[0] = i + 0x32;
		// 儗僕僗僞撉傒崬傒
		ret = _HdmiRxDrvRegRead(DV_HDMIRX_DEF_SLAVE_ADDR, sizeof(r_reg), r_reg);
		if (memcmp(r_reg, &w_reg[1], sizeof(r_reg))) {
			HdmiRxDrvErrCatch("_dvHdmiRxR8J66030FTHdcpKSVReset write failed \n");
		}
		// 擮偺偨傔10ms懸偪
		WAIT(IIC_WAIT_TIME);
	}
	return ret;
}
/* #HDCP_RESET ADD E 2007/11/07 Y.Takeuchi */

//L4_Add
//*******************************************************************
//! @brief		R8J66030FT TMDS Sampling Logic Control Parameters愝掕張棟
//! @retval		張棟寢壥
//! @param		Param(I):TMDS Sampling Logic Control Parameters<BR>
//! @note		GeneralControl儗僕僗僞8(0x48)偺彂崬傒傪峴偆
//! @attention	<BR>
//! @author		
//! @date		
//*******************************************************************
IW	_dvHdmiRxR8J66030FTSetTMDSCtrl(UB Param)
{
	IW ret = HDMIDRV_OK;
	UB	reg[2] = {0, 0};

	// TMDS_SAMP愝掕
	// GeneralControl儗僕僗僞8 愝掕
	reg[0] = GENERAL_CONTROL_REG8_ADDR;
	reg[1] = gHdmiRxDrvR8J66030FTReg.GeneralControlReg8;
	// TMDS_SAMP儗僕僗僞偺4bit傪棊偲偡
	reg[1] &= TMDS_SAMP_MASK;	 // 0xC3;
	// TMDS_SAMP儗僕僗僞偺4bit愝掕
	reg[1] |= Param;
	// 儗僕僗僞彂崬傒
	ret = _HdmiRxDrvRegWrite(DV_HDMIRX_DEF_SLAVE_ADDR, sizeof(reg), reg);
	if (ret == HDMIDRV_OK) {
		// 儈儔乕儗僕僗僞峏怴
		gHdmiRxDrvR8J66030FTReg.GeneralControlReg8 = reg[1];
	} else {
		HdmiRxDrvErrCatch("_dvHdmiRxR8J66030FTSetTMDSCtrl failed %d\n", ret);
		return ret;
	}
	return ret;
}
//L4_Add

⌨️ 快捷键说明

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