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

📄 tidtv_userapi.c

📁 ti的数字电视芯片 tvp9000的源码
💻 C
字号:
/*******************************************************************************
*	@ModuleName	::	TiDTV_UserApi.c
*	
*	@Copyright	::	Copyright 2005- Texas Instruments, Inc.
*	
*	@Description::	User defined APIs
*	
*	@History	::
*---------------------------------------
*	06-09-2005	W.Shi	Created
*******************************************************************************/

#include	<stdio.h>
#include	<string.h>
#include	"ucos_ii.h"

#include	"TvpArch.h"
#include	"TvpDefs.h"
#include	"Tvp9000.h"
#include	"TvpError.h"
#include	"TvpInt.h"
#include	"TvpHdm.h"
#include	"TvpInt926.h"
#include	"TvpUarts.h"
#include	"TvpEbi.h"
#include	"TvpTpp.h"
#include	"TvpIrrf.h"
#include	"TvpGpio.h"
#include	"TvpVideo.h"
#include	"TvpAudio.h"
#include	"TvpEncoder.h"

#include	"TiDTV_DataType.h"
#include	"TiDTV_SysCtrl.h"
#include	"TiDTV_UserApi.h"
#include	"TiDTV_Buffers.h"
#include	"TiDTV_PSIP.h"
#include	"TVP9K_I2C_Def.h"
#include	"TVP9K_NV_Def.h"
#include	"TVP9K_OSD_Def.h"
#include	"TiDTV_GLib.h"
#include	"TiDTV_GUI.h"
#include	"TiDTV_McuComm.h"
#include	"TiDTV_IrKey.h"
#include	"TiDTV_AvInput.h"
#include	"TiDTV_FlashMem.h"

//	#define	_DEBUG

#ifdef	_DEBUG
	static void TiDTV_DispCharSet(void);
#endif	/* _DEBUG */

//	TI_DTV_USER_STATE_DATA TiDTV_UserStateData;

/*******************************************************************************
*	@RoutineName:: TiDTV_UserInit
*
*	@Description:: User Initializations
*
*	@Input		:: none
*
*	@Output		:: none
*
*	@Return		:: none
*******************************************************************************/
void TiDTV_UserInit(void)
{
	//----------------------------------------------------------
	// System Date and Time (Local): backup from MCU
	// (updated through PSIP STT or XDS or RTC)
	//
	TiDTV_InitialUserPreferDataTable();
	memset(&TiDTV_SysDateTime, 0, sizeof(TiDTV_SysDateTime));
	
	//----------------------------------------------------------
	// System Management Structure: backup from Flash
	//
	memset(&TiDTV_SysCtrl, 0, sizeof(TiDTV_SysCtrl));
	
	TiDTV_SysCtrl.Version = 0x0013;		// Version number: ##.##
	TiDTV_SysCtrl.DaylightSavings = 1;	// Input = Daylight Savings Status: 1 = Yes, 0 = No
	TiDTV_SysCtrl.TimeZone = -6;		// Input = Time zone: [-12, +13], Dallas = -6
	
	TiDTV_SysCtrl.AudioVolume = 32;		// Default Audio Volume value for Test only
	TiDTV_SysCtrl.MenuTimeOutValue = 16 * OS_TICKS_PER_SEC;		// Time out value for Menu Task
	TiDTV_SysCtrl.PromptMsgTimeOutValue = 2 * OS_TICKS_PER_SEC;	// Time out value for Prompt Message Task
	
	TiDTV_SysCtrl.ScaleMethod = TVP_VID_FILL_SCREEN;	// scaling format: TVP_VID_FILL_SCREEN/TVP_VID_CURTAIN
//	TiDTV_SysCtrl.AvInput = TI_DTV_AV_INPUT_A_VIDEO1;
	TiDTV_SysCtrl.AvInput = TI_DTV_AV_INPUT_MAX_NUM_PORT;
	
	//----------------------------------------------------------
	// Closed Captioning Contrl structure: backup from Flash
	//
	memset(&TiDTV_CcCtrl, 0, sizeof(TiDTV_CcCtrl));
	
	TiDTV_CcCtrl.CcTimeOutValue = 16 * OS_TICKS_PER_SEC;	// Time out value (ticks) for CC Automatic Erasing
	TiDTV_CcCtrl.DispCtrl = TI_DTV_CC_ENABLE;	// CC Contrl: Disable/Enable/On-Mute
	TiDTV_CcCtrl.Cc608SvcNo = 1;				// A-TVCC (608CC) Service number: 0, 1-4 (CC1-CC4), 5-8 (T1-T4)
	TiDTV_CcCtrl.Cc708SvcNo = 1;				// D-TVCC (708CC) Service number: 0, 1-6 (Service1-6)
	
	//----------------------------------------------------------
	// Restore some data from Flash/E2PROM
	//
	memset(&TiDTV_ProgTable, 0, sizeof(TiDTV_ProgTable));
	
	TiDTV_OsdBackColorCtrl(1);	// force Backgound Color
	
	//----------------------------------------------------------
	// Initialize IR Remote I/F
	//
#if	1
	TiDTV_InitIR(TI_DTV_IR_NEC_PROTOCOL, 0x10EF);
//	TiDTV_InitIR(TI_DTV_IR_NEC_PROTOCOL, 0x0099);
#else
	TiDTV_IrCtrl.pIrUserDefine = &TiDTV_RcaIrProtocol;
	TiDTV_IrCtrl.IrUserGetData = TiDTV_RcaIrGetData;
	TiDTV_InitIR(TI_DTV_IR_USER_DEFINE, 0x0000);
#endif
	
#ifdef	TVP9K_EVM
	// Configure Audio DAC: PCM1740E on TVP9KEVM
	// PCM1740E: 48KHz 256 OverSamp
	TiDTV_I2cWriteByte(0, 0, 0x98, 1, 0x02, 0x98, OS_TICKS_PER_SEC / 2);
	TiDTV_I2cWriteByte(0, 0, 0x98, 1, 0x03, 0x41, OS_TICKS_PER_SEC / 2);
#endif	/* TVP9K_EVM */
	
	// Initialize the Video Encoder
	TiDTV_InitVideoEnc();
	
	// Initialize Video Decoder (through I2C)
	TiDTV_InitVideoDec();
	
	// Initialize Audio Processor (through I2C)
//	TiDTV_InitMsp34x0G();
//----------------------------------------------------------
#ifdef	_DEBUG
	TiDTV_DispCharSet();	// Display the character set
#endif	/* _DEBUG */
//----------------------------------------------------------
	
#if	0
    // Disable HDMI_PD
    tvpGpioWrite(TVP_GPIO_0_CLK36_84, 0);
    
	TDA9975_HDCP(0x64, 0x1b);
	
	// GPIO30 to input for HDMI_VAI
    tvpGpioEnable(TVP_GPIO_30_DATAIN_3,
                  TVP_GPIO_INPUT,
                  TVP_ENABLE,
                  TVP_GPIO_HIGH_TO_LOW);
#endif
}

