1. bread88lifa利发国际娱乐论坛/
  2. 嵌入式论坛/
    1. 电子论坛综合区
    2. 嵌入式论坛
    3. 电源技术论坛
    4. 硬件设计论坛
    5. 测试测量论坛
    6. 检测技术与质量
    7. EDA设计论坛
    8. 综合技术与应用
    9. 开源硬件
    10. IC设计论坛
    11. 消费电子论坛
    12. 无线通信论坛
    13. 个人版区
    14. 厂商专区
    15. 论坛服务区
    16. 高校联盟
    17. 供求信息发布
  3. 单片机/MCU论坛
    1. ARM技术论坛
    2. Android论坛
    3. Linux论坛
    4. FPGA|CPLD|ASIC论坛
    5. DSP论坛
    6. 嵌入式系统论坛
  4. / 24c02问题
    关闭提示

[问答] 24c02问题

[复制链接]
发表于 2017-11-12 11:10:11   217 查看 0 回复 只看该作者 倒序浏览
分享
//==============================================================================
// Example of IIC communication between 9S12XEP100 and EEPROM FM24C256
// BUSCLK = 8MHz
// SCL    = 91kHz
// I2C1 is used for commnication


//==============================================================================
#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
//----------------------------

#define MaxLen     128 //
#define  slaveread  0xA1
#define  slavewrite 0xA0
unsigned char RD_data;


//--------------------------
byte WrData[8];
byte RdData[8];
byte RdBuf;
word length;
unsigned char x;
//---
typedef union
{
  word EE_Address;
  struct
  {
    byte Address_H;
    byte Address_L;
  }Bytes;
}tAddr;
tAddr ADDR;

#define Address ADDR.EE_Address
#define Addr_L ADDR.Bytes.Address_L
#define Addr_H ADDR.Bytes.Address_H

//******  Init routines  *******************
//--
void IIC0_init(void)
{
        IIC0_IBFD = 0x4C;                               
        IIC0_IBAD = 0x00;                        
        IIC0_IBCR = 0x80;                               
        //IIC0_IBSR_IBAL = 1;                     
}
//--

//---------------------------------------------------------
void IIC_write_nbytes(word addr, byte len)
{
  byte i;
Address = addr; // load address;
IIC0_IBCR_TXAK = 0; ;
IIC0_IBCR |= 0x30; // RX/TX = 1; MS/SL = 1; TXAK = 0;
// And generate START condition;
//-------start of transmit first byte to IIC bus-----
IIC0_IBDR = slavewrite; // Address the slave and set up for master transmit;

while (!IIC0_IBSR_IBIF); // wait until IBIF;
IIC0_IBSR_IBIF=1; // clear the interrupt event flag;
while(IIC0_IBSR_RXAK); // check for RXAK;
//-----Slave ACK occurred------------
IIC0_IBDR = Addr_H; // Send high byte of the word address;
while (!IIC0_IBSR_IBIF); // wait until IBIF;
IIC0_IBSR_IBIF=1; // clear the interrupt event flag;
while(IIC0_IBSR_RXAK); // check for RXAK;
//-----Slave ACK occurred------------
IIC0_IBDR = Addr_L; // Send low byte of the word address;
while (!IIC0_IBSR_IBIF); // wait until IBIF;
IIC0_IBSR_IBIF=1; // clear the interrupt event flag;
while(IIC0_IBSR_RXAK); // check for RXAK;
//-----Slave ACK occurred------------
for(i=0;i<len;i++)
{  
  IIC0_IBDR = WrData;//data;
  while (!IIC0_IBSR_IBIF); // wait until IBIF;
  IIC0_IBSR_IBIF=1; // clear the interrupt event flag;
  while(IIC0_IBSR_RXAK); // check for RXAK;
}
//-----Slave ACK occurred------------
IIC0_IBCR_MS_SL = 0; // generate STOP condition;
}

//-------------------------------------------------------------------------
void IIC_read_nbytes(word addr,byte len)
{
byte dummy;
byte i;
Address = addr;
length=len;
if(length>=MaxLen)
{
  length=MaxLen;
}
IIC0_IBCR_TXAK = 0; // TXAK = 0;
IIC0_IBCR |= 0x30; // RX/TX = 1; MS/SL = 1; TXAK = 0;
// And generate START condition;
IIC0_IBDR = slavewrite; // Address the slave and set up for master transmit;
while (!IIC0_IBSR_IBIF); // wait until IBIF;
IIC0_IBSR_IBIF=1; // clear the interrupt event flag;
while(IIC0_IBSR_RXAK); // check for RXAK;
//-----Slave ACK occurred------------
IIC0_IBDR = Addr_H; // Send high byte of word address;
while (!IIC0_IBSR_IBIF); // wait until IBIF;
IIC0_IBSR_IBIF=1; // clear the interrupt event flag;
while(IIC0_IBSR_RXAK); // check for RXAK;
//-----Slave ACK occurred------------
IIC0_IBDR = Addr_L; // Send low byte of word address;
while (!IIC0_IBSR_IBIF); // wait until IBIF;
IIC0_IBSR_IBIF=1; // clear the interrupt event flag;
while(IIC0_IBSR_RXAK); // check for RXAK;
//-----Slave ACK occurred------------
IIC0_IBCR_RSTA = 1; // set up repeated start;
IIC0_IBDR = slaveread; // (slave_address) | (RW = 1);
while (!IIC0_IBSR_IBIF); // wait until IBIF;
IIC0_IBSR_IBIF=1; // clear the interrupt event flag;
while (IIC0_IBSR_RXAK); // check for RXAK;
//-----Slave ACK occurred------------
IIC0_IBCR_TX_RX = 0; // set up to receive;
dummy=IIC0_IBDR;//RD_data = IIC0_IBDR; // dummy read;
for(i=0;i<length;i++)
{
  if(i==7){
    while(!IIC0_IBSR_IBIF);
    IIC0_IBSR_IBIF = 1;
    RdData[7]=IIC0_IBDR;
  }
  else{   
  while(!IIC0_IBSR_IBIF);
  IIC0_IBSR_IBIF=1;
  while (IIC0_IBSR_RXAK);
  RdData=IIC0_IBDR;
  }
}
IIC0_IBCR_TXAK = 1; // acknowledge disable;  
while (!IIC0_IBSR_IBIF); // wait until IBIF;
IIC0_IBSR_IBIF=1; // clear the interrupt event flag;
IIC0_IBCR_MS_SL = 0; // generate stop signal;
RD_data = IIC0_IBDR; // read right data;
}

//******  main routines  *******************
void main(void)
{
  unsigned int i;
  unsigned int j,k;
  //---- IIC -----
  IIC0_init();
  WrData[0]=1;
  WrData[1]=0;
  WrData[2]=0;
  WrData[3]=8;
  WrData[4]=6;
  WrData[5]=1;
  WrData[6]=1;
  WrData[7]=255;
  //---- main cycle ---
  //LedPad22Dir=1;
  //LedCpu=1;

   do{

   IIC_write_nbytes(0x0102,8);
   for(j=0;j<0x1000;j++);
     IIC_read_nbytes(0x0102,8);
  //--

  for(j=0;j<50000;j++);
  //LedCpu=~LedCpu;

   }
while(1);

  i+=8;  


    /**/
}
//==============================================================================
这是我用的程序问题就是,
问题就是,程序跑得不是很理想,程序就走到这就走不动了。一直等待一个ACK信号。这是怎么回事呢。但是有时候能跑通!



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册
x
标签:at24c02 飞思卡尔 IIC
举报
高级模式
您需要登录后才可以回帖 登录 | 注册
关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表
  1. time最新主题
  2. recommend推荐主题
  3. hot热门主题
  4. post 我的帖子
-

推荐专区

技术干货集中营

专家问答

用户帮助┃咨询与建议┃版主议事

工程师杂谈

工程师创意

工程师职场

论坛电子赛事

社区活动专版

发烧友活动

-

嵌入式论坛

ARM技术论坛

Android论坛

Linux论坛

单片机/MCU论坛

FPGA|CPLD|ASIC论坛

DSP论坛

嵌入式系统论坛

-

电源技术论坛

电源技术论坛

无线充电技术

-

硬件设计论坛

PCB设计论坛

电路设计论坛

电子元器件论坛

控制|传感

总线技术|接口技术

-

测试测量论坛

LabVIEW论坛

Matlab论坛

测试测量技术专区

仪器仪表技术专区

-

EDA设计论坛

multisim论坛

PADS技术论坛

Protel|AD|DXP论坛

Allegro论坛

proteus论坛|仿真论坛

EasyEDA-中国人自已的EDA工具

Orcad论坛

-

综合技术与应用

电机控制

智能电网

光电及显示

参考设计中心

汽车电子技术论坛

医疗电子论坛

-

开源硬件

-

无线通信论坛

无线通信技术专区

天线|RF射频|微波|雷达技术

-

IC设计论坛

芯片测试与失效分析

Mixed Signal/SOC[数模混合芯片设计]

Analog/RF IC设计

设计与制造封装测试

-

厂商专区

TI论坛

TI Deyisupport社区

-

检测技术与质量

电磁兼容(EMC)设计与整改

安规知识论坛

检测与认证

-

消费电子论坛

手机技术论坛

平板电脑/mid论坛

音视/视频/机顶盒论坛

-

电子论坛综合区

聚丰众筹官方社区

新人报道区

聚丰供应链

-

论坛服务区

-

供求信息发布

供需广告

招聘┃求职发布区

电子展览展会专区

88lifa利发国际娱乐

百度360搜索搜狗搜索