📄 dvd.c
字号:
#include "ssd192X.h"
#include "i2c.h"
#include "dvd.h"
int CAM_WIDTH=720;
int CAM_HEIGHT=320;
int CAM_FRAME_RATE=70;
void cam_hw_init(void)
{
I2C i2c;
i2c.deviceID=I2C_DEVICE_ID;
i2c.bitRate=1;
ssd192X_i2c_init(&i2c);
ssd192X_i2c_writeb(&i2c, 0x2, 0xc2);
ssd192X_i2c_writeb(&i2c, 0x3, 0x23);
ssd192X_i2c_writeb(&i2c, 0x4, 0x00);
ssd192X_i2c_writeb(&i2c, 0x5, 0x00);
ssd192X_i2c_writeb(&i2c, 0x6, 0xe0);
ssd192X_i2c_writeb(&i2c, 0x7, 0xf6);
ssd192X_i2c_writeb(&i2c, 0x8, 0xc8);//0x08 for PAL mode;0xc8 for NTSC
ssd192X_i2c_writeb(&i2c, 0x9, 0x01);
ssd192X_i2c_writeb(&i2c, 0xa, 0xa0);
ssd192X_i2c_writeb(&i2c, 0xb, 0x60);
ssd192X_i2c_writeb(&i2c, 0xc, 0x7f);
ssd192X_i2c_writeb(&i2c, 0xd, 0x00);
ssd192X_i2c_writeb(&i2c, 0xe, 0x03);//0x33 for PAL,0x03 for NTSC
ssd192X_i2c_writeb(&i2c, 0x10, 0xc8);
ssd192X_i2c_writeb(&i2c, 0x11, 0x0c);
ssd192X_i2c_writeb(&i2c, 0x12, 0x01);
ssd192X_i2c_writeb(&i2c, 0x13, 0x80);
ssd192X_i2c_writeb(&i2c, 0x15, 0x14);
ssd192X_i2c_writeb(&i2c, 0x16, 0x00);
ssd192X_i2c_writeb(&i2c, 0x17, 0x00);
printk("***********dvd cam hw init\n");
SSD_IOW(REG_DV_VMEM_STR_ADDR1_0)= 0x3250; // Set Preview Memory Start Address
SSD_IOW(REG_DV_VMEM_STR_ADDR2_0)= 0x5820; // Set Preview Memory Start Address
SSD_IOW(REG_DV_DV0_START_ADDR_0)= 0x3250; // Set Digital Video Window Display Start Address
SSD_IOW(REG_DV_DV1_START_ADDR_0)= 0x5820; // Set Digital Video Window Display Start Address
//note the setting below is assuming a normal DVD player input,
//with dimension of 720x240
//the display target window have dimension of 160x120,
//to demonstrate horizontal and vertical scaling function,
//the crop window size is set to 640x240
//with horizontal and vertical downscaling of 4 and 2 respectively
//setup the crop window
SSD_IOW(REG_DV_HCROP_STR_0)=0x0028;
SSD_IOW(REG_DV_VCROP_STR_0)=12;//Philips codec specific 12:NTSC;0 for PAL mode
SSD_IOW(REG_DV_HCROP_SIZE_0)=0x0280;
SSD_IOW(REG_DV_VCROP_SIZE_0)=0x00f0;
SSD_IOB(REG_DV_VHDEC_RATIO)=0x02; // Set horizontal scaling = 4
SSD_IOB(REG_DV_VVDEC_RATIO)=0x01; // Set vertical scaling = 2
//below registers are something I have no idea. Please do not touch
SSD_IOW(REG_DV_NFRAME_POS_0)= 0x0002; // Set Frame Position
SSD_IOW(REG_DV_HORI_PERIOD_0)= 0x0270; // Set Horizontal Period
// WriteRegByte(REG_DV_TV_0,0x02);
// WriteRegByte(REG_DV_TV_1,0x2d);
// WriteRegByte(REG_DV_TV_2,0x01);
// WriteRegByte(0x17e, 0x3f); // DV test
// WriteRegByte(REG_DV_OP_MODE,0x12);
// below settting for 8 bit DVD mode only
SSD_IOB(REG_DV_OP_MODE)=0x02;
SSD_IOB(REG_DV_TV_0)=0x02;
SSD_IOB(REG_DV_TV_1)=0x0d;
SSD_IOB(REG_DV_TV_2)=0x01;
SSD_IOB(REG_VCLK_CONFIG_1)=0x04;//real chip =7; FPGA=4
SSD_IOB(REG_MAIN_WIN_ADDR_OFFSET0)=0x6e;
SSD_IOB(REG_SPECIAL_EFFECTS)=0x41;
SSD_IOW(REG_MAIN_WIN_DISP_START_ADDR0)=0x157b;
SSD_IOL(REG_PCLK_FREQ_RATIO_0)=0x0ffff;
// 176 x 220 pannel ssd1278
// SSD_IOB(REG_DV_HCROP_STR_0 )=0x8c;//(720-440)/2
// SSD_IOW(REG_DV_HCROP_SIZE_0)=0x1b8;//440
// SSD_IOB(REG_DV_VCROP_SIZE_0)=0xf0;//240
// SSD_IOB(REG_DV_VHDEC_RATIO )=0x1;
// SSD_IOB( REG_DV_VVDEC_RATIO)=0x0;
// casio 160x240 panel
SSD_IOB(REG_DV_HCROP_STR_0 )=40;//(720-640)/2
SSD_IOW(REG_DV_HCROP_SIZE_0)=640;//640
SSD_IOB(REG_DV_VCROP_SIZE_0)=0xf0;//240
SSD_IOB(REG_DV_VHDEC_RATIO )=0x2; // 2^2 = 4 (640/4=160)
SSD_IOB( REG_DV_VVDEC_RATIO)=0x0; // 2^0 = 1 (240/1=240)
/* debug(">>>>>>>>>>>>>>>>>>%X\n",SSD_IOW(REG_DV_HCROP_SIZE_0)); */
}
void cam_hw_still(void)
{
// bt656 / field stuff select
printk("**********dvd cam hw still\n");
SSD_IOB(REG_DV_FRAME_PULSE_WIDTH)= 0x08;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -