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