modernhill
驱动小牛
驱动小牛
  • 注册日期2004-05-12
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分98分
  • 威望278点
  • 贡献值0点
  • 好评度172点
  • 原创分0分
  • 专家分0分
阅读:1169回复:3

2410的IIC的问题

楼主#
更多 发布于:2007-04-23 21:42
  在display driver中通过IIC总线访问外部的设备,我在displaydriver中按照2410的使用手册直接操作2410的IIC控制器,并且在display driver的escape()函数中提供了接口,以便在应用程序也可以访问IIC总线。
现在很奇怪的是,在系统起来的过程中IIC操作没有什么问题,但是在应用程序调用display driver中提供的IIC接口,有的时候会死机,下面是start函数,有的时候会停在(*)的地方,意思好象是没有收到中断,哪位兄弟帮忙看看这是为什么,应该怎样改呢?
int  StartI2C(UCHAR sla)
{    
  if(sla&0x01)
  {    
    rIICSTAT = (2<<6)|(1<<5)|(1<<4);    
    rIICCON = ((1<<7) | (1<<6) | (1<<5) | (0<<0));                
   }
   else
   {    
        rIICSTAT = (3<<6)|(1<<5)|(1<<4);    
   }
   while((rIICCON&0x10) == 0);    (*)
    
    if((rIICSTAT&0x09) == 0)
   {      
      return(TRUE);          
   }
    .......
}
dillonhua
驱动小牛
驱动小牛
  • 注册日期2004-07-30
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望401点
  • 贡献值0点
  • 好评度128点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-04-23 22:10
现在很奇怪的是,在系统起来的过程中IIC操作没有什么问题,但是在应用程序调用display driver中提供的IIC接口,有的时候会死机,

建议查看以下几点:
1. 系统启动的时候操作完IIC以后,有没有正常的释放IIC总线?
2. 你的应用是如何调用IIC接口的,打一些消息查看一下
modernhill
驱动小牛
驱动小牛
  • 注册日期2004-05-12
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分98分
  • 威望278点
  • 贡献值0点
  • 好评度172点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-04-24 10:32
IIC总线已经释放,现在的现象是在应用程序中访问IIC时,大概进行十几次就死机了,通过打印信息看,还是停在等待中断的那句:(
我是这么做的:
1)在display driver中创建IIC全局对象,初始化IIC控制器,然后进行读写操作。
2)在S3C2410DISP::DrvEscape()中提供应用程序访问IIC的接口
3)在应用程序中通过DispEscape()函数访问display driver的DrvEscape()中的IIC接口进行读写。

现在奇怪的是在display driver中进行的IIC操作不会出现问题,但是在应用程序中访问IIC就会死机,停在等待中断那句!!!
我以前在另外一个2410的系统也是这么做的,没有什么问题,现在这个2410的系统就老是出现这个问题,因为我是直接从板子上焊了两根线(SDA,SCL)接到外部设备的,而以前的系统上有IIC的PIN脚引出来,会不会是线的问题啊?
还是代码里的那句,直接无限的等待是不是有问题?
modernhill
驱动小牛
驱动小牛
  • 注册日期2004-05-12
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分98分
  • 威望278点
  • 贡献值0点
  • 好评度172点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-04-25 18:04
IIC很不稳定,通过示波器看波形,发现两根线上的噪声很大,出现问题的时候数据线被从机拉低,一直释放不了,也就是找到不第九个时钟沿,难道时钟脉冲丢了一个?
由于我是直接从板子上飞线(IIC的两根线)出来的,而且没有加上拉电阻,只在从机的IIC口接上拉电阻,这样可以吗?
哪位兄弟做过这方面的事,帮个忙?
游客

返回顶部