dm642main.c

来自「这是DM642(EVM开发板)的视频采集和视频输出的一个很好的例子原代码,用CC」· C语言 代码 · 共 106 行

C
106
字号

#include <csl.h>
#include <csl_emifa.h>
#include <csl_i2c.h>
#include <csl_gpio.h>
#include <csl_irq.h>
#include <csl_chip.h>
#include "iic.h"/*总线配置头文件*/
#include "vportcap.h"/*采集通道头文件*/
#include "vportdis.h"/*显示通道头文件*/
#include "sa7121h.h"/*sa7121头文件*/


/*DM642的IIC的设置结构*/
I2C_Config DM642IIC_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  */
};

static Uint8 saa7113_ta[]={
	0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,
	0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,
	0x11,0x12,0x13,0x15,0x16,0x17,0x40,0x58,
	0x59,0x5a,0x5b,0x5e
};


static Uint8 saa7113_tv[]={
	0x08,0xc3,0x33,0x00,0x00,0x0eb,0x0e0,0x0B8,
	0x01,0x7E,0x46,0x43,0x01,0x01,0x0F,0x00,
	0x0c,0xA7,0x00,0x00,0x00,0x00,0x02,0x00,
	0x54,0x07,0x80,0x00
};


I2C_Handle hdm642i2c;//I2C句柄
int portNumber;
/*图像句柄的声明*/
VP_Handle vpHchannel0;//通道0的句柄
VP_Handle vpHchannel1;//通道1的句柄
VP_Handle vpHchannel2;//通道2的句柄
extern far void vectors();//调用中断向量表
#define	 DM642_SDRAM_BASE   0x80000000 //指定DM642的外部存储器CEO的基址

/*此程序可将四个采集口的数据经过Video Port0送出*/
void main()
{
	Uint8	i;
	Uint8 addrI2C;
	
/*-------------------------------------------------------*/
/* perform all initializations                           */
/*-------------------------------------------------------*/
	DM642_init(); //初始化DM642
/*----------------------------------------------------------*/
	/*中断向量表的初始化*/
	//Point to the IRQ vector table
    IRQ_setVecs(vectors);  //指向中断向量表
    IRQ_nmiEnable();  //非屏蔽中断使能,nmi--非屏蔽中断
    IRQ_globalEnable();  //中断使能
    IRQ_map(IRQ_EVT_VINT0, 11);  //INT0中断产生11次
    IRQ_map(IRQ_EVT_VINT1, 12);  //INT1中断产生12次
    IRQ_reset(IRQ_EVT_VINT0);   //复位INT0中断
    IRQ_reset(IRQ_EVT_VINT1);  //复位INT1中断	
/*----------------------------------------------------------*/	

	/*进行IIC的初始化*/
//	hdm642i2c = I2C_open(I2C_PORT0,I2C_OPEN_RESET);
    hdm642i2c = DM642_I2C_hI2C;
	I2C_config(hdm642i2c,&DM642IIC_Config);   //I2C的配置
/*----------------------------------------------------------*/
	GPIO_RSET(GPGC,0x0);/*将GPIO0不做为GPINT使用*/
	GPIO_RSET(GPDIR,0x1);/*将GPIO0做为输出*/
	GPIO_RSET(GPVAL,0x0);/*GPIO0输出为高,选择IIC1总线,配置*/

// SAA7113 初始化						   
	addrI2C = 0x4A >>1;

	for(i = 0;i<28 ;i++)
	{
		_IIC_write(hdm642i2c, addrI2C,saa7113_ta[i], saa7113_tv[i]);
	}	
	

	       /*初始化Video Port0*/
        /*将Vedio Port0设为采集输入*/
	portNumber = 0;
	vpHchannel1 = bt656_8bit_ncfc(portNumber);
	bt656_capture_start(vpHchannel1);  //开始采集
	for(;;)
	{}
}


//======================================end=================================

⌨️ 快捷键说明

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