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

📄 dvhdmirxr8j66030ft.c

📁 the HDMI(High Definition Multimedia Interface) driver code
💻 C
📖 第 1 页 / 共 3 页
字号:

	reg[0] = INTRUPT_ENABLE_REG_ADDR;
	ret =  _HdmiRxDrvRegWrite(DV_HDMIRX_DEF_SLAVE_ADDR, sizeof(reg), reg);
	return ret;
}

//*******************************************************************
//! @brief		R8J66030FT偺妱崬傒儅僗僋夝彍
//! @retval		張棟寢壥
//! @param		<BR>
//! @note		<BR>
//! @attention	<BR>
//! @author		Y.Takeuchi
//! @date		07/05/07
//*******************************************************************
IW	_dvHdmiRxR8J66030FTSetIntrEnable()
{
	IW ret;
	UB reg[4] = {0, 0, 0, 0};

	reg[0] = INTRUPT_ENABLE_REG_ADDR;
	// 儈儔乕儗僕僗僞偐傜妱崬傒儗僕僗僞偺抣傪庢摼
	reg[1] = gHdmiRxDrvR8J66030FTReg.IntrMaskReg[0];
	reg[2] = gHdmiRxDrvR8J66030FTReg.IntrMaskReg[1];
	reg[3] = gHdmiRxDrvR8J66030FTReg.IntrMaskReg[2];
	ret =  _HdmiRxDrvRegWrite(DV_HDMIRX_DEF_SLAVE_ADDR, sizeof(reg), reg);
	return ret;

}

//*******************************************************************
//! @brief		妱崬傒捠抦CB娭悢搊榐
//! @retval		張棟寢壥
//! @param		CbFunc(I)丗妱崬傒捠抦CB娭悢<BR>
//! @note		<BR>
//! @attention	<BR>
//! @author		Y.Takeuchi
//! @date		07/04/13
//*******************************************************************
IW _dvHdmiRxR8J66030FTRegistCBIntrupt(void (*CbFunc)(void))
{
	gHdmiRxDrvIntrCbFunc = CbFunc;
}

//*******************************************************************
//! @brief		R8J66030FT偺揹尮抐
//! @retval		張棟寢壥
//! @param		<BR>
//! @note		<BR>
//! @attention	<BR>
//! @author		Y.Takeuchi
//! @date		07/03/22
//*******************************************************************
IW	_dvHdmiRxR8J66030FTPowerDown(void)
{
	IW ret = HDMIDRV_OK;
	UB	reg[2] = {0, 0};

	// 僒僗儁儞僪堏峴張棟幚峴
	// General Control Register 0 (0x40)愝掕
	reg[0] = GENERAL_CONTROL_REG0_ADDR;
	reg[1] = gHdmiRxDrvR8J66030FTReg.GeneralControlReg0;
	reg[1] |= PWR_DWN;
	ret = _HdmiRxDrvRegWrite(DV_HDMIRX_DEF_SLAVE_ADDR, sizeof(reg), reg);
	if (ret == HDMIDRV_OK) {
		gHdmiRxDrvR8J66030FTReg.GeneralControlReg0 = reg[1];
	} else {
		HdmiRxDrvErrCatch("_dvHdmiRxR8J66030FTPowerDown failed %d\n", ret);
	}

	return ret;
}

//*******************************************************************
//! @brief		R8J66030FT偺傾僋僥傿僽億乕僩曄峏
//! @retval		張棟寢壥
//! @param		PortNo(I):億乕僩斣崋<BR>
//! @note		杮API偼C4US偵偍偄偰偼巊梡偝傟側偄<BR>
//! @attention	<BR>
//! @author		Y.Takeuchi
//! @date		07/03/22
//*******************************************************************
IW	_dvHdmiRxR8J66030FTSelectPort(UB PortNo)
{
	IW ret = HDMIDRV_OK;
#ifdef HDMI_ASSP
	UB	reg[2] = {0, 0};

	// 傾僋僥傿僽億乕僩曄峏
	// General Control Register 0 (0x40)愝掕
	reg[0] = GENERAL_CONTROL_REG0_ADDR;
	reg[1] = gHdmiRxDrvR8J66030FTReg.GeneralControlReg0;
	reg[1] |= PortNo;
	ret = _HdmiRxDrvRegWrite(DV_HDMIRX_DEF_SLAVE_ADDR, sizeof(reg), reg);
	if (ret == HDMIDRV_OK) {
		gHdmiRxDrvR8J66030FTReg.GeneralControlReg0 = reg[1];
	} else {
		HdmiRxDrvErrCatch("_dvHdmiRxR8J66030FTSelectPort failed %d\n", ret);
	}
#endif
	return ret;
}