/*******************************************************************************
*	@RoutineName:: TiDTV_CommonMon
*
*	@Description:: common Monitor Function for Root Task
*
*	@Input		:: none
*
*	@Output		:: none
*
*	@Return		:: none
*******************************************************************************/
void TiDTV_CommonMon(void)
{
	// To do:
	
#if	0
	TiDTV_OsdInitScreen(&TiDTV_OsdScreenMain, 100, 84,
				TI_DTV_DISPLAY_SAFE_WIDTH - 100, TI_DTV_DISPLAY_SAFE_HEIGHT - 84);
	TiDTV_OsdMove(&TiDTV_OsdScreenMain, 0, 0);
	TiDTV_OsdSetCharColor(&TiDTV_OsdScreenMain, TI_DTV_COLOR_BRIGHT_WHITE, TI_DTV_COLOR_BLACK);
	TiDTV_OsdDrawAsciiStr(&TiDTV_OsdScreenMain, "12345678901234567890123456789012");
#endif
	
#if 0
	short i, j, x, y;
	UCHAR Color = 0;
	
	TiDTV_OsdInitScreen(&TiDTV_OsdScreenMain, 0, 0,
				TI_DTV_DISPLAY_SAFE_WIDTH, TI_DTV_DISPLAY_SAFE_HEIGHT);
	
	y = 50;
	for (i = 0; i < 16; i++, y += 32) {
		x = 200;
		for (j = 0; j < 16; j++, Color++, x += 40)
			TiDTV_OsdSolidRect(&TiDTV_OsdScreenMain, x, y, 32, 28, Color);
	}
#endif	
}

