查看: 2444|回复: 4

[其他] xep100和24LC256不能完全正常的通信(已解决)

[复制链接]

该用户从未签到

5

主题

12

帖子

0

新手上路

Rank: 1

积分
0
最后登录
1970-1-1
发表于 2014-7-21 11:35:05 | 显示全部楼层 |阅读模式
 问题比较难表述,大概是这样的:可以读也可以写,貌似只能读一个地址和(或)写一个地址,数据也正确,但是不停地读和(或)写或者连续读或写几个数据就不行了;单步执行时可以执行过去的地方,全速运行就过不去了;单步执行时,部分程序语句会被跳过;试过随机读写也试过连续读写,都有问题;调试时,无论把读写放到for循环还是定时中断都有问题;只执行一次多个读写时,也是只有第一个数据能读写正确。由于改了很多次,程序已经比较乱了,粘一段简单的语句吧。希望大家帮忙找一下问题所在。下面是目前改的程序的主要部分,程序没有语法上的错误,可以正常执行。很多屏蔽的部分表示在不断的改程序过程中!
void main( )                                                                       

  int i,j;
  a=0;
  b=0;
  c=0;
  d=0;
  /*****************************各种初始化设置 *******************************/
  SetBusCLK_M(16);
  InitBMSGpio();  
  /*IIC初始化*/
  IIC0_IBFD=0X14;// 设置时钟为总线频率3584分频
  IIC0_IBCR_IBEN=1;//使能IIC 
  IIC0_IBSR_IBIF=1;  
  PITInit() ;
  EnableInterrupts;
  for(;;)
 {   
  }            
}
 
 
#pragma CODE_SEG NON_BANKED 
#pragma TRAP_PROC
void interrupt 66 PIT0_ISR(void)
{  
  a0=rand();
  b0=rand();
  c0=rand();
  d0=rand();
  /*写入读地址1*/
  while(IIC0_IBSR_IBB);
  IIC0_IBCR_TX_RX=1;
  IIC0_IBCR_MS_SL=0;;//IIC0_stop();           //停止
  IIC0_IBCR_MS_SL=1;//IIC开始
  IIC0_IBDR=Memory_Wr_address;
  while(IIC0_IBSR_RXAK);//while(!IIC0_IBSR_IBIF); 
  //IIC0_IBSR_IBIF=1;  // //清发送完成标志
  IIC0_IBDR=1;
  while(IIC0_IBSR_RXAK);//while(!IIC0_IBSR_IBIF); 
  //IIC0_IBSR_IBIF=1;  // //清发送完成标志
  IIC0_IBDR=1;
  while(IIC0_IBSR_RXAK);//while(!IIC0_IBSR_IBIF); 
  //IIC0_IBSR_IBIF=1;  // //清发送完成标志
  //IIC0_IBCR_MS_SL=0;////////或许这句可以屏蔽!!!!!!!!
  /*读出数据1*/
  //while(IIC0_IBSR_IBB);
  IIC0_IBCR_TX_RX=1;
  IIC0_IBCR_MS_SL=0;;//IIC0_stop();           //停止
  IIC0_IBCR_MS_SL=1;//IIC开始
  IIC0_IBDR=Memory_Rd_address;
  while(IIC0_IBSR_RXAK);//while(!IIC0_IBSR_IBIF); 
  //IIC0_IBSR_IBIF=1;  // //清发送完成标志
  
  IIC0_IBCR_TX_RX=0;    //接收
  
  IIC0_IBDR;            //空读启动发送
  while(!IIC0_IBSR_IBIF);
  r_data0=IIC0_IBDR;
  a=r_data0;
  a1=a;
  IIC0_IBCR_TXAK=0;//IIC0_IBCR_TXAK=1;//IIC0_NoAck(); 
  //IIC0_IBCR_MS_SL=0;;//IIC0_stop();           //停止
/*写入读地址2*/
  //while(IIC0_IBSR_IBB);
  //IIC0_IBCR_TX_RX=1;
  //IIC0_IBCR_MS_SL=0;;//IIC0_stop();           //停止
  //IIC0_IBCR_MS_SL=1;//IIC开始
  //IIC0_IBDR=Memory_Wr_address;
  //while(IIC0_IBSR_RXAK);//while(!IIC0_IBSR_IBIF); 
  //IIC0_IBSR_IBIF=1;  // //清发送完成标志
  //IIC0_IBDR=1;
  //while(IIC0_IBSR_RXAK);//while(!IIC0_IBSR_IBIF); 
  //IIC0_IBSR_IBIF=1;  // //清发送完成标志
  //IIC0_IBDR=2;
  //while(IIC0_IBSR_RXAK);//while(!IIC0_IBSR_IBIF); 
  //IIC0_IBSR_IBIF=1;  // //清发送完成标志
  //IIC0_IBCR_MS_SL=0; ////////或许这句可以屏蔽!!!!!!!!
  /*读出数据2*/
  //while(IIC0_IBSR_IBB);
  //IIC0_IBCR_TX_RX=1;
  //IIC0_IBCR_MS_SL=0;;//IIC0_stop();           //停止
  //IIC0_IBCR_MS_SL=1;//IIC开始
  //IIC0_IBDR=Memory_Rd_address;
  //while(IIC0_IBSR_RXAK);//while(!IIC0_IBSR_IBIF); 
  //IIC0_IBSR_IBIF=1;  // //清发送完成标志
  
  //IIC0_IBCR_TX_RX=0;    //接收
  IIC0_IBDR;            //空读启动发送
  while(!IIC0_IBSR_IBIF);
  r_data0=IIC0_IBDR;
  b=r_data0;
  b1=b;
  IIC0_IBCR_TXAK=1;//IIC0_IBCR_TXAK=1;//IIC0_NoAck(); 
  IIC0_IBCR_MS_SL=0;;//IIC0_stop();           //停止
  
 
     /*写入数据1*/
  while(IIC0_IBSR_IBB);
  IIC0_IBCR_TX_RX=1;
  IIC0_IBCR_MS_SL=0;;//IIC0_stop();           //停止
  IIC0_IBCR_MS_SL=1;//IIC开始
  IIC0_IBDR=Memory_Wr_address;
  while(IIC0_IBSR_RXAK);//while(!IIC0_IBSR_IBIF); 
  //IIC0_IBSR_IBIF=1;  // //清发送完成标志
  IIC0_IBDR=1;
  while(IIC0_IBSR_RXAK);//while(!IIC0_IBSR_IBIF); 
  //IIC0_IBSR_IBIF=1;  // //清发送完成标志
  IIC0_IBDR=1;
  while(IIC0_IBSR_RXAK);//while(!IIC0_IBSR_IBIF); 
  //IIC0_IBSR_IBIF=1;  // //清发送完成标志
  IIC0_IBDR=a0;
  while(IIC0_IBSR_RXAK);//while(!IIC0_IBSR_IBIF); 
  //IIC0_IBSR_IBIF=1;  // //清发送完成标志 
  //IIC0_IBCR_MS_SL=0;  
   /*写入数据2*/
  //while(IIC0_IBSR_IBB);
  //IIC0_IBCR_TX_RX=1;
  //IIC0_IBCR_MS_SL=1;//IIC开始
  //IIC0_IBDR=Memory_Wr_address;
  //while(IIC0_IBSR_RXAK);//while(!IIC0_IBSR_IBIF); 
  //IIC0_IBSR_IBIF=1;  // //清发送完成标志
  //IIC0_IBDR=1;
  //while(IIC0_IBSR_RXAK);//while(!IIC0_IBSR_IBIF); 
  //IIC0_IBSR_IBIF=1;  // //清发送完成标志
  //IIC0_IBDR=2;
  //while(IIC0_IBSR_RXAK);//while(!IIC0_IBSR_IBIF); 
  //IIC0_IBSR_IBIF=1;  // //清发送完成标志
  IIC0_IBDR=b0;
  while(IIC0_IBSR_RXAK);//while(!IIC0_IBSR_IBIF); 
  //IIC0_IBSR_IBIF=1;  // //清发送完成标志 
  IIC0_IBCR_MS_SL=0;                                                  
  
 PORTA_PA0=~PORTA_PA0; //闪灯
 PITTF = 0x01;        //清定时中断
}
我知道答案 目前已有3人回答
回复

使用道具 举报

该用户从未签到

124

主题

3600

帖子

0

金牌会员

Rank: 6Rank: 6

积分
5781
最后登录
1970-1-1
发表于 2014-7-21 11:45:58 | 显示全部楼层

RE:xep100和24LC256不能完全正常的通信

你好,楼主!
建议先用逻辑分析仪或者示波器查看单步运行与全速运行之间,两者的差异,从而确认问题的所在。
回复 支持 反对

使用道具 举报

该用户从未签到

5

主题

273

帖子

0

高级会员

Rank: 4

积分
718
最后登录
1970-1-1
发表于 2014-7-23 15:15:34 | 显示全部楼层

RE:xep100和24LC256不能完全正常的通信

关于I2C,uart,spi如果通信有什么问题,最好用示波器或者逻辑分析仪抓一下数据,那就一目了然啊!
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

25

帖子

0

注册会员

Rank: 2

积分
58
最后登录
1970-1-1
发表于 2014-7-23 18:19:12 | 显示全部楼层

RE:xep100和24LC256不能完全正常的通信

eeprom写入操作等有一段时间的等待才能继续操作,看看波形是不是eeprom没有应答
回复 支持 反对

使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2014-7-24 10:44:12 | 显示全部楼层

    RE:xep100和24LC256不能完全正常的通信

    他这个在中断中写的,如果程序过程太长,会导致下次中断继续的产生.
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

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

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-26 21:18 , Processed in 0.088956 second(s), 25 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表