📄 cam.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 + -