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

📄 cam.c

📁 以TI 公司的OMAP5910为例
💻 C
字号:
//////////////////////////////////////////////////////////////////////////
//            Copyright (C) 2004, Eyoka @ Microunit
//                           All Rights Reserved
//________________________________________________________________________
//
// FILENAME:    cam.c
// PROJECT:     High-Resolution Video System On OMAP
// MODULE:      MPU System
// DESCRIPTION: Camera Interface
// TARGET CPU:  ARM-925T of OMAP5910
// VERSION:     0.2
//________________________________________________________________________
//
// REVISE HISTORY
// DATE         VERSION AUTHOR  DESCRIPTION
// 2004-11-08   0.2     Eyoka   Checked.
// 2004-11-01   0.1     Eyoka   Created.
//////////////////////////////////////////////////////////////////////////

#include "cam.h"
#include "i2c.h"


/////////////////////////////////////////////////////////////////////
// FUNCTIONS
/////////////////////////////////////////////////////////////////////

//___________________________________________________________________
// Function: CAM_Init
// Usage: Initialize Camera Interface
// Parameters:		N/A
// Return Values:	N/A
//___________________________________________________________________
//
void CAM_Init(void)
{
	CAM_Reset();

	// CAM_MODE: 1100010000
	//------------------------------------------------------
	// BIT		FIELD			VALUE	NOTES
	//------------------------------------------------------
	// 31-19	RESERVED		0...0
	// 18		RAZ_FIFO		0
	// 17		EN_FIFO_FULL	0		Disable FIFO full interrupt
	// 16		EN_NIRQ			0		Disabled in DMA mode
	// 15-9		THRESHOLD		1		DMA mode use 1
	// 8		DMA				1		Enable DMA Mode
	// 7		EN_H_DOWN		0		Disable end line interrupt
	// 6		EN_H_UP			0		Disable new line interrupt
	// 5		EN_V_DOWN		0		Disable end frame interrupt
	// 4		EN_V_UP			1		Enable new frame interrupt
	// 3		ORDERCAMD		0		not swapped
	// 2-0		RESERVED		000
	//------------------------------------------------------
	CAM_MODE = 0x00000310;
	
	//CAM_CTRLCLOCK: 11100101
	//------------------------------------------------------
	// BIT		FIELD			VALUE	NOTES
	//------------------------------------------------------
	// 31-8		RESERVED		0...0
	// 7		LCLK_EN			1		Enable incoming CAM.LCLK
	// 6		DPLL_EN			1		Enable the DPLL source (48 MHz)
	// 5		MCLK_EN			1		Enable internal clock of interface
	// 4		CAMEXCLK_EN		0		Disable CAM.EXCLK
	// 3		POLCLK			0		Data latched on the rising edge
	// 2-0		FOSCMOD			101		24 MHz (48 MHz/2)
	//------------------------------------------------------
	CAM_CTRLCLOCK = 0x000000E5;
}

//___________________________________________________________________
// Function: CAM_Start
// Usage: Start the Camera
// Parameters:		N/A
// Return Values:	N/A
//___________________________________________________________________
//
void CAM_Start(void)
{
	CAM_Enable(TRUE);

	// Reset chip
	while(!I2C_Write(CameraID, 0x12, 0xa4))
	{
		;	// empty loop
	}

	// select sync output polarity
	while(!I2C_Write(CameraID, 0x11, 0x40))
	{
		;	// empty loop
	}

	// Enable AGC, select 8 bit output format is YUYVYUYV
	// select YCbCr data signal as video output
	// also enable auto white balance.
	while(!I2C_Write(CameraID, 0x12, 0x24))
	{
		;	// empty loop
	}

	// Select 8 bit data format and enable auto adjust mode
	while(!I2C_Write(CameraID, 0x13, 0x21))
	{
		;	// empty loop
	}

	// Select QVGA(320*240) output and RGB gamma on
	while(!I2C_Write(CameraID, 0x14, 0x24))
	{
		;	// empty loop
	}

	while(!I2C_Write(CameraID, 0x15, 0x0))
	{
		;	// empty loop
	}

	while(!I2C_Write(CameraID, 0x2d, 0x95))
	{
		;	// empty loop
	}

	while(!I2C_Write(CameraID, 0x70, 0x83))
	{
		;	// empty loop
	}
	
	CAM_SyncFrame();
	CAM_ClearFIFO();
}

//___________________________________________________________________
// Function: CAM_Reset
// Usage: Reset the Camera Interface
// Parameters:		N/A
// Return Values:	N/A
//___________________________________________________________________
//
void CAM_Reset(void)
{
	CAM_GPIO = 0x00000001;
	Delay(100);
	CAM_GPIO = 0x00000000;
}

//___________________________________________________________________
// Function: CAM_Enable
// Usage: Enable/Disable the Camera Interface
// Parameters:
//	bEnable			TRUE to Enable, FALSE to Disable.
// Return Values:	N/A
//___________________________________________________________________
//
void CAM_Enable(BOOL bEnable)
{
	CAM_CTRLCLOCK = (bEnable<<4) | (CAM_CTRLCLOCK & 0xFFFFFFEF);
}

//___________________________________________________________________
// Function: CAM_SyncFrame
// Usage: Wait for synchronizing frame
// Parameters:		N/A
// Return Values:	N/A
//___________________________________________________________________
//
void CAM_SyncFrame(void)
{
	// wait for VSYNC rising edge
	while(!(CAM_STATUS & 0x00000001))
	{
		;	// empty loop
	}

	// wait for VSYNC falling edge
	while(CAM_STATUS & 0x00000001)
	{
		;	// empty loop
	}
}

//___________________________________________________________________
// Function: CAM_ClearFIFO
// Usage: Clear the FIFO
// Parameters:		N/A
// Return Values:	N/A
//___________________________________________________________________
//
void CAM_ClearFIFO(void)
{
	short i;
	DWORD dump;

	for(i=0; i<128; i++)
	{
		dump = CAM_CAMDATA;
	}

	CAM_PEAK_COUNTER = 0;
}



// the end
//////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

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