xwh
xwh
驱动牛犊
驱动牛犊
  • 注册日期2002-02-11
  • 最后登录2004-01-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1980回复:15

关于saa7146的 dma操作问题

楼主#
更多 发布于:2003-08-01 10:02
saa7146具有主控dma传输能力,有好几个dma通道,每个通道都有一组寄存器,是不是可以直接设置这些寄存器,然后让它启动传输就可以了?为什么要用封装好的函数呢?这些函数好象也不能完成对7146的dma 相关寄存器的初始化,我觉得这些封装好的函数对系统DMA来说有用,但对总线dma来讲没有什么用处。我的理解不知对不对?请高手点拨!
dongyupeng
驱动牛犊
驱动牛犊
  • 注册日期2003-12-31
  • 最后登录2005-04-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-03-02 15:54
大虾们
请问为何7146的Main control register2中upload7146的dma1的registers可以开启dma进入中断,而如果在此之前upload7146的hps相关registers就无法进入中断哪?如果不upload7146的hps相关registers是否hps就无法工作呢?
dongyupeng
驱动牛犊
驱动牛犊
  • 注册日期2003-12-31
  • 最后登录2005-04-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-02-28 16:47
各位大虾小弟有几个7146的问题请教
1.7146的dma如何开启?是否upload其相应dma控制寄存器至mc2中就算开启?
2.7146的dma控制寄存器是否要与主板的dma控制寄存器配合使用?
3.dma需要地址连续的内存,这块内存如何分配?
4.寄存器0x120中的指针为FIFO的指针还是dma的指针?

先行谢过!!dongyupeng@sina.com
xwh
xwh
驱动牛犊
驱动牛犊
  • 注册日期2002-02-11
  • 最后登录2004-01-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-11-02 16:19
请gung再进来看看,我想使用DEBI接口的块传输功能,但不知道地址怎么得到,比如我想启动一个512字节的块传输,在应用层我可以很容易的开辟一个512字节的缓冲区,传到驱动层后可以得到这个指针,然后应该再怎么做呢?DEBI_PAGE,DEBI_AD应该如何设置呢?
xwh
xwh
驱动牛犊
驱动牛犊
  • 注册日期2002-02-11
  • 最后登录2004-01-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-08-28 21:45
采用immediate方式读写debi口是不是不用启动dma来传输
gung
驱动中牛
驱动中牛
  • 注册日期2001-06-10
  • 最后登录2008-04-21
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-08-26 18:54
搞定啦?呵呵,祝贺
xwh
xwh
驱动牛犊
驱动牛犊
  • 注册日期2002-02-11
  • 最后登录2004-01-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-08-26 15:16
我用windriver生成一个INF,把这两个参数改了,就正常了
xwh
xwh
驱动牛犊
驱动牛犊
  • 注册日期2002-02-11
  • 最后登录2004-01-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-08-26 14:27
这个INF文件肯定有问题,我感觉ClassGUID有问题,但不知道应该写成多少?
xwh
xwh
驱动牛犊
驱动牛犊
  • 注册日期2002-02-11
  • 最后登录2004-01-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-08-26 14:24
不需要呀,焊上7146和电源就能够工作了,启动不起来,多半是焊接的问题,或者金手指不干净 了
 

;; Saa7146wdm.inf

;; *********  PLEASE READ ***********
;; The wizard cannot create exact INF files for all buses and device types.
;; You may have to make changes to this file in order to get your device to
;; install. In particular, hardware IDs and logical configurations require
;; intervention.
;;
;; The Windows DDK documentation contains an excellent INF reference.

;--------- Version Section ---------------------------------------------------

[Version]
Signature=\"$Windows 95$\"
Provider=%ProviderName%

; If device fits one of the standard classes, use the name and GUID here,
; otherwise create your own device class and GUID as this example shows.

Class=MEDIA
ClassGUID={ff646f80-8def-11d2-9449-00105a075f6b}

;--------- SourceDiskNames and SourceDiskFiles Section -----------------------

; These sections identify source disks and files for installation.  They are
; shown here as an example, but commented out.

;[SourceDisksNames]
;1 = \"Install Disk\",Disk1,,

;[SourceDisksFiles]
;Saa7146wdm.sys = 1,,

;--------- ClassInstall/ClassInstall32 Section -------------------------------

; Not necessary if using a standard class

; 9X Style
[ClassInstall]
Addreg=Class_AddReg

; NT Style
[ClassInstall32]
Addreg=Class_AddReg

[Class_AddReg]
HKR,,,,%DeviceClassName%
HKR,,Icon,,\"-18\"

;--------- DestinationDirs Section -------------------------------------------

[DestinationDirs]
Saa7146wdm_Files_Driver = 10,System32\\Drivers

;--------- Manufacturer and Models Sections ----------------------------------

[Manufacturer]
%MfgName%=Mfg0

[Mfg0]

; PCI hardware IDs use the form
;   PCI\\VEN_aaaa&DEV_bbbb&SUBSYS_cccccccc&REV_dd
;
%DeviceDesc%=Saa7146wdm_DDI, PCI\\VEN_1131&DEV_7146&SUBSYS_00000000&REV_00

;---------- DDInstall Sections -----------------------------------------------
; --------- Windows 9X -----------------

; Experimentation has shown that DDInstall root names greater than 19 characters
; cause problems in Windows 98

[Saa7146wdm_DDI]
CopyFiles=Saa7146wdm_Files_Driver
AddReg=Saa7146wdm_9X_AddReg