/*******************************************************************************
*	@RoutineName:: TiDTV_InitVideoEnc
*
*	@Description:: Video Encoder initializations
*
*	@Input		:: none
*
*	@Output		:: none
*
*	@Return		:: none
*******************************************************************************/
void TiDTV_InitVideoEnc(void)
{
	tvpEncInit(TVP_ENC_USE_DEFAULTS, TVP_ENC_USE_DEFAULTS, TVP_ENC_USE_DEFAULTS, TVP_ENC_USE_DEFAULTS);
	
	// Disable Color Bar
	tvpEncHdCustomControl(TVP_BYPASS_GAMMA, TVP_BYPASS_COLOR_DISABLED, TVP_BYPASS_UP_SAMPLE, TVP_HD_COLOR_BAR_DISABLED);
	
#ifdef	TVP9K_EVM
//---------------------------------------------------------
#if	defined(TI_DTV_DISPLAY_480i)
	// Configure the encoder for WVGA output, 8-bit YPbPr
	tvpEncHdConfig(TVP_HD_480I, TVP_HD_YUV, TVP_DVO_POST_COLOR, TVP_DVO_SINGLE_8, TVP_DVO_ACTIVE_HIGH);
	
	// Enable Y/Pb/Pr, disable CVBS & S-VIDEO
	tvpEncDacControl(TVP_ENC_DAC_ENABLE, TVP_ENC_DAC_ENABLE, TVP_ENC_DAC_ENABLE,
					TVP_ENC_DAC_ENABLE, TVP_ENC_DAC_ENABLE, TVP_ENC_DAC_ENABLE);
					
	tvpEncNtscPalConfig(TVP_NTSC_MJ_PEDESTAL, TVP_VIDEO_RANGE);
#elif defined(TI_DTV_DISPLAY_WVGA)
	// Configure the encoder for WVGA output, 16-bit YPbPr
	tvpEncHdConfig(TVP_HD_WVGA, TVP_HD_YUV, TVP_DVO_POST_COLOR, TVP_DVO_DOUBLE_8, TVP_DVO_ACTIVE_HIGH);
	
	// Enable Y/Pb/Pr, disable CVBS & S-VIDEO
	tvpEncDacControl(TVP_ENC_DAC_ENABLE, TVP_ENC_DAC_ENABLE, TVP_ENC_DAC_ENABLE,
					TVP_ENC_DAC_DISABLE, TVP_ENC_DAC_DISABLE, TVP_ENC_DAC_DISABLE);
#elif defined(TI_DTV_DISPLAY_WXGA)
	// Configure the encoder for WXGA output, 16-bit YPbPr
	tvpEncHdConfig(TVP_HD_WXGA, TVP_HD_YUV, TVP_DVO_POST_COLOR, TVP_DVO_DOUBLE_8, TVP_DVO_ACTIVE_HIGH);
	
	// Enable Y/Pb/Pr, disable CVBS & S-VIDEO
	tvpEncDacControl(TVP_ENC_DAC_ENABLE, TVP_ENC_DAC_ENABLE, TVP_ENC_DAC_ENABLE,
					TVP_ENC_DAC_DISABLE, TVP_ENC_DAC_DISABLE, TVP_ENC_DAC_DISABLE);
#else
	// Configure the encoder for 720p output, 16-bit YPbPr
	tvpEncHdConfig(TVP_HD_720P, TVP_HD_YUV, TVP_DVO_POST_COLOR, TVP_DVO_DOUBLE_8, TVP_DVO_ACTIVE_HIGH);
	
	// Enable Y/Pb/Pr, disable CVBS & S-VIDEO
	tvpEncDacControl(TVP_ENC_DAC_ENABLE, TVP_ENC_DAC_ENABLE, TVP_ENC_DAC_ENABLE,
					TVP_ENC_DAC_DISABLE, TVP_ENC_DAC_DISABLE, TVP_ENC_DAC_DISABLE);
#endif	/* TI_DTV_DISPLAY_WXGA */
	
//	tvpEncHdRegWrite(TVP_ENC_HD_CTRL_REG_0, 0x122053);
#else
//---------------------------------------------------------
#if defined(TI_DTV_DISPLAY_WVGA)
	// Configure the encoder for WVGA output, 24-bit RGB
	tvpEncHdConfig(TVP_HD_WVGA, TVP_HD_RGB, TVP_DVO_POST_COLOR, TVP_DVO_TRIPLE_8, TVP_DVO_ACTIVE_HIGH);
	
	tvpEncHdRegWrite(TVP_ENC_HD_CTRL_REG_10_USER, 0x20D43E);
	*(volatile ULONG *) 0x50028 = 0x20D43E;
	tvpEncHdRegWrite(TVP_ENC_HD_CTRL_REG_10_USER_DELTA, 1);
	
	tvpEncHdRegWrite(TVP_ENC_HD_CTRL_REG_12, 0x10358010);
//	tvpEncHdRegWrite(TVP_ENC_HD_CTRL_REG_15, 0xA00A0);
	
//	tvpEncHdRegWrite(TVP_ENC_HD_CTRL_REG2_16, 0x1B0104);
//	tvpEncHdRegWrite(TVP_ENC_HD_CTRL_REG2_17, 0x1B0140);
	tvpEncHdRegWrite(TVP_ENC_HD_CTRL_REG2_19, 0x3580010);
	
	tvpEncHdRegWrite(TVP_ENC_HD_CTRL_REG_0, 0x122053);
#elif defined(TI_DTV_DISPLAY_WXGA)
	// Configure the encoder for WXGA output, 24-bit RGB
	tvpEncHdConfig(TVP_HD_WXGA, TVP_HD_RGB, TVP_DVO_RAW_DATA, TVP_DVO_TRIPLE_8, TVP_DVO_ACTIVE_HIGH);
	
//-----------------------------------
#if	1	// 31.55MHz
	tvpEncHdRegWrite(TVP_ENC_HD_CTRL_REG_10_USER, 0x31B71A);
	*(volatile ULONG *) 0x50028 = 0x31B71A;
	tvpEncHdRegWrite(TVP_ENC_HD_CTRL_REG_10_USER_DELTA, 1);
	
	tvpEncHdRegWrite(TVP_ENC_HD_CTRL_REG_12, 0x20558050);
	tvpEncHdRegWrite(TVP_ENC_HD_CTRL_REG_15, 0xAB0AF);
	
	tvpEncHdRegWrite(TVP_ENC_HD_CTRL_REG2_16, 0x1B0104);
	tvpEncHdRegWrite(TVP_ENC_HD_CTRL_REG2_17, 0x1B0140);
	tvpEncHdRegWrite(TVP_ENC_HD_CTRL_REG2_19, 0x5580010);
#else	// 27MHz
	tvpEncHdRegWrite(TVP_ENC_HD_CTRL_REG_10_USER, 0x3265FE);	// for 27MHz: was 0x3265FE
	*(volatile ULONG *) 0x50028 = 0x3265FE;						// for 27MHz: was 0x3265FE
	tvpEncHdRegWrite(TVP_ENC_HD_CTRL_REG_10_USER_DELTA, 1);		// for 27MHz
	
	tvpEncHdRegWrite(TVP_ENC_HD_CTRL_REG_12, 0x20558050);
	tvpEncHdRegWrite(TVP_ENC_HD_CTRL_REG_15, 0xAB0AF);
	
	tvpEncHdRegWrite(TVP_ENC_HD_CTRL_REG2_16, 0x1B0104);
	tvpEncHdRegWrite(TVP_ENC_HD_CTRL_REG2_17, 0x1B0140);
	tvpEncHdRegWrite(TVP_ENC_HD_CTRL_REG2_19, 0x5580010);
#endif
//-----------------------------------
#else
	// Configure the encoder for 720p output, 24-bit RGB
	tvpEncHdConfig(TVP_HD_720P, TVP_HD_RGB, TVP_DVO_RAW_DATA, TVP_DVO_TRIPLE_8, TVP_DVO_ACTIVE_HIGH);
#endif	/* TI_DTV_DISPLAY_WXGA */
	
	// Disable all DACs (Y/Pb/Pr, CVBS & S-VIDEO)
	tvpEncDacControl(TVP_ENC_DAC_DISABLE, TVP_ENC_DAC_DISABLE, TVP_ENC_DAC_DISABLE,
					TVP_ENC_DAC_DISABLE, TVP_ENC_DAC_DISABLE, TVP_ENC_DAC_DISABLE);
#endif	/* TVP9K_EVM */
}

