?? video_software.c
字號(hào):
#include <io.h>
#include <stdio.h>
#include <system.h>
#include <alt_types.h>
#include "altera_avalon_pio_regs.h"
#define DELAY_TIME 4
#define TVP5150_ADD 0xba
#define Set_SDA IOWR_ALTERA_AVALON_PIO_DATA(SDA_BASE, 0x1)
#define Clr_SDA IOWR_ALTERA_AVALON_PIO_DATA(SDA_BASE, 0x0)
#define Set_SCL IOWR_ALTERA_AVALON_PIO_DATA(SCL_BASE, 0x1)
#define Clr_SCL IOWR_ALTERA_AVALON_PIO_DATA(SCL_BASE, 0x0)
void delay(unsigned int value)
{
unsigned int i;
for(i=0;i<value;i++)
;
}
void I2C_Start(void)
{
/* SDA -------_________
SCL ------------____ */
IOWR_ALTERA_AVALON_PIO_DIRECTION(SDA_BASE, 0x1);
IOWR_ALTERA_AVALON_PIO_DIRECTION(SCL_BASE, 0x1);
Set_SDA; //SDA = 1
Set_SCL; //SCL = 1
delay(DELAY_TIME);
Clr_SDA; //SDA = 0
delay(DELAY_TIME);
Clr_SCL; //SCL = 0
delay(DELAY_TIME);
}
void I2C_Send_Byte(unsigned char d)
{
/* MSB
SDA ______-------------__________
SCL _________-------_____________ */
unsigned char i = 8;
IOWR_ALTERA_AVALON_PIO_DIRECTION(SDA_BASE, 0x1);
IOWR_ALTERA_AVALON_PIO_DIRECTION(SCL_BASE, 0x1);
Clr_SDA;
Clr_SCL;
delay(DELAY_TIME);
while( i-- )
{
if (d&0x80)
Set_SDA;
else
Clr_SDA;
delay(DELAY_TIME);
Set_SCL;
delay(DELAY_TIME);
Clr_SCL;
delay(1);
Clr_SDA;
delay(DELAY_TIME);
d = d << 1;
}
}
void Check_Ack(void)
{
/* SDA ____zzzzzzzzzzzzz
SCL ____------_______ */
unsigned char a=1;
IOWR_ALTERA_AVALON_PIO_DIRECTION(SDA_BASE, 0x0);
IOWR_ALTERA_AVALON_PIO_DIRECTION(SCL_BASE, 0x1);
Set_SDA; // SDA = "Z" for input model
delay(DELAY_TIME);
Set_SCL; // SCL = 1
delay(DELAY_TIME);
a=IORD_ALTERA_AVALON_PIO_DATA(SDA_BASE);
delay(DELAY_TIME);
/* Clr_SCL;
delay(DELAY_TIME);
if(a==1)
printf("not receive ack\n");
else
printf("receive ack\n"); */
while(a)
{
a=IORD_ALTERA_AVALON_PIO_DATA(SDA_BASE);
delay(DELAY_TIME);
}
Clr_SCL;
delay(40);
}
void I2C_Stop(void)
{
/* SDA _________--------
SCL ____------------- */
IOWR_ALTERA_AVALON_PIO_DIRECTION(SDA_BASE, 0x1);
IOWR_ALTERA_AVALON_PIO_DIRECTION(SCL_BASE, 0x1);
Clr_SDA; //SDA = 0
Clr_SCL; //SCL = 0
delay(DELAY_TIME);
Set_SCL; //SCL = 1
delay(DELAY_TIME);
Set_SDA; //SDA = 1
delay(DELAY_TIME);
Clr_SCL; //SCL = 0
delay(DELAY_TIME);
}
unsigned char I2C_Receive_Byte(void)
{
unsigned char rn = 8, data=0,rr=0x80;
IOWR_ALTERA_AVALON_PIO_DIRECTION(SDA_BASE, 0x0); //input model
IOWR_ALTERA_AVALON_PIO_DIRECTION(SCL_BASE, 0x1);
Clr_SCL;
Set_SDA; //SDA = "Z"
delay(DELAY_TIME);
for(;rn!=0;rn--)
{
Set_SCL;
delay(DELAY_TIME);
if (IORD_ALTERA_AVALON_PIO_DATA(SDA_BASE))
data|=rr;
else
data&=~rr;
delay(DELAY_TIME);
rr>>=1;
Clr_SCL;
delay(DELAY_TIME);
}
return data;
}
void I2C_Ack(void)
{
/* SDA _________________
SCL ____------_______ */
IOWR_ALTERA_AVALON_PIO_DIRECTION(SDA_BASE, 0x1);
IOWR_ALTERA_AVALON_PIO_DIRECTION(SCL_BASE, 0x1);
Clr_SDA;
delay(DELAY_TIME);
Set_SCL;
delay(DELAY_TIME);
Clr_SCL;
delay(DELAY_TIME);
}
void I2C_Nack(void)
{
/* SDA ___--------_____
SCL ____------_______ */
IOWR_ALTERA_AVALON_PIO_DIRECTION(SDA_BASE, 0x1);
IOWR_ALTERA_AVALON_PIO_DIRECTION(SCL_BASE, 0x1);
Set_SDA;
delay(DELAY_TIME);
Set_SCL;
delay(DELAY_TIME);
Clr_SCL;
delay(1);
Clr_SDA;
delay(DELAY_TIME);
}
void tvp5150_wr(unsigned char main_add, unsigned char sub_add,unsigned char data )
{
I2C_Start();
I2C_Send_Byte(main_add);
Check_Ack();
I2C_Send_Byte(sub_add);
Check_Ack();
I2C_Send_Byte(data);
Check_Ack();
I2C_Stop();
}
unsigned char tvp5150_rd(unsigned char main_add,unsigned char sub_add)
{
unsigned char rd_data;
I2C_Start();
I2C_Send_Byte( main_add );
Check_Ack();
I2C_Send_Byte( sub_add );
Check_Ack();
I2C_Stop();
I2C_Start();
I2C_Send_Byte( main_add+1 );
Check_Ack();
rd_data=I2C_Receive_Byte();
I2C_Nack();
I2C_Stop();
return rd_data;
}
unsigned char saa7121_rd(unsigned char main_add,unsigned char sub_add)
{
unsigned char rd_data;
I2C_Start();
I2C_Send_Byte( main_add );
Check_Ack();
I2C_Send_Byte( sub_add );
Check_Ack();
/* I2C_Stop();
I2C_Start();
I2C_Send_Byte( main_add );
Check_Ack();*/
rd_data=I2C_Receive_Byte();
//I2C_Nack();
I2C_Ack();
I2C_Stop();
return rd_data;
}
unsigned char tvp5150_init(void)
{
unsigned char buff=0x00;
tvp5150_wr(TVP5150_ADD,0x00,0x00); //AIP1A selected --default
if(tvp5150_rd(TVP5150_ADD,0x00)==0x00)
buff|=0x01;
else
buff&=0xfe;
tvp5150_wr(TVP5150_ADD,0x03,0x0d); //Enables the YCbCr output data, HSYNC, VSYNC/PALI, AVID, and FID/GLCO
if(tvp5150_rd(TVP5150_ADD,0x03)==0x0d)
buff|=0x02;
else
buff&=0xfd;
tvp5150_wr(TVP5150_ADD,0x04,0xc0); //Unmask NTSC-443, PAL-N, and PAL-M from the autoswitch process
if(tvp5150_rd(TVP5150_ADD,0x04)==0xc0)
buff|=0x04;
else
buff&=0xfb;
tvp5150_wr(TVP5150_ADD,0x0d,0x40); //Enables 8-bit 4:2:2 YCbCr with discrete sync output
if(tvp5150_rd(TVP5150_ADD,0x0d)==0x40)
buff|=0x08;
else
buff&=0xf7;
return (buff);
}
int main(void)
{
unsigned char temp=0x00;
while(1)
{
temp=tvp5150_init();
if(temp==0x0f)
{
temp=0x00;
printf("TVP5150 initial is success!\n");
}
else
{
temp=0x00;
printf("TVP5150 initial is failed\n");
}
delay(5000);
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -