查看: 3532|回复: 4

[其他] xep100的IIC问题

[复制链接]

该用户从未签到

3

主题

5

帖子

0

新手上路

Rank: 1

积分
29
最后登录
1970-1-1
发表于 2013-10-25 16:38:53 | 显示全部楼层 |阅读模式
 
                        
             最近在用IIC总线对一个时钟芯片进行读写,之前有一段时间能读能写,但是一旦在线停止或者复位就不行了,等待总线空闲的语句while(IIC1_IBSR_IBB);  总是执行不过去。今天能写能读了一次,然后又不行了,下面是我的程序的前几句,请大家帮忙分析一下,为什么while(IIC1_IBSR_IBB);过不去。谢谢了!
             
             IIC1_IBFD=0X20;// 设置时钟为总线频率160分频  速率100K
             IIC1_IBCR_IBEN=1;//使能IIC,必须在配置控制寄存器的其他位前配置此位
             IIC1_IBSR_IBAL=1;//置总线空闲
             IIC1_IBCR_RSTA=1; //重启总线
             IIC1_IBSR_IBIF=1;
            while(IIC1_IBSR_IBB);//执行到这就过不去了!!!!!!!!!!!!!!!!
             
             IIC_start();       
             IIC_send_data(0b11010000);   //写入控制字(末尾为0是写操作)
             wait_ack();                  //等待
             IIC_send_data(0X00);         //写入初始地址,用作寄存器指针  ???????地址是什么形式   指针不是?????
             wait_ack();                //等待                 
             IIC_Settime( 0X13, 0X10, 0X21, 0X02, 0X15, 0X40, 0X19); //写入数据    当前时间 根据寄存器写BCD码!!!!!!!!!!!!               
             IIC_stop();                 //停止
            
            
            
我知道答案 目前已有3人回答
回复

使用道具 举报

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

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2013-10-26 11:19:48 | 显示全部楼层

    RE: xep100的IIC问题

    应该是先关闭I2C以后再进行初始化,下面是我在使用I2C的时候初始化代码,没有发生过楼主的问题。我用的系统时钟是16M的。
    IIC0_IBCR_IBEN = 0;//关闭I2C
    IIC0_IBFD = 0x54; //设置100KHZ传输速度
    IIC0_IBCR2= 0x00;
    IIC0_IBCR =0xC0; //使能IIC模块,开启中断
    IIC0_IBSR_IBAL = 1; //清除IBAL标志位
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    5

    帖子

    0

    新手上路

    Rank: 1

    积分
    29
    最后登录
    1970-1-1
     楼主| 发表于 2013-10-26 15:54:43 | 显示全部楼层

    回复: xep100的IIC问题

    谢谢,试了一下你的程序,还是不行!这会不会和仿真器有关? 
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    29

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    217
    最后登录
    1970-1-1
    发表于 2013-10-28 13:59:25 | 显示全部楼层

    RE: xep100的IIC问题

    以前做其他Freescale芯片的I2C时有遇到和楼主类似的问题,就是复位系统时I2C器件没有被复位就会概率性出现类似的问题,不知道楼主的问题是不是整板断电后就好了,复位就不行?如果是的话你可以参考一下这个,其实就是初始化I2C模块前先发9个SCL时钟来复位所有的I2C器件。
    It is sometimes necessary to force the I2C module to become the I2C bus master out of reset and drive SCL (even though SDA may already be driven, which indicates that the bus is busy). This can occur when a system reset does not cause all I2C devices to be reset. Thus, SDA can be driven low by another I2C device while this I2C module is coming out of reset and will stay low indefinitely. The following procedure can be used to force this I2C module to generate SCL so that the device driving SDA can finish its transaction:
    1. Disable the I2C module and set the master bit
    2. Enable the I2C module
    3. Read the I2C data register
    4. Return the I2C module to slave mode
    然后再按正常的流程初始化I2C模块,不知道你的芯片支不支持这种操作
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    19

    帖子

    0

    注册会员

    Rank: 2

    积分
    129
    最后登录
    1970-1-1
    发表于 2014-5-27 08:47:02 | 显示全部楼层

    RE: xep100的IIC问题

    我使用XEP100的IIC来读写外部EEPROM的时候,也是经常出现读写不成功,复位无效,有时断电之后可以成功。波形上看,IIC有时是没有检测到应答的。 SCL是常低拉高形成的时钟(我记得SCL空闲的时候应该是高,不知是什么问题)
    先尝试下4l所说的方法先。
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-9-11 05:36 , Processed in 0.099991 second(s), 25 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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