//*******************************************************************
//! @brief		R8J66030FT偺捛壛娔帇僷働僢僩1愝掕
//! @retval		張棟寢壥
//! @param		<BR>
//! @note		<BR>
//! @attention	<BR>
//! @author		Y.Takeuchi
//! @date		07/03/22
//*******************************************************************
IW	_dvHdmiRxR8J66030FTWatchUserPacket1(UB PacketType)
{
	IW ret = HDMIDRV_OK;
	UB	reg[2] = {0, 0};

	// 儐乕僓僷働僢僩1愝掕
	reg[0] = SELECT_PACKET_REG1;
	reg[1] = PacketType;
	ret = _HdmiRxDrvRegWrite(DV_HDMIRX_DEF_SLAVE_ADDR, sizeof(reg), reg);
	if (ret == HDMIDRV_OK) {
		gHdmiRxDrvR8J66030FTReg.UserPacketReg1 = reg[1];
	} else {
		HdmiRxDrvErrCatch("_dvHdmiRxR8J66030FTWatchUserPacket1 failed %d\n", ret);
		return ret;
	}
	return ret;
}

//*******************************************************************
//! @brief		R8J66030FT偺捛壛娔帇僷働僢僩2愝掕
//! @retval		張棟寢壥
//! @param		<BR>
//! @note		<BR>
//! @attention	<BR>
//! @author		Y.Takeuchi
//! @date		07/03/22
//*******************************************************************
IW	_dvHdmiRxR8J66030FTWatchUserPacket2(UB PacketType)
{
	IW ret = HDMIDRV_OK;
	UB	reg[2] = {0, 0};

	// 儐乕僓僷働僢僩2愝掕
	reg[0] = SELECT_PACKET_REG2;
	reg[1] = PacketType;
	ret = _HdmiRxDrvRegWrite(DV_HDMIRX_DEF_SLAVE_ADDR, sizeof(reg), reg);
	if (ret == HDMIDRV_OK) {
		gHdmiRxDrvR8J66030FTReg.UserPacketReg2 = reg[1];
	} else {
		HdmiRxDrvErrCatch("_dvHdmiRxR8J66030FTWatchUserPacket2 failed %d\n", ret);
		return ret;
	}
	return ret;
}

//*******************************************************************
//! @brief		R8J66030FT 庴怣僷働僢僩偺庢摼
//! @retval		張棟寢壥
//! @param		PacketID(I):僷働僢僩庬暿抣<BR>
//! @param		PacketLength(I):僷働僢僩挿<BR>
//! @param		PacketData(O):僷働僢僩奿擺僶僢僼傽<BR>
//! @note		<BR>
//! @attention	<BR>
//! @author		Y.Takeuchi
//! @date		07/03/22
//*******************************************************************
IW	_dvHdmiRxR8J66030FTGetPacket(UB  PacketID, UB  PacketLength, UB* PacketData)
{
	IW ret = HDMIDRV_OK;
	UB	length = PacketLength;

	// 忋埵憌偺僷働僢僩奿擺僶僢僼傽偺愭摢傪僋儕傾
	// 幐攕敾掕偵愭摢僶僀僩傪巊梡偡傞偨傔
	PacketData[0] = 0x00;

	switch(PacketID) {
		case DV_HDMIRX_DEF_AVI_INFOFRAME:	// AVI InfoFrame(0x82)
			gPacketDataBuff[0] = 0x2A;
			break;
		case DV_HDMIRX_DEF_AUDIO_INFOFRAME:	// Audio InfoFrame(0x84)
			gPacketDataBuff[0] = 0x2B;
			break;
		case DV_HDMIRX_DEF_ACP:				// ACP Packet
			if (gHdmiRxDrvR8J66030FTReg.UserPacketReg1 == DV_HDMIRX_DEF_ACP) {
				// 儐乕僓僷働僢僩1偱娔帇偟偰偄傞応崌
				gPacketDataBuff[0] = 0x2D;
			} else if (gHdmiRxDrvR8J66030FTReg.UserPacketReg2 == DV_HDMIRX_DEF_ACP) {
				// 儐乕僓僷働僢僩2偱娔帇偟偰偄傞応崌
				gPacketDataBuff[0] = 0x2E;
			} else {
				ret = DVHDMI_E_INVAL;
				return ret;
			}
			break;
		default:
			break;
	}
	// 儗僕僗僞撉崬傒
	ret = _HdmiRxDrvRegRead(DV_HDMIRX_DEF_SLAVE_ADDR, length, gPacketDataBuff);
	if (ret == HDMIDRV_OK) {
		if ((PacketID == DV_HDMIRX_DEF_AVI_INFOFRAME) || (PacketID == DV_HDMIRX_DEF_AUDIO_INFOFRAME)) {
			// R8J66030FT偺応崌 AVI InfoFrame Audio InfoFrame庴怣帪偵僷働僢僩庬暿偲僷働僢僩挿偑庢摼
			// 偱偒側偄偨傔帺暘偱愝掕偡傞昁梫偑偁傞
			// 忋埵憌(壖憐Drv)偱偼丄僷働僢僩忣曬偼慡偰僿僢僟乕 + 僨乕僞(僠僃僢僋僒儉娷傓)偲偟偰埖偆
			// 偨傔杮儌僕儏乕儖偱僨乕僞宍幃偺曄壔張棟傪峴偆
			PacketData[0] = PacketID;									// 僷働僢僩庬暿傪愝掕
			PacketData[1] = gPacketDataBuff[0];							// Version忣曬傪堏摦
			/* #AUDIO_PLL CHG S 2007/11/01 Y.Takeuchi */
			PacketData[2] = PacketLength - 2;							// 僨乕僞庢摼梡僷働僢僩挿偐傜Ver偲僠僃僢僋僒儉傪徣偄偨僷働僢僩挿傪愝掕
			/* #AUDIO_PLL CHG E 2007/11/01 Y.Takeuchi */
			memcpy(&PacketData[3], &gPacketDataBuff[1], (length-1));	// 僠僃僢僋僒儉 + 幚僨乕僞傪僐僺乕
		}
		/* #ACP_PACKET ADD S 2007/12/14 Y.Takeuchi */
		else {
			memcpy(PacketData, gPacketDataBuff, length);
		}
		/* #ACP_PACKET ADD E 2007/12/14 Y.Takeuchi */
	} else {
		HdmiRxDrvErrCatch("_dvHdmiRxR8J66030FTGetPacket failed %d\n", ret);
	}
	return ret;
}

//*******************************************************************
//! @brief		R8J66030FT 妱崬傒敪惗妋擣
//! @retval		張棟寢壥
//! @param		IntrSts(I):妱崬傒忬嫷<BR>
//! @note		<BR>
//! @attention	<BR>
//! @author		Y.Takeuchi
//! @date		07/03/22
//*******************************************************************
IW	_dvHdmiRxR8J66030FTCheckIntrupt(UB* IntrSts)
{
	IW ret = HDMIDRV_OK;
#ifdef HDMI_ASSP
	UB	reg[1];
#else
	UB	reg[3] = {0, 0, 0};
#endif

	// 妱崬傒僼儔僌撉崬傒
	reg[0] = INTRUPT_ENABLE_REG_ADDR;
	// 儗僕僗僞撉崬傒
	ret = _HdmiRxDrvRegRead(DV_HDMIRX_DEF_SLAVE_ADDR, sizeof(reg), reg);
	if (ret == HDMIDRV_OK) {
		memcpy(IntrSts, reg, sizeof(reg));
	} else {
		HdmiRxDrvErrCatch("_dvHdmiRxR8J66030FTCheckIntrupt failed %d\n", ret);
	}
	return ret;
}

