happypotato
驱动牛犊
驱动牛犊
  • 注册日期2004-03-31
  • 最后登录2005-09-01
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1210回复:4

再问9054 block DMA

楼主#
更多 发布于:2004-07-07 15:11
    要发起DMA传输应该首先设置好寄存器对吧,象PCI Addess,Local Address,Transfer Size,Descripter pointer是吧,我看资料说了它们的值应设成多少。可是我不知道如何才能设置这些寄存器。
    9054 DataSheet 上说PCI bus和local bus可以访问寄存器,还给出了一个相关的CCS片选信号,难道要用总线访问内部寄存器来设置这些寄存器么,(如果是的话,要访问哪个寄存器,该寄存器的地址是如何给出的呢)
   还是在写驱动的时候设置这些寄存器?
  
不要笑我太无知
myswin
驱动小牛
驱动小牛
  • 注册日期2003-10-13
  • 最后登录2005-11-21
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-07-07 16:01
直接读写就可以了啊~~PCI端可以映射成Memory或I/O,后直接操作偏移地址
Local端我还不太懂~~
=========== D =========== R =========== I =========== V =========== E ---------抵制日货-------
happypotato
驱动牛犊
驱动牛犊
  • 注册日期2004-03-31
  • 最后登录2005-09-01
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-07-07 16:07
你是说直接用PCI总线读写内部寄存器是的吧
不要笑我太无知
happypotato
驱动牛犊
驱动牛犊
  • 注册日期2004-03-31
  • 最后登录2005-09-01
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-07-07 16:16
发起DMA时,要设置START位,和相关的寄存器,这相关的寄存器是通过什么方式设置的
不要笑我太无知
myswin
驱动小牛
驱动小牛
  • 注册日期2003-10-13
  • 最后登录2005-11-21
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-07-08 08:20
#define DMAMODE0  0x80
#define DMAPADR0  0x84
#define DMALADR0  0x88
#define DMASIZ0   0x8C
#define DMADPR0   0x90
#define DMACSR0   0xA8

//下面几条语句设置DMA通道0寄存器,启动块传输方式 m_IoPortRange0.outd(DMAMODE0,0x20C00);
//DMA Channel0 PCI Address
m_IoPortRange0.outd(DMAPADR0,PAddress);
//DMA Channel0 Local Address,自己设计
m_IoPortRange0.outd(DMALADR0,0x8);
//DMA Channel0 Transfer Size(Bytes)
m_IoPortRange0.outd(DMASIZ0,NBytes);
//from the Local Bus to the PCI Bus
m_IoPortRange0.outd(DMADPR0,0x8);
//Channel0 Enable,Start
m_IoPortRange0.outb(DMACSR0,0x3);
=========== D =========== R =========== I =========== V =========== E ---------抵制日货-------
游客

返回顶部