⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmos_sensor_exp.c

📁 这是EBF533试验板的源代码和使用说明手册
💻 C
字号:
/********************************************************
*
*   Copyright (c) 2007, BeiJing EFLAG Technology Co., LTD.
*   All rights reserved.
*
*   文件名称 : TFTLCD_Exp.c
*   摘 要    : TFTLCD实验
*
*   当前版本 : 
*   作 者    : 
*   完成日期 : 
*
*   取代版本 :
*   原作者   : 
*   修改内容 :
*   完成日期 : 
*
********************************************************/
#include <cdefBF533.h>
#include <ccblkfn.h>
#include <sys/exception.h>

#include "Exp_Config.h"
#include "i2c.h"
#include "sys_res.h"
#include "sys_func.h"


unsigned char DisplayBuffer[262][960];

/********************************************************
*
*	函数名        : Init_CPLD
*	函数功能      : 配置CPLD
*	函数输入参数  : 
*	函数输出      : 
*	说明          : 
*
********************************************************/
void Init_CPLD(void)
{
	*pCtrlClrReg1 = 0xff;
    Delay(0x100);
	*pCtrlSetReg1 = 0x30;
	Delay(0x100);
	*pCtrlSetReg2 = 0x01;
	Delay(0x100);

		    
}


/********************************************************
*
*	函数名        : Init_Sensor
*	函数功能      : 配置CMOS Sensor
*	函数输入参数  : 
*	函数输出      : 
*	说明          : 
*
********************************************************/
void Init_Sensor(void)
{
	unsigned char dataIn[40];
	
	I2C_Init(MT9V111_IDENT_W);

	//Select "CORE"
 	I2C_Write_16(0x00,0x04,0x01);
	I2C_Read_16(&dataIn[0],&dataIn[1],0x36);
	I2C_Read_16(&dataIn[2],&dataIn[3],0x03);
	I2C_Read_16(&dataIn[4],&dataIn[5],0x04);
	I2C_Read_16(&dataIn[6],&dataIn[7],0x07);

	//Select "IFP"
	I2C_Write_16(0x00,0x01,0x01);

	//Set Image Size(CIF:352*288)
	I2C_Write_16(0x01,0x60,0xa7);
	I2C_Write_16(0x01,0x20,0xaa);
	
	I2C_Write_16(0x01,0x02,0x3a);
	
	I2C_Read_16(&dataIn[8],&dataIn[9],0x08);

	//Check  Chip Version
	if((dataIn[0] != 0x82) || (dataIn[1] != 0x3a))
	{
		while(1);
	}
}

/********************************************************
*
*	函数名        : Init_PPI
*	函数功能      : 初始化PPI配置
*	函数输入参数  : 
*	函数输出      : 
*	说明          : 
*
********************************************************/
void Init_PPI(void)
{
	//The PPI is set to receive 525 lines for each frame
	*pPPI_FRAME = 288;
	*pPPI_COUNT = 703;
	*pPPI_DELAY = 0;
	//PPI enabled, input mode, active video only, receive field 1&2, 
	//packing enabled, DMA32 enabled, skipping disabled, 8bit data bus, nothing inverted
	*pPPI_CONTROL = 0x001c;
}

/********************************************************
*
*	函数名        : Init_DMA0_PPI
*	函数功能      : 初始化PPI DMA配置
*	函数输入参数  : 
*	函数输出      : 
*	说明          : 
*
********************************************************/
void Init_DMA0_PPI(void)
{
	//Target address of the DMA
	*pDMA0_START_ADDR = 0x0;	
	//RAM_Length 32bit transfers will be executed
	*pDMA0_X_COUNT = 704;
	//The modifier is set to 4 because of the 32bit transfers
	*pDMA0_X_MODIFY = 0x1;
	*pDMA0_Y_COUNT	= 1000;
	*pDMA0_Y_MODIFY = 0x1;													
	//PPI Peripheral is used
	*pDMA0_PERIPHERAL_MAP = 0x0;	
	//DMA Config: Enable DMA | Memory write DMA | Discard DMA FIFO before start | enable assertation of interrupt | NDSIZE for stop mode | Enable STOP DMA
	//Enable 2D-DMA
	*pDMA0_CONFIG = 0x00b2;
}



/********************************************************
*
*	函数名        : DMA0_PPI_ISR
*	函数功能      : 中断服务程序
*	函数输入参数  : 
*	函数输出      : 
*	说明          : 
*
********************************************************/
EX_INTERRUPT_HANDLER(imageInFinish)	// <--|declaration in  exception.h -->
{
	//disable the interrupt request
	*pDMA0_IRQ_STATUS = 0x1;   // to clear interrupt bit	
	*pPPI_CONTROL &= 0xfffe;
	printf( "\nThe DMA0 PPI Interrupt has been entered!\n" );
	printf( "\nOpen Image Viewer\n" );
	printf( "\n [  Address       ] 0\n" );
	printf( "\n [  Pixel Fromat  ] UYVY(4:2:2)\n" );
	printf( "\n [  Width Pixel   ] 352\n" );
	printf( "\n [  Height Pixel  ] 288\n" );
	printf( "\nSetting OK\n" );
}


/********************************************************
*
*	函数名        : Init_Interrupt
*	函数功能      : 配置中断
*	函数输入参数  : 
*	函数输出      : 
*	说明          : 
*
********************************************************/
void Init_Interrupt(void)
{
	register_handler(ik_ivg8,imageInFinish);
	*pSIC_IMASK = 0x00000100;
}


/********************************************************
*
*	函数名        : Start_imageIn_fromPPI1
*	函数功能      : 使能DMA和PPI
*	函数输入参数  : 
*	函数输出      : 
*	说明          : 
*
********************************************************/
void Start_CMOS_imageIn(void)
{
	*pDMA0_CONFIG = *pDMA0_CONFIG | 0x0001;
	ssync();
	*pPPI_CONTROL = *pPPI_CONTROL | 0x0001;
	ssync();
	*pTIMER_ENABLE = 0x0006;
	asm("ssync;");		
}



/********************************************************
*
*	函数名        : TFTLCD_Exp
*	函数功能      : 
*	函数输入参数  : 
*	函数输出      : 
*	说明          : 
*
********************************************************/
void CMOS_Sensor_Exp(void)
{
	Init_CPLD();	
	Init_Sensor();
	Init_PPI();
	Init_DMA0_PPI();
  	Init_Interrupt();

	Start_CMOS_imageIn();
	
    while (1)
    {
    	asm("nop;");
    }    
}

⌨️ 快捷键说明

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