p2324
驱动牛犊
驱动牛犊
  • 注册日期2005-03-03
  • 最后登录2005-03-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1891回复:4

How do "cypress 68013" send "write" command to the device on i2c bus

楼主#
更多 发布于:2005-03-03 13:07
How do \"cypress 68013\" send \"write\" command to the device on i2c bus

device address :0xA2
device\'s slave address :0xFA
value:0x00

cypress provides some codes...

BOOL EZUSB_WriteI2C(BYTE addr, BYTE length, BYTE xdata *dat)
BOOL EZUSB_WriteI2C_(BYTE addr, BYTE length, BYTE xdata *dat)

What should i list in main() ??

void main()
{
  ......
}



[编辑 -  3/4/05 by  p2324]
p2324
驱动牛犊
驱动牛犊
  • 注册日期2005-03-03
  • 最后登录2005-03-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-03-04 01:23
help please!!!
kris2001
驱动小牛
驱动小牛
  • 注册日期2004-05-18
  • 最后登录2011-02-26
  • 粉丝0
  • 关注0
  • 积分582分
  • 威望78点
  • 贡献值0点
  • 好评度54点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-03-04 15:40
first slave address,
second length:2
third :reg,value



[编辑 -  3/4/05 by  kris2001]
DTUSB20 --www.dothinkey.com
p2324
驱动牛犊
驱动牛犊
  • 注册日期2005-03-03
  • 最后登录2005-03-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-03-04 17:26
[quote]first slave address,
second length:2
third :reg,value

Dear all, below is the source code, Because i just started to study the c code,may somebody help me to write the main()
thanks very much!!!!

#include <stdio.h>
#include <fx2.h>
#include <fx2regs.h>
#define ALLOCATE_EXTERN

I2CPCKT volatile I2CPckt;

void EZUSB_InitI2C(void)
{
I2CPckt.status = I2C_IDLE;

EI2C = 1; // Enable I2C interrupt
EA = 1; // Enable 8051 interrupts
#ifdef TNG
   I2CMODE |= 0x02;  // enable I2C Stop interrupt
#endif

}


void EZUSB_WaitForEEPROMWrite(BYTE addr)
{
#ifndef TNG
   // if in progress, wait for STOP to complete
   while (I2CS & bmSTOP);
#endif

   // disable i2c interrupts
   EI2C = 0;

   do
   {
      I2CS |= bmSTART;
  I2DAT = addr << 1;
      while (!(I2CS & 1));
      I2CS |= bmSTOP;
      while (I2CS & bmSTOP);
   } while (!(I2CS & bmACK));

   // enable i2c interrupts
   EI2C = 1;

}
BOOL EZUSB_WriteI2C_(BYTE addr, BYTE length, BYTE xdata *dat)
{
#ifndef TNG
   // if in progress, wait for STOP to complete
   while (I2CS & bmSTOP);
#endif

if(I2CPckt.status == I2C_IDLE)
{
I2CS |= bmSTART;
I2DAT = addr << 1;

I2CPckt.length = length;
I2CPckt.dat = dat;
I2CPckt.count = 0;
I2CPckt.status = I2C_SENDING;

return(TRUE);
}

return(FALSE);
}




void i2c_isr(void) interrupt I2C_VECT
{ // I2C State Machine
if(I2CS & bmBERR)
I2CPckt.status = I2C_BERROR;
else if ((!(I2CS & bmACK)) && (I2CPckt.status != I2C_RECEIVING))
I2CPckt.status = I2C_NACK;
else
switch(I2CPckt.status)
{
case I2C_SENDING:
I2DAT = I2CPckt.dat[I2CPckt.count++];
if(I2CPckt.count == I2CPckt.length)
I2CPckt.status = I2C_STOP;
break;
case I2C_PRIME:
I2CPckt.dat[I2CPckt.count] = I2DAT;
I2CPckt.status = I2C_RECEIVING;
if(I2CPckt.length == 1) // may be only one byte read
I2CS |= bmLASTRD;
break;
case I2C_RECEIVING:
if(I2CPckt.count == I2CPckt.length - 2)
I2CS |= bmLASTRD;
if(I2CPckt.count == I2CPckt.length - 1)
{
I2CS |= bmSTOP;
I2CPckt.status = I2C_IDLE;
}
I2CPckt.dat[I2CPckt.count] = I2DAT;
++I2CPckt.count;
break;
case I2C_STOP:
I2CS |= bmSTOP;
#ifdef TNG
I2CPckt.status = I2C_WAITSTOP;
#else
I2CPckt.status = I2C_IDLE;
#endif
break;
case I2C_WAITSTOP:
I2CPckt.status = I2C_IDLE;
break;
}
EXIF &= ~0x20; // Clear interrupt flag IE3_ // IE3 = 0;
}





BOOL EZUSB_WriteI2C(BYTE addr, BYTE length, BYTE xdata *dat)
{
EZUSB_WriteI2C_(addr, length, dat);

while(TRUE)
switch(I2CPckt.status)
{
case I2C_IDLE:
return(I2C_OK);
case I2C_NACK:
I2CPckt.status = I2C_IDLE;
return(I2C_NACK);
case I2C_BERROR:
I2CPckt.status = I2C_IDLE;
return(I2C_BERROR);
}
}

void main()
{
}
kris2001
驱动小牛
驱动小牛
  • 注册日期2004-05-18
  • 最后登录2011-02-26
  • 粉丝0
  • 关注0
  • 积分582分
  • 威望78点
  • 贡献值0点
  • 好评度54点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-03-04 21:12
cypress的例子里面很多啊。自己摸索一下。
DTUSB20 --www.dothinkey.com
游客

返回顶部