|
#include <sysreg.h> #include <builtins.h> #include <defTS101.h>
#define SCL_START_COUNT 1200 #define SDA_START_COUNT 1200 #define SCL_START_REMAIN 600 #define SDA_SETUP 240 #define SCL_HIGH_COUNT 1200 #define SCL_LOW_COUNT 720 #define SCL_ACK_COUNT 720 #define SDA_STOP_COUNT 1200 #define SCL_LOW_REC 1200 #define SCL_HIGH_REC_PRE 480 #define SCL_HIGH_REC_LAT 720
extern void ack_function(); extern int ack_value;
void i2c(void);
void SDA_HIGH(void); void SDA_LOW(void); void SCL_HIGH(void); void SCL_LOW(void);
void i2c_initial(void); void i2c_start(void); void i2c_stop(void); int i2c_wrbyte(unsigned char data); unsigned char i2c_rdbyte(void); void i2c_ack(void); void delay(int count);
int sqctl_reg;
void SDA_HIGH(void) { sqctl_reg = sqctl_reg | 0x04000000; __builtin_sysreg_write(__SQCTL, sqctl_reg); }
void SDA_LOW(void) { sqctl_reg = sqctl_reg & 0xFBFFFFFF; __builtin_sysreg_write(__SQCTL, sqctl_reg); }
void SCL_HIGH(void) { sqctl_reg = sqctl_reg | 0x08000000; __builtin_sysreg_write(__SQCTL, sqctl_reg); }
void SCL_LOW(void) { sqctl_reg = sqctl_reg & 0xF7FFFFFF; __builtin_sysreg_write(__SQCTL, sqctl_reg); }
void i2c_initial(void) { sqctl_reg = __builtin_sysreg_read(__SQCTL); sqctl_reg = sqctl_reg | 0x00F00000; sqctl_reg = sqctl_reg | 0x0C000000; sqctl_reg = sqctl_reg & 0xFCFFFFFF; __builtin_sysreg_write(__SQCTL, sqctl_reg); }
void i2c_start(void) { SDA_HIGH(); SCL_HIGH(); delay(SCL_START_COUNT); SDA_LOW(); delay(SDA_START_COUNT); SCL_LOW(); }
void i2c_stop(void) { SDA_LOW(); delay(SDA_SETUP); SCL_HIGH(); delay(SDA_STOP_COUNT); SDA_HIGH(); }
int i2c_wrbyte(unsigned char data) { int i; int ack = 1; sqctl_reg = sqctl_reg | 0x00400000; __builtin_sysreg_write(__SQCTL, sqctl_reg); for(i=0;i<8;i++) { if((data<<i)&0x80) SDA_HIGH(); else SDA_LOW(); delay(SDA_SETUP); SCL_HIGH(); delay(SCL_HIGH_COUNT); SCL_LOW(); delay(SCL_LOW_COUNT); } sqctl_reg = sqctl_reg & 0xFFBFFFFF; sqctl_reg = sqctl_reg | 0x02000000; __builtin_sysreg_write(__SQCTL, sqctl_reg); SCL_HIGH(); delay(SCL_ACK_COUNT); ack_function(); ack = ack_value; SCL_LOW(); delay(SCL_LOW_COUNT); sqctl_reg = sqctl_reg | 0x00400000; sqctl_reg = sqctl_reg & 0xFDFFFFFF; __builtin_sysreg_write(__SQCTL, sqctl_reg); return(ack); }
unsigned char i2c_rdbyte(void) { int i; unsigned char data_rec = 0; sqctl_reg = sqctl_reg & 0xFFBFFFFF; sqctl_reg = sqctl_reg | 0x02000000; __builtin_sysreg_write(__SQCTL, sqctl_reg); for(i=0;i<8;i++) { SCL_LOW(); delay(SCL_LOW_REC); SCL_HIGH(); delay(SCL_HIGH_REC_PRE); ack_function(); data_rec = data_rec <<1; if (ack_value==1) data_rec = data_rec | 0x01; delay(SCL_HIGH_REC_LAT); } sqctl_reg = sqctl_reg | 0x0040000; sqctl_reg = sqctl_reg & 0xFDFFFFFF; __builtin_sysreg_write(__SQCTL, sqctl_reg); SCL_LOW(); delay(SCL_LOW_COUNT); return data_rec; }
void i2c_ack(void) { SDA_LOW(); delay(SCL_HIGH_REC_PRE); SCL_HIGH(); delay(SCL_HIGH_COUNT); SCL_LOW(); delay(SCL_HIGH_REC_PRE); } void delay(int count) { int i; for(i=0;i<count;i++) { } }
void i2c(void) { unsigned char i2c_data ; unsigned char i2c_rev_data = 0; /* cdc318a test */ i2c_initial(); i2c_start(); i2c_data = 0xd2; i2c_wrbyte(i2c_data); i2c_data = 0xff; i2c_wrbyte(i2c_data); i2c_data = 0xff; i2c_wrbyte(i2c_data); i2c_data = 0xff; i2c_wrbyte(i2c_data); i2c_data = 0xff; i2c_wrbyte(i2c_data); i2c_data = 0xff; i2c_wrbyte(i2c_data); i2c_stop();
/* ks0127_a test*/ //set CMDA address:0x01 value:2d i2c_initial(); i2c_start(); i2c_data = 0xd8; i2c_wrbyte(i2c_data); i2c_data = 0x01; i2c_wrbyte(i2c_data); i2c_data = 0x2d; i2c_wrbyte(i2c_data); i2c_stop(); i2c_start(); i2c_data = 0xd8; i2c_wrbyte(i2c_data); i2c_data = 0x01; i2c_wrbyte(i2c_data); i2c_stop(); i2c_start(); i2c_data = 0xd9; i2c_wrbyte(i2c_data); i2c_rev_data = i2c_rdbyte(); i2c_stop(); //set OFMTA address:0x1e value:10 i2c_initial(); i2c_start(); i2c_data = 0xd8; i2c_wrbyte(i2c_data); i2c_data = 0x1e; i2c_wrbyte(i2c_data); i2c_data = 0x10; i2c_wrbyte(i2c_data); i2c_stop(); i2c_start(); i2c_data = 0xd8; i2c_wrbyte(i2c_data); i2c_data = 0x1e; i2c_wrbyte(i2c_data); i2c_stop(); i2c_start(); i2c_data = 0xd9; i2c_wrbyte(i2c_data); i2c_rev_data = i2c_rdbyte(); i2c_stop(); //set REFCOD address:0x31 value:80 i2c_initial(); i2c_start(); i2c_data = 0xd8; i2c_wrbyte(i2c_data); i2c_data = 0x31; i2c_wrbyte(i2c_data); i2c_data = 0x80; i2c_wrbyte(i2c_data); i2c_stop(); i2c_start(); i2c_data = 0xd8; i2c_wrbyte(i2c_data); i2c_data = 0x31; i2c_wrbyte(i2c_data); i2c_stop(); i2c_start(); i2c_data = 0xd9; i2c_wrbyte(i2c_data); i2c_rev_data = i2c_rdbyte(); i2c_stop(); /* ks0127_b test*/ //set CMDA address:0x01 value:2d i2c_initial(); i2c_start(); i2c_data = 0xde; i2c_wrbyte(i2c_data); i2c_data = 0x01; i2c_wrbyte(i2c_data); i2c_data = 0x2d; i2c_wrbyte(i2c_data); i2c_stop(); i2c_start(); i2c_data = 0xde; i2c_wrbyte(i2c_data); i2c_data = 0x01; i2c_wrbyte(i2c_data); i2c_stop(); i2c_start(); i2c_data = 0xdf; i2c_wrbyte(i2c_data); i2c_rev_data = i2c_rdbyte(); i2c_stop(); //set OFMTA address:0x1e value:10 i2c_initial(); i2c_start(); i2c_data = 0xde; i2c_wrbyte(i2c_data); i2c_data = 0x1e; i2c_wrbyte(i2c_data); i2c_data = 0x10; i2c_wrbyte(i2c_data); i2c_stop(); i2c_start(); i2c_data = 0xde; i2c_wrbyte(i2c_data); i2c_data = 0x1e; i2c_wrbyte(i2c_data); i2c_stop(); i2c_start(); i2c_data = 0xdf; i2c_wrbyte(i2c_data); i2c_rev_data = i2c_rdbyte(); i2c_stop(); //set REFCOD address:0x31 value:80 i2c_initial(); i2c_start(); i2c_data = 0xde; i2c_wrbyte(i2c_data); i2c_data = 0x31; i2c_wrbyte(i2c_data); i2c_data = 0x80; i2c_wrbyte(i2c_data); i2c_stop(); i2c_start(); i2c_data = 0xde; i2c_wrbyte(i2c_data); i2c_data = 0x31; i2c_wrbyte(i2c_data); i2c_stop(); i2c_start(); i2c_data = 0xdf; i2c_wrbyte(i2c_data); i2c_rev_data = i2c_rdbyte(); i2c_stop(); /* adv7176 test */ //set Mode Register 0,MR06 bit to "1" i2c_initial(); i2c_start(); i2c_data = 0x54; i2c_wrbyte(i2c_data); i2c_data = 0x00; i2c_wrbyte(i2c_data); i2c_data = 0x64; //将MOde Register0寄存器设置为0x 6 4,使得输出为CVBS+RGB方式 i2c_wrbyte(i2c_data); i2c_stop(); i2c_start(); i2c_data = 0x54; i2c_wrbyte(i2c_data); i2c_data = 0x00; i2c_wrbyte(i2c_data); i2c_start(); i2c_data = 0x55; i2c_wrbyte(i2c_data); i2c_rev_data = i2c_rdbyte(); i2c_stop(); //set Timing Register0 address:07 value:4a i2c_initial(); i2c_start(); i2c_data = 0x54; i2c_wrbyte(i2c_data); i2c_data = 0x07; i2c_wrbyte(i2c_data); i2c_data = 0x4a; i2c_wrbyte(i2c_data); i2c_stop(); i2c_start(); i2c_data = 0x54; i2c_wrbyte(i2c_data); i2c_data = 0x07; i2c_wrbyte(i2c_data); i2c_start(); i2c_data = 0x55; i2c_wrbyte(i2c_data); i2c_rev_data = i2c_rdbyte(); i2c_stop(); //set Mode Register 1 address:01 value:00 i2c_initial(); i2c_start(); i2c_data = 0x54; i2c_wrbyte(i2c_data); i2c_data = 0x01; i2c_wrbyte(i2c_data); i2c_data = 0x00; i2c_wrbyte(i2c_data); i2c_stop(); i2c_start(); i2c_data = 0x54; i2c_wrbyte(i2c_data); i2c_data = 0x01; i2c_wrbyte(i2c_data); i2c_start(); i2c_data = 0x55; i2c_wrbyte(i2c_data); i2c_rev_data = i2c_rdbyte(); i2c_stop(); }
|