我是从2440获得温度,是设为主控接收模式还是从属接收模式呢,我觉得应该是主控接收,你们说对吗?
谢谢楼上的,能给提供一个 IIC的 例程吗?感觉还是无从下手呢,直接在应用IO_CONTROL 处理读函数,可是出错,DataAbort 操作,这是为什么呢?
需要先了解 温度芯片 的用法;另外,介绍一下你的硬件和软件平台。
以 S3C2440 + WinCE 5.0 举例吧:
有几种方法测试 IIC 接口:
1、直接在应用程序中,以【查询】方式读写 IIC 接口;
2、以流驱动的方式实现 IIC 接口驱动程序;
其中,第二种方法又分为【查询】和【中断】方式。
=======
另外,还要结合 LM75 芯片的用法,应用程序才能读取温度等信息。
楼主,可以先说说你做到哪一步了。
谢谢zaodt,我目前的情况如下:
我加载了IIC驱动文件夹后已经可以从串口看到调试信息,并且中断已经使能了,
调试信息包括入口点,以及通过应用层调用IIC_IOCONTROL输出调试信息,我手里有LM75的资料,并且通过CreateFile可以加载IIC的驱动,不过无法读取温度信息。下面是我看到的调试信息,说明该驱动已经工作了只是配置硬件的部分不知道该如何做?
I2C Init
I2C InitRegs
IIC IRQ mapping: [IRQ:27->sysIRQ:37].
SYSINTR_IIC OEMInterruptEnable
SYSINTR_IIC OEMInterruptDone
问题1:对于端口的初始化寄存器,我是这么写的,
pI2C->pIOPReg->rGPECON &= ~(0x3<<28);
pI2C->pIOPReg->rGPECON |= (0x2 << 28); // GPE14:IICSCL
pI2C->pIOPReg->rGPECON &= ~(0x3<<30);
pI2C->pIOPReg->rGPECON |= (0x2 << 30); //GPE15:IICSDA,
其他的寄存器我不清楚该配置什么值,这么配置对吗?
函数InitRegs中继续添加
rIICADD = 0x9e; //2440 slave address = [7:1]. this is avialable when 240 is slave.
rIICSTAT = 0x10; //IIC bus data output enable(Rx/Tx)
rIICLC = (1<<2)|(3); // Filter enable, 15 clocks SDA output delay added into 2440
问题2:应用层调用IIC_IOCONTROL中的IOCTL_I2C_READ 不能读取温度?
dwErr = HW_Read(pI2C,
0x9E,
((PI2C_IO_DESC)pBufIn)->WordAddr,
puc,
((PI2C_IO_DESC)pBufIn)->Count);
问题3:我还需要配置什么别的地方吗,我感觉这个驱动已经把IIC的时序给做好了?
LZ和我遇到问题是一样的看来,不过我是6410的,数据终止这个问题解决了,现在是时钟不对,读的出错率比较高。
当然你要设置为主机接收/发送模式了。
貌似你应用调用驱动写错了哈。
经过两天的努力,目前配合应用去做仍然有这种问题存在,还是不知道该如何读出温度的值,郁闷中.......
Data Abort: Thread=8ffeba40 Proc=8db56160 'device.exe'
AKY=00000005 PC=02db1998(i2c.dll+0x00001998) RA=02db17c8(i2c.dll+0x000017c8) BVA=0e02f2b4 FSR=00000005