阅读:1188回复:3
2410的IIC的问题
在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); } ....... } |
|
沙发#
发布于:2007-04-23 22:10
现在很奇怪的是,在系统起来的过程中IIC操作没有什么问题,但是在应用程序调用display driver中提供的IIC接口,有的时候会死机,
建议查看以下几点: 1. 系统启动的时候操作完IIC以后,有没有正常的释放IIC总线? 2. 你的应用是如何调用IIC接口的,打一些消息查看一下 |
|
板凳#
发布于: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脚引出来,会不会是线的问题啊? 还是代码里的那句,直接无限的等待是不是有问题? |
|
地板#
发布于:2007-04-25 18:04
IIC很不稳定,通过示波器看波形,发现两根线上的噪声很大,出现问题的时候数据线被从机拉低,一直释放不了,也就是找到不第九个时钟沿,难道时钟脉冲丢了一个?
由于我是直接从板子上飞线(IIC的两根线)出来的,而且没有加上拉电阻,只在从机的IIC口接上拉电阻,这样可以吗? 哪位兄弟做过这方面的事,帮个忙? |
|