[Saa7146wdm_9X_AddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,Saa7146wdm.sys
HKR, \"Parameters\", \"BreakOnEntry\", 0x00010001, 0

; --------- Windows NT -----------------

[Saa7146wdm_DDI.NT]
CopyFiles=Saa7146wdm_Files_Driver
AddReg=Saa7146wdm_NT_AddReg

[Saa7146wdm_DDI.NT.Services]
Addservice = Saa7146wdm, 0x00000002, Saa7146wdm_AddService

[Saa7146wdm_AddService]
DisplayName    = %SvcDesc%
ServiceType    = 1                  ; SERVICE_KERNEL_DRIVER
StartType      = 3                  ; SERVICE_DEMAND_START
ErrorControl   = 1                  ; SERVICE_ERROR_NORMAL
ServiceBinary  = %10%\\System32\\Drivers\\Saa7146wdm.sys

[Saa7146wdm_NT_AddReg]
HKLM, \"System\\CurrentControlSet\\Services\\Saa7146wdm\\Parameters\",\\
\"BreakOnEntry\", 0x00010001, 0


; --------- Files (common) -------------

[Saa7146wdm_Files_Driver]
Saa7146wdm.sys

;--------- Strings Section ---------------------------------------------------

[Strings]
ProviderName=\"xiaoweihuacom\"
MfgName=\"digtal signal process lab\"
DeviceDesc=\"mpeg4 encoder\"
DeviceClassName=\"mutimedia card\"
SvcDesc=\"multemedia card \"
xwh
xwh
驱动牛犊
驱动牛犊
  • 注册日期2002-02-11
  • 最后登录2004-01-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-08-26 14:04
不需要呀,焊上7146和电源就能够工作了,启动不起来,多半是焊接的问题,或者金手指不干净 了
 

后来把I2C的两个上拉电阻焊上后就没事了,不过用DS向导生成的INF文件没法安装设备,提示找不到硬件信息,不知何故,请高手再指导一下
gung
驱动中牛
驱动中牛
  • 注册日期2001-06-10
  • 最后登录2008-04-21
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-08-26 13:18
不需要呀,焊上7146和电源就能够工作了,启动不起来,多半是焊接的问题,或者金手指不干净 了
xwh
xwh
驱动牛犊
驱动牛犊
  • 注册日期2002-02-11
  • 最后登录2004-01-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-08-24 14:48
[quote]自己准备好内存,写寄存器启动dma就可以了,不需要什么封装好的函数了

 
您是否这样试过,真的没有问题吗? [/quote]

没有问题的,7146自己可以做master dma,不需要使用计算机的dma通道。
步骤:
1、准备好一块内存,获得该内存的物理地址(若为非连续内存则需要用到7146的scatter/gather功能)。
2、填写DEBI_CONFIG、DEBI_COMMAND、DEBI_PAGE、DEBI_AD四个寄存器
3、设置Interrupt enable register 开启debi_s中断
4、设置Main control register1使能debi dma
5、Upload!

debi传输结束后产生中断,在isr中保存数据 [/quote]
多谢您的指导,现在板子已经做出来了,开始调试却遇到问题,我现在只焊接了电源芯片和7146,另加一些滤波电容,但奇怪的是计算机无法找到设备,后来干脆连启动都启动不了,不知7146是否还有一些管脚需要上拉或下拉?
gung
驱动中牛
驱动中牛
  • 注册日期2001-06-10
  • 最后登录2008-04-21
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-08-13 11:02
自己准备好内存,写寄存器启动dma就可以了,不需要什么封装好的函数了

 
您是否这样试过,真的没有问题吗? [/quote]

没有问题的,7146自己可以做master dma,不需要使用计算机的dma通道。
步骤:
1、准备好一块内存,获得该内存的物理地址(若为非连续内存则需要用到7146的scatter/gather功能)。
2、填写DEBI_CONFIG、DEBI_COMMAND、DEBI_PAGE、DEBI_AD四个寄存器
3、设置Interrupt enable register 开启debi_s中断
4、设置Main control register1使能debi dma
5、Upload!

debi传输结束后产生中断,在isr中保存数据
xwh
xwh
驱动牛犊
驱动牛犊
  • 注册日期2002-02-11
  • 最后登录2004-01-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-08-02 08:35
自己准备好内存,写寄存器启动dma就可以了,不需要什么封装好的函数了 [/quote]
 
您是否这样试过,真的没有问题吗?
gung
驱动中牛
驱动中牛
  • 注册日期2001-06-10
  • 最后登录2008-04-21
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-08-01 17:55
saa7146具有主控dma传输能力,有好几个dma通道,每个通道都有一组寄存器,是不是可以直接设置这些寄存器,然后让它启动传输就可以了?为什么要用封装好的函数呢?这些函数好象也不能完成对7146的dma 相关寄存器的初始化,我觉得这些封装好的函数对系统DMA来说有用,但对总线dma来讲没有什么用处。我的理解不知对不对?请高手点拨!


自己准备好内存,写寄存器启动dma就可以了,不需要什么封装好的函数了
xwh
xwh
驱动牛犊
驱动牛犊
  • 注册日期2002-02-11
  • 最后登录2004-01-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2003-08-01 10:16
自己先顶一下,我已经仔细看过walter oney的书,但主dma那一段还是不太明白,我不知道写7146的dma相关寄存器应该在那里写,是在startio,还是在adaptcontrol?或者是在别的什么地方?
游客

返回顶部