//*******************************************************************
//! @brief		R8J66030FT 僗僥乕僞僗儗僕僗僞0 撉崬傒
//! @retval		張棟寢壥
//! @param		Reg(O):僗僥乕僞僗儗僕僗僞0<BR>
//! @note		<BR>
//! @attention	<BR>
//! @author		Y.Takeuchi
//! @date		07/03/22
//*******************************************************************
IW	_dvHdmiRxR8J66030FTGetStsReg0(UB* Reg)
{
	IW ret = HDMIDRV_OK;
	UB	reg = 0;

	// 僗僥乕僞僗儗僕僗僞0 撉崬傒
	reg = STATUS_REG0_ADDR;
	// 儗僕僗僞撉崬傒
	ret = _HdmiRxDrvRegRead(DV_HDMIRX_DEF_SLAVE_ADDR, sizeof(reg), &reg);
	if (ret == HDMIDRV_OK) {
		*Reg = reg;
		// 儈儔乕儗僕僗僞峏怴
		gHdmiRxDrvR8J66030FTReg.StatusReg0 = reg;
	} else {
		HdmiRxDrvErrCatch("_dvHdmiRxR8J66030FTGetStsReg0 failed %d\n", ret);
	}
	return ret;
}

//*******************************************************************
//! @brief		R8J66030FT 僗僥乕僞僗儗僕僗僞1 撉崬傒
//! @retval		張棟寢壥
//! @param		Reg(O):僗僥乕僞僗儗僕僗僞1<BR>
//! @note		<BR>
//! @attention	<BR>
//! @author		Y.Takeuchi
//! @date		07/03/22
//*******************************************************************
IW	_dvHdmiRxR8J66030FTGetStsReg1(UB* Reg)
{
	IW ret = HDMIDRV_OK;
	UB	reg = 0;

	// 僗僥乕僞僗儗僕僗僞1 撉崬傒
	reg = 0x3D;
	// 儗僕僗僞撉崬傒
	ret = _HdmiRxDrvRegRead(DV_HDMIRX_DEF_SLAVE_ADDR, sizeof(reg), &reg);
	if (ret == HDMIDRV_OK) {
		*Reg = reg;
		// 儈儔乕儗僕僗僞峏怴
		gHdmiRxDrvR8J66030FTReg.StatusReg1 = reg;
	} else {
		HdmiRxDrvErrCatch("_dvHdmiRxR8J66030FTGetStsReg1 failed %d\n", ret);
	}
	return ret;
}

//*******************************************************************
//! @brief		R8J66030FT Bcap/Bstatus 儗僕僗僞 撉崬傒
//! @retval		張棟寢壥
//! @param		Reg(O):僗僥乕僞僗儗僕僗僞1<BR>
//! @note		<BR>
//! @attention	<BR>
//! @author		Y.Takeuchi
//! @date		07/03/22
//*******************************************************************
IW	_dvHdmiRxR8J66030FTGetBStsReg(UB* Bsts, UB Size)
{
	IW ret = HDMIDRV_OK;
	UB	reg[3] = {0, 0, 0};

	// B僗僥乕僞僗儗僕僗僞撉崬傒
	reg[0] = 0x30;
	// 儗僕僗僞撉崬傒
	ret = _HdmiRxDrvRegRead(DV_HDMIRX_DEF_SLAVE_ADDR, sizeof(reg), reg);
	if (ret == HDMIDRV_OK) {
		// 嵟戝3僶僀僩僐僺乕
		if (Size > 3) {
			Size = sizeof(reg);
		}
		memcpy(Bsts, reg, Size);
	} else {
		HdmiRxDrvErrCatch("_dvHdmiRxR8J66030FTGetBStsReg failed %d\n", ret);
	}
	return ret;
}

