/*
* Copyright 2007 by Techshine Incorporated.
* All rights reserved.
* Author: lyj
*/
/*
* Video color2gray Test
*
*/
#include "tvp5146.h"
#define COLORBARS 1
#define LOOPBACK 0
#define SVIDEO_OUT 1
//#define COMPONENT_OUT 0
#define COMPOSITE_OUT 0
typedef struct __RGBC
{
Uint8 Red;
Uint8 Green;
Uint8 Blue;
}RGBCOLOR;
void PictureGray(Uint32 memaddr);
/* ------------------------------------------------------------------------ *
* *
* vpfe_init( ) *
* *
* NTSC: *
* Width: 720 *
* Height: 480 *
* *
* *
* ------------------------------------------------------------------------ */
void vpfe_init( Uint32 buffer, Uint32 width, Uint32 height )
{//同步、模式设置
VPFE_CCDC_SYN_MODE = 0//0x00032F84; // interlaced, with VD pority as negative
|(0<<19) //使能 SDRAM端口输出到resizer的输入,0=disable
|(0<<18) //使能 视频口video port,输出到SDRAM,0=disable
|(1<<17) //数据写使能,控制CCD列数据是否写入DDR,0=disable
|(1<<16) //vd/hd使能,如果hd、vd定义为输出,那么内部产生时序,否则外部产生
|(0<<15) //Field状态,表明当前的field状态,0=奇场,1=偶场
|(0<<14) //3 tap低通滤波器,0=off
|(2<<12) //INPMOD 数据输入模式,0=CCD Raw,1=YCbCr 16bit,2=YCbCr 8bit,3保留
|(1<<11) //每个象素的包大小,0=16bit/pixel,1=8bit/pixel
|(7<<8) //ccd 数据宽度,只有INPMOD=0(12bit-13bit)时有效
// 0=16bit,1=15bit,2=14bit,3=13bit,4=12bit
// 5=11bit,6=10bit,7=8bit
|(1<<7) //传感器场模式,0=逐行扫描,1=隔行
|(0<<6) //CCD数据极性
|(0<<5) //外部WEN信号选择,如果VDHDEN=1(16bit),设置此位将使CCD数据加载到DDR
// 0=不使用
|(0<<4) //场 指示器极性,0=正极,1=负极
|(0<<3) //HD同步极性,0=正极,1=负极
|(1<<2) //VD同步极性,0=正极,1=负极
|(0<<1) //场ID方向,0=输入,1=输出
|(0); //VD、HD同步方向,0=输入,1=输出
VPFE_CCDC_HD_VD_WID = 0; //HD,VD信号脉冲宽度寄存器
VPFE_CCDC_PIX_LINES = 0x02CF020D; //每行的水平象素,及一帧的行数
//0|(0x2cf<<16) //每行的水平象素719+1=720
//|(0x20d) //每帧或每场的半行数525+1=526
/*
* sph = 1, nph = 1440, according to page 32-33 of the CCDC spec
* for BT.656 mode, this setting captures only the 720x480 of the
* active NTSV video window
*/
VPFE_CCDC_HORZ_INFO = width << 1; // Horizontal lines
//水平象素信息,(31-16)=开始象素,(14-0)=输入到DDR的每行象素个数
VPFE_CCDC_HSIZE_OFF = width << 1; // Horizontal line offset
// 水平大小,(15-0)=每行的地址偏移,即跳行到DDR2读取数据?
// 5 lsb 忽略,最好是256字节的倍数
VPFE_CCDC_VERT_START = 0; // Vertical start line
// 垂直线开始象素(16-31)=SLV0(Field0),(0-14)=SLV1(Field0)
// 设定数据输入到DDR的开始行
VPFE_CCDC_VERT_LINES = height >> 1; // Vertical lines(14bit-0)
// 垂直线的线数
VPFE_CCDC_CULLING = 0xFFFF00FF; // Disable cullng,水平及垂直方向的选择方式
//(31-24)=偶场的水平选择,(23-16)=奇场的水平选择
// (15-8)=保留,(7-0)=垂直选择模式
/*
* Interleave the two fields
*/
VPFE_CCDC_SDOFST = 0//0x00000249; //DDR线偏移
|(0<<14) //场标志信号翻转,0=正常
|(0<<12) //场线偏移,0=+1线,1=+2线,2=+3线,3=+4线,
|(1<<9) //偶线和偶场的线偏移,0=+1,1=+2,2=+3,3=+4,4=-1,
// 5=-2,6=-3,7=-4,
|(1<<6) //奇线和偶场的线偏移,0=+1,1=+2,2=+3,3=+4,4=-1,
// 5=-2,6=-3,7=-4,
|(1<<3) //偶线和奇场的线偏移,0=+1,1=+2,2=+3,3=+4,4=-1,
// 5=-2,6=-3,7=-4,
|(1<<0); //奇线和奇场的线偏移,0=+1,1=+2,2=+3,3=+4,4=-1,
// 5=-2,6=-3,7=-4,
VPFE_CCDC_SDR_ADDR = buffer; //buffer DDR地址,最低5位忽略
VPFE_CCDC_CLAMP = 0//; //可选的黑色箝位设置
|(0<<31) //CLAMPEN ,CLAMP使能,0=禁止
|(0<<28) //采样象素长度,0=1pixel,为2^N(次幂),5-7保留
|(0<<25) //采样线长度,0=1 line,为2^N(次幂),5-7保留
|(0<<10) //采样的开始象素
|(0<<0); //bit4-bit0,平均增益
VPFE_CCDC_DCSUB = 0; //CCD数据要减去的值,当CLAMPEN=0时有效
VPFE_CCDC_COLPTN = 0xEE44EE44; //调色板设置
//0|(0<<30) //第三线调色板,3个象素,0=R,1=Gr,2=Gb,3=B
//|(0<<28) //CP3LPC2,象素个数=2
//|(0<<26) //CP3LPC1,象素个数=1
// |(0<<24) //CP3LPC0,象素个数=0
// |(0<<22) //第二线调色板
// |(0<<20)
// |(0<<18)
// |(0<<16)
// |(0<<14) //第一线调色板
// |(0<<12)
// |(0<<10)
// |(0<<8)
// |(0<<6) //第0线调色板
// |(0<<4)
// |(0<<2)
// |(0<<0);
VPFE_CCDC_BLKCMP = 0; //黑色补偿
//0|(0<<24) //R红色
//|(0<<16) //Gr
// |(0<<8) //Gb
// |(0<<0); //B蓝色
VPFE_CCDC_FPC_ADDR = 0x86800000; //不知道干吗用的
VPFE_CCDC_FPC = 0;
VPFE_CCDC_VDINT = 0; //VD中断时序,(30-16)=VDINT0,(14-0)=VDINT1
VPFE_CCDC_ALAW = 0; //a 率设置
VPFE_CCDC_REC656IF = 0//0x00000003; //rec656接口
|(1<<1) //FVH错误纠正使能
|(1<<0) ; //Rec656接口使能
/*
* Input format is Cb:Y:Cr:Y, w/ Y in odd-pixel position
*/
VPFE_CCDC_CCDCFG = 0//0x00000800; //CCD配置寄存器
|(0<<15) //使能VSYNC内部的锁存功能,0=使用VSYNC锁存
|(0<<13) //MSBINVI,色度输入信号最高位是否在SDRAM中翻转,0=正常
|(0<<12) //DDR的字节是否交换,如果字节包已经使能,象素个数必须为偶数
// 0=正常
|(1<<11) //YCbCr 8bit输入时Y的位置,0=偶像素,1=奇象素