网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 61IC中国电子在线 >> DSP >> 代码示例 >> ADI DSP代码示例 >> Blackfin >> 文章正文
  ADSP I2C测试(C)源代码         ★★★ 【字体:
ADSP I2C测试(C)源代码
作者:61IC    文章来源:本站原创    点击数:    更新时间:2007-1-22    

#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(); 
 

               欢迎点击进入:TI德州中文网   (国内唯一针对TI应用的中文技术网站)    文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    没有相关文章
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:61IC 湘ICP备05002478号