/*******************************************************************************
*	@RoutineName:: TiDTV_DispCharSet
*
*	@Description:: Display the character set
*
*	@Input		:: none
*
*	@Output		:: none
*
*	@Return		:: none
*******************************************************************************/
#ifdef	_DEBUG

#define	TOTAL_NUM_CHARS		214

static void TiDTV_DispCharSet(void)
{
	USHORT CharCode, Font;
	short i, j, k, y;
	
	TiDTV_OsdInitScreen(&TiDTV_OsdScreenMain, 0, 0, TI_DTV_DISPLAY_SAFE_WIDTH, TI_DTV_DISPLAY_SAFE_HEIGHT);
	TiDTV_OsdSetCharColor(&TiDTV_OsdScreenMain, TI_DTV_COLOR_BRIGHT_WHITE, 0);
	
	for (k = 0; k < 3; k++) {
		TiDTV_OsdScreenMain.pCurDrawWindow->CurCharAttrib.Bits.FontSize = k;
		for (Font = 0; Font < 8; Font++) {
			CharCode = TI_DTV_CHAR_SET_EIA708B + (Font << 9);
			i = 0;
			y = 20;
			while (i < TOTAL_NUM_CHARS) {
				TiDTV_OsdMove(&TiDTV_OsdScreenMain, 16, y);
				for (j = 0; j < 16 && i < TOTAL_NUM_CHARS; j++, CharCode++, i++) {
					TiDTV_OsdDrawChar(&TiDTV_OsdScreenMain, CharCode);
					TiDTV_OsdScreenMain.pCurDrawWindow->CurX += 8;
				}
				
				y += 30;	// next Row
			}
			
//			OSTimeDly(1 * OS_TICKS_PER_SEC);
			TiDTV_OsdClearWindow(&TiDTV_OsdScreenMain, &TiDTV_OsdScreenMain.pOsdWindows[0], 0);
		}
	}
}
#endif	/* _DEBUG */

⌨️ 快捷键说明

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