//*******************************************************************
//! @brief		R8J66030FT 僺僋僙儖廃攇悢愝掕
//! @retval		張棟寢壥
//! @param		PixelFreq(I):僺僋僙儖廃攇悢<BR>
//! @note		<BR>
//! @attention	<BR>
//! @author		Y.Takeuchi
//! @date		07/05/08
//*******************************************************************
IW	_dvHdmiRxR8J66030FTSetPixelFreq(UB PixelFreq)
{
	IW ret = HDMIDRV_OK;
	UB	reg[2] = {0, 0};

	// 塮憸宱楬偺愝掕傪峴偆
	reg[0] = STATUS_REG0_ADDR;		// 僗僥乕僞僗儗僕僗僞0
	reg[1] = PixelFreq;
	// 儗僕僗僞彂崬傒
	ret = _HdmiRxDrvRegWrite(DV_HDMIRX_DEF_SLAVE_ADDR, sizeof(reg), reg);
	if (ret == HDMIDRV_OK) {
		// 儈儔乕儗僕僗僞峏怴
		gHdmiRxDrvR8J66030FTReg.StatusReg0 |= reg[1];
	} else {
		HdmiRxDrvErrCatch("_dvHdmiRxR8J66030FTSetPixelFreq failed %d\n", ret);
	}

	return ret;
}

/* #AV_MUTE ADD S 2007/11/07 Y.Takeuchi */
//*******************************************************************
//! @brief		R8J66030FT AVMUTE僋儕傾
//! @retval		張棟寢壥
//! @param		PixelFreq(I):僺僋僙儖廃攇悢<BR>
//! @note		<BR>
//! @attention	<BR>
//! @author		Y.Takeuchi
//! @date		07/05/08
//*******************************************************************
IW	_dvHdmiRxR8J66030FTClearAVMUTE(void)
{
	IW ret = HDMIDRV_OK;
	UB reg[2] = {0, 0};

	// 塮憸宱楬偺愝掕傪峴偆
	reg[0] = STATUS_REG0_ADDR;		// 僗僥乕僞僗儗僕僗僞0
	reg[1] = (gHdmiRxDrvR8J66030FTReg.StatusReg0 | AVMUTE_R) & 0xE0;
	// 儗僕僗僞彂崬傒
	ret = _HdmiRxDrvRegWrite(DV_HDMIRX_DEF_SLAVE_ADDR, sizeof(reg), reg);
	if (ret == HDMIDRV_OK) {
		// AVMUTE_R峏怴帪偼儈儔乕儗僕僗僞偺峏怴偼峴傢側偄
	} else {
		HdmiRxDrvErrCatch("_dvHdmiRxR8J66030FTClearAVMUTE failed %d\n", ret);
	}

	return ret;
}
/* #AV_MUTE ADD E 2007/11/07 Y.Takeuchi */

//*******************************************************************
//! @brief		R8J66030FT 塮憸宱楬愝掕張棟
//! @retval		張棟寢壥
//! @param		VideoPath(I):塮憸宱楬愝掕張棟<BR>
//! @note		GeneralControl儗僕僗僞2(0x42)偺彂崬傒傪峴偆<BR>
//! @attention	<BR>
//! @author		Y.Takeuchi
//! @date		07/03/22
//*******************************************************************
IW	_dvHdmiRxR8J66030FTSetVideoPath(UB VideoPath)
{
	IW ret = HDMIDRV_OK;
	UB	reg[2] = {0, 0};

	// 塮憸宱楬偺愝掕傪峴偆
	reg[0] = GENERAL_CONTROL_REG2_ADDR;		// GeneralControl儗僕僗僞2
	reg[1] = VideoPath;
	// 儗僕僗僞彂崬傒
	ret = _HdmiRxDrvRegWrite(DV_HDMIRX_DEF_SLAVE_ADDR, sizeof(reg), reg);

⌨️ 快捷键说明

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