阅读:1979回复:15
关于saa7146的 dma操作问题
saa7146具有主控dma传输能力,有好几个dma通道,每个通道都有一组寄存器,是不是可以直接设置这些寄存器,然后让它启动传输就可以了?为什么要用封装好的函数呢?这些函数好象也不能完成对7146的dma 相关寄存器的初始化,我觉得这些封装好的函数对系统DMA来说有用,但对总线dma来讲没有什么用处。我的理解不知对不对?请高手点拨!
|
|
沙发#
发布于:2003-08-01 10:16
自己先顶一下,我已经仔细看过walter oney的书,但主dma那一段还是不太明白,我不知道写7146的dma相关寄存器应该在那里写,是在startio,还是在adaptcontrol?或者是在别的什么地方?
|
|
板凳#
发布于:2003-08-01 17:55
saa7146具有主控dma传输能力,有好几个dma通道,每个通道都有一组寄存器,是不是可以直接设置这些寄存器,然后让它启动传输就可以了?为什么要用封装好的函数呢?这些函数好象也不能完成对7146的dma 相关寄存器的初始化,我觉得这些封装好的函数对系统DMA来说有用,但对总线dma来讲没有什么用处。我的理解不知对不对?请高手点拨! 自己准备好内存,写寄存器启动dma就可以了,不需要什么封装好的函数了 |
|
地板#
发布于:2003-08-02 08:35
自己准备好内存,写寄存器启动dma就可以了,不需要什么封装好的函数了 [/quote]
您是否这样试过,真的没有问题吗? |
|
地下室#
发布于: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中保存数据 |
|
5楼#
发布于: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是否还有一些管脚需要上拉或下拉? |
|
6楼#
发布于:2003-08-26 13:18
不需要呀,焊上7146和电源就能够工作了,启动不起来,多半是焊接的问题,或者金手指不干净 了
|
|
7楼#
发布于:2003-08-26 14:04
不需要呀,焊上7146和电源就能够工作了,启动不起来,多半是焊接的问题,或者金手指不干净 了 后来把I2C的两个上拉电阻焊上后就没事了,不过用DS向导生成的INF文件没法安装设备,提示找不到硬件信息,不知何故,请高手再指导一下 |
|
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 \" |
|
9楼#
发布于:2003-08-26 14:27
这个INF文件肯定有问题,我感觉ClassGUID有问题,但不知道应该写成多少?
|
|
10楼#
发布于:2003-08-26 15:16
我用windriver生成一个INF,把这两个参数改了,就正常了
|
|
11楼#
发布于:2003-08-26 18:54
搞定啦?呵呵,祝贺
|
|
12楼#
发布于:2003-08-28 21:45
采用immediate方式读写debi口是不是不用启动dma来传输
|
|
13楼#
发布于:2003-11-02 16:19
请gung再进来看看,我想使用DEBI接口的块传输功能,但不知道地址怎么得到,比如我想启动一个512字节的块传输,在应用层我可以很容易的开辟一个512字节的缓冲区,传到驱动层后可以得到这个指针,然后应该再怎么做呢?DEBI_PAGE,DEBI_AD应该如何设置呢?
|
|
14楼#
发布于: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 |
|
15楼#
发布于:2004-03-02 15:54
大虾们
请问为何7146的Main control register2中upload7146的dma1的registers可以开启dma进入中断,而如果在此之前upload7146的hps相关registers就无法进入中断哪?如果不upload7146的hps相关registers是否hps就无法工作呢? |
|