?? dm642main.c
字號:
#include <csl.h>
#include <csl_emifa.h>
#include <csl_i2c.h>
#include <csl_gpio.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"
/*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,//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*/
0xffffff03,//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*/
0x00000002,//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 = { //配置DSP工作環境,使能VP口,使能I2C模塊
CHIP_VP2+\
CHIP_VP1+\
CHIP_VP0+\
CHIP_I2C
};
I2C_Handle hSeeddm642i2c;
int portNumber;
int portNumber1;
int portNumber2;
extern SA7121H_ConfParams sa7121hPAL[45];
extern SA7121H_ConfParams sa7121hNTSC[45];
Uint8 vFromat = 0;//用于TVP5150寄存器配置
Uint8 misc_ctrl = 0x6D;//用于TVP5150寄存器配置
Uint8 output_format = 0x47;//用于TVP5150寄存器配置
// 地址為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;
/*確定圖像的參數*/
int numPixels = 720;//每行720個像素
int numLines = 576;//每幀576行(PAL)
/*采集與存儲緩沖區的首址*/
Uint32 capYbuffer = 0x80000000;
Uint32 capCbbuffer = 0x800675c0;
Uint32 capCrbuffer = 0x8009b0a0;
//Uint32 capCbbuffer = 0x6190;
//Uint32 capCrbuffer = 0x6190;
Uint32 disYbuffer = 0x80100000;
Uint32 disCbbuffer = 0x801675c0;
Uint32 disCrbuffer = 0x8019b0a0;
Uint32 disYbuffer1 = 0x80200000;
Uint32 disCbbuffer1 = 0x802675c0;
Uint32 disCrbuffer1 = 0x8029b0a0;
Uint32 disYbuffer2 = 0x80300000;
Uint32 disCbbuffer2 = 0x803675c0;
Uint32 disCrbuffer2 = 0x8039b0a0;
Uint32 disYbuffer3 = 0x80400000;
Uint32 disCbbuffer3 = 0x804675c0;
Uint32 disCrbuffer3 = 0x8049b0a0;
/*圖像格式標志*/
Uint8 NTSCorPAL = 0;
extern far void vectors();
/*圖像采集完成標志*/
extern volatile Uint32 capNewFrame;//u4采集完成標志,在VP口采集完成中斷程序中置一,
//表示當前圖像已經采集完成,下同。
extern volatile Uint32 capNewFrame1;//u2采集完成標志
extern volatile Uint32 capNewFrame2;//u7采集完成標志
extern volatile Uint32 capNewFrame3;//u9采集完成標志
extern volatile Uint32 disNewFrame;
/*EDMA打開標志與VP2口的A,B通道判斷標志*/
extern volatile Uint8 ED;
extern volatile Uint8 WV;
/*此程序可將四個采集口的數據經過Video Port0送出*/
void main()
{
Uint8 addrI2C;
int i;
/*-------------------------------------------------------*/
/* perform all initializations */
/*-------------------------------------------------------*/
/*Initialise CSL,初始化CSL庫*/
CSL_init();
CHIP_config(&SEEDDM642percfg);
/*----------------------------------------------------------*/
/*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_VINT1, 11);//即將VP1通道中斷對應為CPU中斷11.
IRQ_map(IRQ_EVT_VINT0, 10);//即將VP0通道中斷對應為CPU中斷10.
IRQ_map(IRQ_EVT_VINT2, 12);//即將VP2通道中斷對應為CPU中斷12.
IRQ_reset(IRQ_EVT_VINT1);
IRQ_reset(IRQ_EVT_VINT1);
/*打開一個數據拷貝的數據通路*/
DAT_open(DAT_CHAANY, DAT_PRI_LOW, DAT_OPEN_2D);
/*----------------------------------------------------------*/
/*進行IIC的初始化*/
hSeeddm642i2c = I2C_open(I2C_PORT0,I2C_OPEN_RESET);
I2C_config(hSeeddm642i2c,&SEEDDM642IIC_Config);
/*----------------------------------------------------------*/
/*燒寫flash時設置標志位*/
GPIO_RSET(GPGC,0x0);
GPIO_RSET(GPEN,0xffff);
GPIO_RSET(GPDIR,0xffff);
/* for(;;)
{
GPIO_RSET(GPVAL,0xffff);
EVMDM642_waitusec(100000);
GPIO_RSET(GPVAL,0x0);
EVMDM642_waitusec(100000);
}
*/
/*進行TVP5150pbs的初始化*/
/*選擇TVP5150,設置第三通路*/
GPIO_RSET(GPGC,0x0);/*將GPIO0不做為GPINT使用*/
GPIO_RSET(GPDIR,0x1);/*將GPIO0做為輸出*/
GPIO_RSET(GPVAL,0x0);/*GPIO0輸出為高,選擇IIC1總線,配置
各路采集通道,順序依次為u4,u2,u7,u9*/
addrI2C = 0xB8 >>1;
_IIC_write(hSeeddm642i2c, addrI2C,0x00, input_sel);//四個參數依次為I2C Handle(I2C_open函數返回值),
//從器件地址,寄存器地址,需要配置的寄存器值
_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, addrI2C,0x8c, &vFromat);
vFromat = vFromat & 0xff;
switch (vFromat)
{
case TVP51XX_NTSCM:
case TVP51XX_NTSC443:
NTSCorPAL = 1;/*系統為NTSC的模式*/
break;
case TVP51XX_PALBGHIN:
case TVP51XX_PALM:
NTSCorPAL = 0;/*系統為PAL的模式*/
break;
default:
NTSCorPAL = 2;/*系統為不支持的模式*/
break;
}
if(NTSCorPAL ==2)
{
/*系統不支持的模式,重新配置*/
for(;;)
{}
}
addrI2C = 0xBA >>1;
_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);
GPIO_RSET(GPVAL,0x1);
EVMDM642_waitusec(100);
addrI2C = 0xBA >>1;
_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);
EVMDM642_waitusec(100);
addrI2C = 0xB8 >>1;
_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);
EVMDM642_waitusec(100);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -