6160|10

85

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

中断程序操作I2C问题 [复制链接]

在一中断程序中,调用I2C接口 DeviceIoControl();在I2C驱动中打印总线读出的值都是正确的,为啥中断中返回值不对??  还请各位帮忙 ,谢谢 !!
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
            puc = (PUCHAR)MapPtrToProcess(((PI2C_IO_DESC)pBufIn)->Data, pI2C->hProc);
            {
//中断中不能访问puc,故用临时变量ptemp
                DWORD size = ((PI2C_IO_DESC)pBufIn)->Count;
                LPVOID ptemp = NULL;
                if(size) ptemp = malloc(size);
                dwErr = HW_Read(pI2C,
                                ((PI2C_IO_DESC)pBufIn)->SlaveAddr,
                                ((PI2C_IO_DESC)pBufIn)->WordAddr,
                                 ptemp,
                                size);
               RETAILMSG(1, (L"  HW_Read   = %x \r\n",(*(DWORD *)ptemp)));                if(ptemp)
                {
                    memcpy(puc,ptemp,size);
                        free(ptemp);
                }
            }
                RETAILMSG(1, (L"  HW_Read   = %x \r\n",*puc));            UnMapPtr(puc);               
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

最新回复

打印语句问题 。。。写错了,郁闷 。。。   详情 回复 发表于 2009-10-12 15:30
点赞 关注

回复
举报

79

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
汗 我也在做I2C,你用的是BSP自带的驱动吧
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
是开发板自带的驱动呀 ,读写芯片都是可以的,是应用程序和驱动传递参数的问题吗
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

4
 
是在中断线程中,操作i2c总线。在i2c驱动中读到数据是正确的,但是DeviceIoControl 返回的数据不对
        hI2C = CreateFile( L"I2C0:",
                             GENERIC_READ|GENERIC_WRITE,
                             0,
                             NULL, OPEN_EXISTING, 0, 0);
。。。。。。。。。。。。。。。。。。。。。

            RETAILMSG(1, (TEXT("AXP::CreateFile(\"I2C0\") \r\n")));

           axp182_reg.SlaveAddr = AXP_RD_ADDR;
           axp182_reg.WordAddr = AXP_DC12_VSET;
           axp182_reg.Count = 1;
            ret = DeviceIoControl(hI2C, IOCTL_I2C_READ, &axp182_reg, sizeof(axp182_reg), axp182_reg.Data, 1, &retbyte, NULL);
            if(!ret )
                    {
                            RETAILMSG(1, (TEXT("DeviceIoControl Failed(\"I2C0\") \r\n")));
                }
       
            RETAILMSG(1, (TEXT("DeviceIoControl Sucessed(\"I2C0\")%x   \r\n")),*axp182_reg.Data);
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

5
 
犹抱琵琶半遮面。。。。
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

6
 
用查询吧
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

7
 
这个isr的写法我也看不太明白,但是觉得有些诡异。这个((PI2C_IO_DESC)pBufIn)->Data是不是个io memory啊,如果是的话,映射到process并没有分配main memory,实际物理地址还是在io,可后面又往里memcpy。就算这样可以,最后又把映射取消了,虚拟地址一旦释放,process还怎么去访问。
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

8
 
刚才没明白,说的不对。我猜的,你用createfile,那IoControl的dll应该是udevice加载的,加载的地址空间和你现在的不一样。可是你((PI2C_IO_DESC)pBufIn)->Data是currentProcess空间的地址,不能够不经转换直接传进去。要验证很容易,你在pBufIn->data这个地址上写点东西,然后在iocontrol里检查是不是一样的

msdn上MapPtrToProcess的说明应该有帮助
http://msdn.microsoft.com/en-us/library/ms886751.aspx
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

9
 
读到的数据是放在(((PI2C_IO_DESC)pBufIn)->Data
即puc地址里面的,

typedef struct _I2C_IO_DESC {
    DWORD   SlaveAddr;      // Target Slave Address
    UCHAR   WordAddr;       // Starting Slave Word Address
    PUCHAR  Data;           // pBuffer
    DWORD   Count;          // nBytes to read/write
} I2C_IO_DESC, *PI2C_IO_DESC;


PI2C_IO_DESC *pread;
这个驱动的收发数据都是在上面这个结构的,
所以在APP里面就读 pread->Data 这个地址就可以了
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

10
 
你是用AXP这个芯片吗?我也是,这个东西很不错。
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

11
 
打印语句问题 。。。写错了,郁闷 。。。
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表