📄 dm642main.c
字号:
/********************************************************************/
/* Copyright 2004 by SEED Incorporated. */
/* All rights reserved. Property of SEED Incorporated. */
/* Restricted rights to use, duplicate or disclose this code are */
/* granted through contract. */
/* */
/********************************************************************/
#include <csl.h>
#include <csl_emifa.h>
#include <csl_i2c.h>
#include <csl_gpio.h>
#include <csl_gpiohal.h>
#include <csl_irq.h>
#include <csl_chip.h>
#include <csl_dat.h>
#include "iic.h"
#include "vportcap.h"
#include "vportdis.h"
#include "sa7121h.h"
#include "TVP51xx.h"
#include "sdcrc.h"
#include "sddriver.h"
#include "sdconfig.h"
#include "sdhal.h"
#include "sdcmd.h"
#include "FAT16.h"
#include "mmc.h"
/*SEEDDM642的emifa的设置结构*/
EMIFA_Config Seeddm642ConfigA ={
0x00052078,/*gblctl EMIFA(B)global control register value */
/*将CLK6、4、1使能;将MRMODE置1;使能EK2EN,EK2RATE*/
0xffffffd3,/*cectl0 CE0 space control register value*/
/*将CE0空间设为SDRAM*/
0x73a28e01,/*cectl1 CE1 space control register value*/
/*Read hold: 1 clock;
MTYPE : 0000,选择8位的异步接口
Read strobe :001110;14个clock宽度
TA:2 clock; Read setup 2 clock;
Write hold :2 clock; Write strobe: 14 clock
Write setup :7 clock
-- ---------------
\ 14c /1c
\----------------/ */
0x22a28a22, /*cectl2 CE2 space control register value*/
0x22a28a42, /*cectl3 CE3 space control register value*/
0x57115000, /*sdctl SDRAM control register value*/
0x0000081b, /*sdtim SDRAM timing register value*/
0x001faf4d, /*sdext SDRAM extension register value*/
0x00000002, /*cesec0 CE0 space secondary control register value*/
0x00000002, /*cesec1 CE1 space secondary control register value*/
0x00000002, /*cesec2 CE2 space secondary control register value*/
0x00000073 /*cesec3 CE3 space secondary control register value*/
};
/*SEEDDM642的IIC的设置结构*/
I2C_Config SEEDDM642IIC_Config = {
0, /* master mode, i2coar;采用主模式 */
0, /* no interrupt, i2cimr;只写,不读,采用无中断方式*/
(20-5), /* scl low time, i2cclkl; */
(20-5), /* scl high time,i2cclkh; */
1, /* configure later, i2ccnt;*/
0, /* configure later, i2csar;*/
0x4ea0, /* master tx mode, */
/* i2c runs free, */
/* 8-bit data + NACK */
/* no repeat mode */
(75-1), /* 4MHz clock, i2cpsc */
};
CHIP_Config SEEDDM642percfg = {
CHIP_VP2+\
CHIP_VP0+\
CHIP_MCBSP1+\
CHIP_I2C
};
I2C_Handle hSeeddm642i2c;
int portNumber;
extern SA7121H_ConfParams sa7121hPAL[45];
extern SA7121H_ConfParams sa7121hNTSC[45];
Uint8 vFromat = 0;
Uint8 misc_ctrl = 0x6D;
Uint8 output_format = 0x47;
// 地址为0 for cvbs port1,选择复合信号做为输入
Uint8 input_sel = 0x00;
/*地址为0xf,将Pin27设置成为CAPEN功能*/
Uint8 pin_cfg = 0x02;
/*地址为1B*/
Uint8 chro_ctrl_2 = 0x14;
/*图像句柄的声明*/
VP_Handle vpHchannel0;
VP_Handle vpHchannel1;
VP_Handle vpHchannel2;
extern GPIO_Handle hGpio;
static Uint32 gpgc =
GPIO_GPGC_RMK
( GPIO_GPGC_GP0M_DEFAULT,
GPIO_GPGC_GPINT0M_PASSMODE,
GPIO_GPGC_GPINTPOL_DEFAULT,
GPIO_GPGC_LOGIC_DEFAULT,
GPIO_GPGC_GPINTDV_DEFAULT
);
static Uint32 gpen = GPIO_GPEN_OF(0xff);
static Uint32 gpdir = GPIO_GPDIR_OF(0);
static Uint32 gpval = GPIO_GPVAL_OF(GPIO_GPVAL_DEFAULT);
static Uint32 gphm = GPIO_GPHM_RMK(GPIO_GPHM_GPXHM_OF(0xF0));
static Uint32 gplm = GPIO_GPLM_RMK(GPIO_GPLM_GPXLM_OF(0xF0));
static Uint32 gppol = GPIO_GPPOL_RMK(GPIO_GPPOL_GPINTXPOL_DEFAULT);
/*确定图像的参数*/
int numPixels = 720;//每行720个像素
int numLines = 576;//每帧576行(PAL)
/*采集与显示缓冲区的首址*/
extern volatile Uint32 capYbuffer;
extern volatile Uint32 capCbbuffer;
extern volatile Uint32 capCrbuffer;
//Uint32 cap1[0xb4];
//Uint32 cap2[0xb4];
extern volatile Uint32 dis1Ybuffer = 0x80100000;
extern volatile Uint32 dis1Cbbuffer = 0x801675c0;
extern volatile Uint32 dis1Crbuffer = 0x8019b0a0;
extern volatile Uint32 dis2Ybuffer = 0x80200000;
extern volatile Uint32 dis2Cbbuffer = 0x802675c0;
extern volatile Uint32 dis2Crbuffer = 0x8029b0a0;
extern volatile Uint32 findY = 0x80300000;
extern volatile Uint32 findCb = 0x803675c0;
extern volatile Uint32 findCr = 0x8039b0a0;
extern Uint8 bmp[1078];
extern volatile Uint32 bmph = 0x803ffbca;
extern Uint16 c=0;
extern volatile Uint32 dis3Ybuffer = 0x80400000;
extern volatile Uint32 dis3Cbbuffer = 0x804675c0;
extern volatile Uint32 dis3Crbuffer = 0x8049b0a0;
/*图像格式标志*/
Uint8 NTSCorPAL = 0;
extern far void vectors();
extern volatile Uint32 capNewFrame,jzd;
extern volatile Uint32 disNewFrame;
extern volatile Uint8 error;
extern volatile Uint32 dst;
extern unsigned char threshold;
extern char name[150][6];
int x[500];
int y[500];
int n,j,m;
int line_x,line_t=120;
//unsigned char threshold;
unsigned address,address_s;
extern volatile Uint8 ED,ED1;
extern Uint8 clk;
//Uint8 test1[512],test2[512],rev[8];
//extern Uint8 test1[8062];
Uint8 ret;
/*此程序可将四个采集口的数据经过Video Port0送出*/
void main()
{
Uint8 addrI2C,ok;
int i,j;
/*-------------------------------------------------------*/
/* perform all initializations */
/*-------------------------------------------------------*/
/*Initialise CSL,初始化CSL库*/
CSL_init();
PCFGLOCK=0x10c0010c;
EVMDM642_waitusec(100);
//PERCFG=0x5c;
CHIP_config(&SEEDDM642percfg);
EVMDM642_waitusec(100);
/*----------------------------------------------------------*/
/*EMIFA的初始化,将CE0设为SDRAM空间,CE1设为异步空间
注,DM642支持的是EMIFA,而非EMIF*/
EMIFA_config(&Seeddm642ConfigA);
/*----------------------------------------------------------*/
/*中断向量表的初始化*/
//Point to the IRQ vector table
IRQ_setVecs(vectors);
IRQ_nmiEnable();
IRQ_globalEnable();
IRQ_map(IRQ_EVT_VINT2, 12);
IRQ_map(IRQ_EVT_VINT0, 11);
IRQ_map(IRQ_EVT_GPINT4, 4);
IRQ_map(IRQ_EVT_GPINT5, 5);
IRQ_map(IRQ_EVT_GPINT6, 6);
IRQ_reset(IRQ_EVT_VINT0);
IRQ_reset(IRQ_EVT_VINT2);
IRQ_reset(IRQ_EVT_GPINT4);
IRQ_reset(IRQ_EVT_GPINT5);
IRQ_reset(IRQ_EVT_GPINT6);
//打开GPIO句柄
hGpio = GPIO_open(GPIO_DEV0,GPIO_OPEN_RESET);
GPIO_reset(hGpio);
GPIO_pinEnable(hGpio,GPIO_PIN0);
GPIO_pinEnable(hGpio,GPIO_PIN2);
GPIO_pinEnable(hGpio,GPIO_PIN4);
GPIO_pinEnable(hGpio,GPIO_PIN1);
GPIO_pinEnable(hGpio,GPIO_PIN3);
GPIO_pinEnable(hGpio,GPIO_PIN8);
GPIO_pinEnable(hGpio,GPIO_PIN5);
GPIO_pinEnable(hGpio,GPIO_PIN6);
//GPIO_RSET(GPEN,0x73);
//GPIO_RSET(GPDIR,0x01);
//GPIO_RSET(GPHM,0x70);
//GPIO_RSET(GPLM,0x70);
//GPIO_RSET(GPLM,0x70);
//GPIO_RSET(GPPOL,0x70);
//GPIO配置
GPIO_configArgs(hGpio,gpgc,gpen,gpdir,gpval,gphm,gplm,gppol);
GPIO_pinDirection(hGpio,GPIO_PIN4,GPIO_INPUT);
GPIO_pinDirection(hGpio,GPIO_PIN5,GPIO_INPUT);
GPIO_pinDirection(hGpio,GPIO_PIN6,GPIO_INPUT);
GPIO_pinDirection(hGpio,GPIO_PIN0,GPIO_OUTPUT);
GPIO_pinDirection(hGpio,GPIO_PIN2,GPIO_INPUT);
GPIO_pinDirection(hGpio,GPIO_PIN8,GPIO_OUTPUT);
GPIO_pinDirection(hGpio,GPIO_PIN3,GPIO_OUTPUT);
GPIO_pinDirection(hGpio,GPIO_PIN1,GPIO_OUTPUT);
GPIO_intPolarity(hGpio,GPIO_GPINT4,GPIO_RISING);//GPIO_FALLING);
GPIO_intPolarity(hGpio,GPIO_GPINT5,GPIO_RISING);//GPIO_FALLING);
GPIO_intPolarity(hGpio,GPIO_GPINT6,GPIO_RISING);//GPIO_FALLING);
IRQ_enable(IRQ_EVT_GPINT4);
IRQ_enable(IRQ_EVT_GPINT5);
IRQ_enable(IRQ_EVT_GPINT6);
/*打开一个数据拷贝的数据通路*/
DAT_open(DAT_CHAANY, DAT_PRI_LOW, DAT_OPEN_2D);
/*----------------------------------------------------------*/
/*进行IIC的初始化*/
hSeeddm642i2c = I2C_open(I2C_PORT0,I2C_OPEN_RESET);
I2C_config(hSeeddm642i2c,&SEEDDM642IIC_Config);
/*----------------------------------------------------------*/
/*进行TVP5150pbs的初始化*/
/*选择TVP5150,设置第三通路*/
//GPIO_RSET(GPGC,0x0);/*将GPIO0不做为GPINT使用*/
//GPIO_RSET(GPDIR,0x1);/*将GPIO0做为输出*/
//GPIO_RSET(GPVAL,0x1);/*GPIO0输出为高,选择IIC1总线,配置
// 第二路,即为U22*/
//EVMDM642_waitusec(3000000);
GPIO_pinWrite(hGpio,GPIO_PIN0,0);
EVMDM642_waitusec(100);
addrI2C = 0xBA>>1;
EVMDM642_waitusec(100);
_IIC_write(hSeeddm642i2c, addrI2C,0x00, input_sel);
_IIC_write(hSeeddm642i2c, addrI2C,0x01, 0x14);
//_IIC_write(hSeeddm642i2c, addrI2C,0x07, 0x60);
//_IIC_write(hSeeddm642i2c, addrI2C,0x04, 0xDC);
//_IIC_write(hSeeddm642i2c, addrI2C,0x08, 0x02);
_IIC_write(hSeeddm642i2c, addrI2C,0x03, 0x69);//misc_ctrl);
//_IIC_write(hSeeddm642i2c, addrI2C,0x09, 0xff);
// _IIC_write(hSeeddm642i2c, addrI2C,0x0A, 0x80);
//_IIC_write(hSeeddm642i2c, addrI2C,0x1A, 0x00);
//_IIC_write(hSeeddm642i2c, addrI2C,0x0C, 0x80);
_IIC_write(hSeeddm642i2c, addrI2C,0x0D, output_format);
_IIC_write(hSeeddm642i2c, addrI2C,0x0F, pin_cfg);
_IIC_write(hSeeddm642i2c, addrI2C,0x1B, chro_ctrl_2);
_IIC_write(hSeeddm642i2c, addrI2C,0x06, 0x50);
/*_IIC_write(hSeeddm642i2c, addrI2C,0x00, input_sel);
_IIC_write(hSeeddm642i2c, addrI2C,0x03, misc_ctrl);
_IIC_write(hSeeddm642i2c, addrI2C,0x0D, output_format);
_IIC_write(hSeeddm642i2c, addrI2C,0x0F, pin_cfg);
_IIC_write(hSeeddm642i2c, addrI2C,0x1B, chro_ctrl_2);*/
//_IIC_read(hSeeddm642i2c, 0xBA,0x8c, &vFromat);
EVMDM642_waitusec(100);
addrI2C = 0x54 >>1;
_IIC_write(hSeeddm642i2c, addrI2C,0x00,0x05);
_IIC_write(hSeeddm642i2c, addrI2C,0x01,0x10);
_IIC_write(hSeeddm642i2c, addrI2C,0x02,0x00);
_IIC_write(hSeeddm642i2c, addrI2C,0x03,0x00);
_IIC_write(hSeeddm642i2c, addrI2C,0x04,0x00);
_IIC_write(hSeeddm642i2c, addrI2C,0x07,0x00);
_IIC_write(hSeeddm642i2c, addrI2C,0x08,0x00);
_IIC_write(hSeeddm642i2c, addrI2C,0x09,0xCB);
_IIC_write(hSeeddm642i2c, addrI2C,0x0A,0x8A);
_IIC_write(hSeeddm642i2c, addrI2C,0x0B,0x09);
_IIC_write(hSeeddm642i2c, addrI2C,0x0C,0x2A);
_IIC_write(hSeeddm642i2c, addrI2C,0x0D,0x00);
_IIC_write(hSeeddm642i2c, addrI2C,0x0E,0x00);
_IIC_write(hSeeddm642i2c, addrI2C,0x0F,0x00);
_IIC_write(hSeeddm642i2c, addrI2C,0x10,0x00);
_IIC_write(hSeeddm642i2c, addrI2C,0x11,0x00);
_IIC_write(hSeeddm642i2c, addrI2C,0x12,0x00);
_IIC_write(hSeeddm642i2c, addrI2C,0x13,0x00);
_IIC_write(hSeeddm642i2c, addrI2C,0x14,0x00);
_IIC_write(hSeeddm642i2c, addrI2C,0x15,0x00);
_IIC_write(hSeeddm642i2c, addrI2C,0x16,0x00);
_IIC_write(hSeeddm642i2c, addrI2C,0x17,0x00);
_IIC_write(hSeeddm642i2c, addrI2C,0x18,0x00);
_IIC_write(hSeeddm642i2c, addrI2C,0x19,0x00);
/*******************************************************************************************/
SD_Initialize();
EVMDM642_waitusec(15000);
InitFat16();
for(i=0;i<100;i++)
{ Uint16 index;
DIR dir;
if(GetFileID(name[c],&dir,&index)==1)
c=c+1;
else
break;
}
for(i=0;i<1078;i++)
{
*(Uint8 *)(bmph+i)=bmp[i];
}
/*----------------------------------------------------------*/
/*进行SAA7121H的初始化*/
//GPIO_RSET(GPVAL,0x0);/*GPIO0输出为低,选择IIC1总线,配置图像输出*/
//addrI2C = 0xBA >>1; /*选择第0路的I2C的地址*/
//EVMDM642_waitusec(100);
/*将第0路的视频输入口的数据口设为高阻状态,
使能SCLK,将第27脚设为输入*/
//_IIC_write(hSeeddm642i2c, addrI2C,0x03, 0x1);
/*配置SAA7121H*/
//GPIO_RSET(GPVAL,0x1);/*GPIO0输出为低,选择IIC1总线,配置图像输出*/
/*初始化Video Port0*/
/*将Vedio Port1设为encoder输出*/
//portNumber = 2;
vpHchannel0 = bt656_8bit_ncfd(2);
/*addrI2C = 0x88 >>1;
for(i =0; i<43; i++)
{
if(NTSCorPAL == 1)
{
_IIC_write(hSeeddm642i2c,
addrI2C,
(sa7121hNTSC[i].regsubaddr),
(sa7121hNTSC[i].regvule));
}
else
{
_IIC_write(hSeeddm642i2c,
addrI2C,
(sa7121hPAL[i].regsubaddr),
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -