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

📄 saa7113.c

📁 视频A/D转换,输出656格式,直接在KEIL下编译即可
💻 C
字号:
#include <REG52.H>
#include <intrins.h>
#include "i2c_vc.h"
#include "sys.h"
bit I2C_ERROR;					// I2C总线数据传输出错标志
#define DeviceaddressW  0x4A	//7113器件写地址
#define DeviceaddressR  0x4B	//7113器件读地址
uchar Subaddress;
uchar code SAA7113_regaddress[28]={ //初始化代码
	  	0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,
 		0x0,0x10,0x11,0x12,0x13,0x15,0x16,0x17,0x40,0x58,0x59,0x5A,0x5B,0x5E};
uchar code I2C_REG_VALUE_AI11[28]={ 
		0x08,0xC2,0x33,0x00,0x00,0xEB,0xE0,0xB8,0x01,0x7E,0x46,0x43,0x01,0x01,
 		0x0F,0x00,0x0C,0xA7,0x00,0x00,0x00,0x00,0x02,0x00,0x54,0x07,0x80,0x00};

/*
static unsigned char SAA7113_Init[][2] ={///-----前端输入通道部分---- 
{0x01,  0x08},
{0x02,  0xC0},
{0x03,  0x33},
{0x04,  0x00},
{0x05,  0x00},
//-------解码部分------
{0x06,  0xEB},//default E9 采用缺省的会导致图形往右偏移
{0x07,  0xE0},//default 0D
{0x08,  0xB8},//9C
{0x09,  0x01},//[PAL:01, NTSC:41]
{0x0A,  0x80},//[PAL:80, NTSC:95]
{0x0B,  0x47},//[PAL:47, NTSC:48]
{0x0C,  0x42},//40/
{0x0D,  0x01},//default 00
{0x0E,  0x01},
{0x0F,  0x0F},//24
{0x10,  0x00},//00 VRLN=1
{0x11,  0x0C},
{0x12,  0x7B},//7B 这部分控制RTS1-VREF(50Hz), RTS0-HREF(15.6kHz) 输出
{0x13,  0x00},//01
{0x15,  0x00},
{0x16,  0x00},
{0x17,  0x00},
//-------常规分离数据部分------
{0x40,  0x02},
{0x41,  0xFF},
{0x42,  0xFF},
{0x43,  0xFF},
{0x44,  0xFF},
{0x45,  0xFF},
{0x46,  0xFF},
{0x47,  0xFF},
{0x48,  0xFF},
{0x49,  0xFF},
{0x4A,  0xFF},
{0x4B,  0xFF},
{0x4C,  0xFF},
{0x4D,  0xFF},
{0x4E,  0xFF},
{0x4F,  0xFF},
{0x50,  0xFF},
{0x51,  0xFF},
{0x52,  0xFF},
{0x53,  0xFF},
{0x54,  0xFF},
{0x55,  0xFF},
{0x56,  0xFF},
{0x57,  0xFF},
{0x58,  0x40},
{0x59,  0x54},//horizontal offset for slicer 
{0x5A,  0x07},//vertical offset for slicer [PAL:07 NTSC:0A]
{0x5B,  0x83},//83field offset and MSBs for horizontal and vertical offset
{0x5C,  0x00},
{0x5D,  0x00},
{0x5E,  0x00},
{0x00,  0x00}};
*/
/*NTSC时试试看08寄存器,把它强制在60Hz状态。

2、试试看12寄存器,选择不同的V和H*/

/*寄存器0x02:输入端口选择:=0xC2选择输入端口AI21(PIN43)*/
/*
SAA7113 的地址从00H 开始,其中14H、18H~1EH、20H~3FH、63H~FFH 均为保留地址,没有用到,
00H、1FH、60H~62H 为只读寄存器,只有以下寄存器可以读写:0 1 H ~ 0 5 H (前端输入通道部分) ,
06H~13H、15H~17H(解码部分),40H~60H(常规分离数据部分)。
*/
/*Status byte video decoder subaddress 1Fh
RDCAPready for capture (all internal loops locked); active HIGH (OLDSB = 0)          D0
CODEcolor signal in accordance with selected standard has been detected;active HIGH (OLDSB = 1)

COPRO copy protected source detected according to Macrovision version up to 7.01 (OLDSB = 0) 
SLTCAslow time constant active in WIPA mode; active HIGH (OLDSB = 1)                D1

WIPA white peak loop is activated; active HIGH                                      D2
GLIMB gain value for active luminance channel is limited[min(bottom)];active HIGH   D3
FIDTidentification bit for detected field frequency; LOW = 50 Hz,HIGH=60Hz          D5
HLVLNstatus bit for horizontal/vertical loop: LOW = locked, HIGH = unlocked(OLDSB= 0) D6
INTLstatus bit for interlace detection; LOW = non-interlaced,HIGH=interlaced          D7*/
//;***********送非应答位***********
/*void SEND_NOACK(void){ 
	SDA=1;
	_nop_();
    SCL=1;
	_nop_();
	_nop_();
    SCL=0;
	_nop_();
 }*/
void CHECK_ACK(void){
	_nop_();

    SCL=0;
	_nop_();
    SDA=1;
	_nop_();
    SCL=1;
	_nop_();
	_nop_();
    I2C_ERROR=SDA;
    SCL=0;
	_nop_();
}
void I2C_SEND_1BYTE(uchar sendbyte)
{
	uchar j=8;
	for(;j>0;j--)
   	{
   		SCL=0;
   		sendbyte<<=1;        //无论C51怎样实现这个操作,始终会使CY=sendbyte^7;
   		SDA=CY;
   		SCL=1;
   }
	SCL=0;
}

//;;;;;;;;;*******通过I2C总线向某一寄存器写入一个字节数据*********
void Saa7113_IIC_W(uchar reg_addr,uchar data_a){
			I_start();
			I2C_SEND_1BYTE(DeviceaddressW);//发送7113地址及“写”命令
			CHECK_ACK();//检查7113的应答信号
			if(I2C_ERROR==0) //;如果7113的应答信号正确
				{	
					I2C_SEND_1BYTE(reg_addr); //发送寄存器地址
					CHECK_ACK();
					if(I2C_ERROR==0){ //;如果7113的应答信号正确
						I2C_SEND_1BYTE(data_a);//发送数据字节
						CHECK_ACK();	
					}}
			I_stop();
}

//***************初始化7113,配置各寄存器************************
void  INIT_SAA7113(void){
	uchar i;
	for(i=0;i<28;i++){/*SAA7113寄存器初始化配置数据*/
		Saa7113_IIC_W(SAA7113_regaddress[i],I2C_REG_VALUE_AI11[i]);
		if(I2C_ERROR==1)break;
		}
		//WR_SAA7113(0x0a,0x88);

}
uchar check7113(uchar reg){//需调试
    //I2C_READ(0x08)//PAL,NTSC检测
	//I2C_READ(0x0e)//0x0e:设置制式	,默认PAL G
	//0X11 0X12
	return(rd_i2c_saa7113_data(DeviceaddressW,reg)); 
}

⌨️ 快捷键说明

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