dongyupeng
驱动牛犊
驱动牛犊
  • 注册日期2003-12-31
  • 最后登录2005-04-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2475回复:9

关于vxworks下的saa7146

楼主#
更多 发布于:2003-12-31 10:32
本人在做关于vxworks下的视频采集卡驱动,PCI总线芯片saa7146,上电后我用pciCongfigInLong读出的7146基地址为0xe2201000,经过调用muaddmap函数后地址为0xe2200000,按照7146datasheet所说基地址加OFFSET后应该可以访问7146的register,但是我为何读出的寄存器值与reset后的默认值不一致?还有如何获得saa7146的I/O基地址?
dongyupeng
驱动牛犊
驱动牛犊
  • 注册日期2003-12-31
  • 最后登录2005-04-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-12-31 10:54
自己顶一下
dongyupeng
驱动牛犊
驱动牛犊
  • 注册日期2003-12-31
  • 最后登录2005-04-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-01-06 10:56
问题已经解决:)
seven
驱动小牛
驱动小牛
  • 注册日期2001-04-03
  • 最后登录2007-03-28
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望8点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-01-07 08:24
能说说是如何解决的吗?给大家一点帮助嘛。
我爱中医:http://www.ngotcm.com/forum/index.php
dongyupeng
驱动牛犊
驱动牛犊
  • 注册日期2003-12-31
  • 最后登录2005-04-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-01-07 16:55
既然seven兄提出了要求,偶就随便说说,说得不好大家见谅:)

首先常见的芯片一般有内存映射和IO映射两种,而7146只有内存映射而无IO映射。所以我们在访问芯片的寄存器时就不能用sysout,
sysin的方式,而要获取芯片的基地址,采用指针的方式读写寄存器。
调用muaddmap函数后地址为0xe2200000,这是芯片的物理地址,其逻辑地址为0xe2200,把这个地址写入pci的配置空间寄存器后就可以用
基地址+offset的方式访问芯片寄存器了。
seven
驱动小牛
驱动小牛
  • 注册日期2001-04-03
  • 最后登录2007-03-28
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望8点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-01-09 08:33
非常感谢,设为精华贴。另外给你加点专家分。
希望多多到论坛上来交流问题。再次感谢。
我爱中医:http://www.ngotcm.com/forum/index.php
seven
驱动小牛
驱动小牛
  • 注册日期2001-04-03
  • 最后登录2007-03-28
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望8点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-01-09 08:34
不好意思,我居然不能给你加分。简直faint了。
我爱中医:http://www.ngotcm.com/forum/index.php
dongyupeng
驱动牛犊
驱动牛犊
  • 注册日期2003-12-31
  • 最后登录2005-04-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-01-09 18:19
seven兄太客气了,能把问题解决就是最好的,分是无所谓的 :)
qijianggood
驱动大牛
驱动大牛
  • 注册日期2002-07-12
  • 最后登录2004-12-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-01-11 17:40
看了楼主的解决方法,觉得有两点疑问想要提出来一下。一是“调用muaddmap函数后地址为0xe2200000,这是芯片的物理地址,其逻辑地址为0xe2200,把这个地址写入pci的配置空间寄存器后就可以用
基地址+offset的方式访问芯片寄存器了。”这句话,我记得在VXWORKS中内存地址32位线性排列的,就是说物理地址和逻辑地址是同一个地址,PCI设备分配到的内存地址是和本机的内存统一编址的,因此在这里应该是使用0XE2200000这个地址来操作而不应该是使用0XE2200这个地址。第二,也是在这句话中,为什么要将这个地址写入PCI配置空间寄存器呢?这个地址本身就是从PCI配置寄存器中读出的呀。我觉得正常的解决方法是,首先从PCI配置空间中读出内存基地址,然后用内存映射函数将这个地址映射到本机内存空间,然后就可以用这个地址+偏移量的方式来访问芯片寄存器了。
一点愚见,请不要见怪。
[img]http://mms.kongzhong.com//storage/03/d8/c8/0307b61e1dd83e13c1acc8d67df5082d/my_pic/animatorpic/f_678355759/c_678460143/40f3a3_1_1_1_1.gif[/img]-----我的愿望!
dongyupeng
驱动牛犊
驱动牛犊
  • 注册日期2003-12-31
  • 最后登录2005-04-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-01-23 15:18
看了楼主的解决方法,觉得有两点疑问想要提出来一下。一是“调用muaddmap函数后地址为0xe2200000,这是芯片的物理地址,其逻辑地址为0xe2200,把这个地址写入pci的配置空间寄存器后就可以用
基地址+offset的方式访问芯片寄存器了。”这句话,我记得在VXWORKS中内存地址32位线性排列的,就是说物理地址和逻辑地址是同一个地址,PCI设备分配到的内存地址是和本机的内存统一编址的,因此在这里应该是使用0XE2200000这个地址来操作而不应该是使用0XE2200这个地址。第二,也是在这句话中,为什么要将这个地址写入PCI配置空间寄存器呢?这个地址本身就是从PCI配置寄存器中读出的呀。我觉得正常的解决方法是,首先从PCI配置空间中读出内存基地址,然后用内存映射函数将这个地址映射到本机内存空间,然后就可以用这个地址+偏移量的方式来访问芯片寄存器了。

感谢qijianggood的支持

楼上所提出的两点正是我开始时的疑问,我的步骤如下
1.从PCI配置空间中读出内存基地址0xe2200000
2.调用sysmmumapadd内存映射函数,映射后的地址依然为0xe2200000
3.最重要的就在这一步,0xe2200,把这个地址写入pci的配置空间寄存器后就可以用基地址+offset的方式访问芯片寄存器,而且我做过试验如果写入pci的配置空间寄存器的是别的值如0xe220f,配置空间寄存器也会将其矫正为0xe2200
所以我认为调用sysmmumapadd内存映射函数后必须再次向pci的配置空间寄存器写入地址值
游客

返回顶部