摘要: CEDDK提供了DMA的相关函数,在CEDDK/DDK_DMA/ddk_dma.c中定义。实际上里面最有用的就两个函数,HalAllocateCommonBuffer(..)和HalFreeCommonBuffer(..)分别用于为DMA申请和释放 首先介绍一下会用到的DMA适配器结构,在ceddk.h中定义,如下:typedef struct _DMA_ADAPTER_OBJECT_{ USHORT ObjectSize; //该结构的大小 INTERFACE_TYPE InterfaceType; //接口类型,一般用做DMA时设置为Internal ULONG BusNumber; // 阅读全文
posted @ 2011-08-18 21:16 keeppoised 阅读(522) 评论(0) 推荐(0) 编辑
摘要: 1、 芯片DMA的使用要点:AK3224芯片的DMA使用中,RAM的地址作为DMA传输的目标地址、源地址,必须要4字节对齐。而且DMA的操作长度以内的RAM地址,必须连续。不过在使用中发现:Nandflash驱动中RAM地址作为目标地址时,只需要2字节对齐。RAM地址作为源地址可不需对齐。(其他情况需要逐一验证)2、 wince中的DMA使用:根据DMA一次操作的RAM地址必须连续的特性,在驱动DMA使用时,我们需要确保虚拟地址映射的物理地址是连续的。有3个途径:1:数据区地址是由应用层或者其他进程、线程传入的,驱动并不知道其虚拟地址对应的物理地址是否一直连续。由于wince的内存申请,是以4 阅读全文
posted @ 2011-08-18 21:07 keeppoised 阅读(454) 评论(0) 推荐(0) 编辑
摘要: 1、DMA驱动做成流驱动;附:DMA的好处:使用DMA的好处就是它不需要CPU的干预而直接服务外设,这样CPU就可以去处理别的事务,从而提高系统的效率,对于慢速设备,如UART,其作用只是降低CPU的使用率,但对于高速设备,如硬盘,它不只是降低CPU的使用率,而且能大大提高硬件设备的吞吐量。因为对于这种设备,CPU直接供应数据的速度太低。 因CPU只能一个总线周期最多存取一次总线,而且对于ARM,它不能把内存中A地址的值直接搬到B地址。它只能先把A地址的值搬到一个寄存器,然后再从这个寄存器搬到B地址。也就是说,对于ARM,要花费两个总线周期才能将A地址的值送到B地址。而DMA就不同了,一般系统 阅读全文
posted @ 2011-08-18 21:00 keeppoised 阅读(390) 评论(0) 推荐(0) 编辑
摘要: 最近在思考DSP和FPGA实现IIR滤波的优劣,看到这篇比较全面的文章。原文地址:http://www.chinaaet.com/article/index.aspx?id=13921 摘 要: DSP和FPGA是目前数字电路设计采用的两种主要手段,其各有自身的优缺点,故在设计数字系统前必需进行方案选择。DSP+FPGA结构的新思想的出现以及嵌入DSP模块的FPGA设计方案使得数字电路设计有了更大的选择空间。关键词: DSP FPGA DSP+FPGA 嵌入DSP模块的FPGA数字信号处理技术和大规模集成电路技术的迅猛发展,为我们设计数字电路提供了新思路和新方法。当前数字系统设计正朝着速度快、 阅读全文
posted @ 2011-08-16 20:56 keeppoised 阅读(2454) 评论(0) 推荐(0) 编辑
摘要: 1、软件包安装参考http://processors.wiki.ti.com/index.php/GSG:_DVSDK_for_Windows_CE_Software_Setup(1)安装WINCE6:Microsoft Visual Studio 2005 version 8.0.50727.762 (SP.050727-7600) -ENU Service Pack 1 (KB926601)Platform Builder(注意:如果在WIN7下安装PB,应该用管理员身份打开CMD窗口,然后再命令行下执行 CALL "xxx.msi")Windows Embedded 阅读全文
posted @ 2011-06-12 21:35 keeppoised 阅读(848) 评论(0) 推荐(0) 编辑
摘要: WINCE6.0, FIFO驱动程序采集AD数据。FIFO驱动的IST中等待FIFO的半满中断(下降沿触发),等待成功后读取FIFO数据。在进入IST后,由于FIFO已经开始采数,此时的FIFO是全满的,不会产生下降沿触发的半满中断,因此实现需要清掉FIFO里面的数据,C++代码如下:void CFifoDevice::Clear(){unsigned shrot stmp; for(int k=0; k<5; k++){for(int i = 0; i < FULL_FIFO_WORDS; i++){stmp= (*(unsigned short*)m_virtFIFO);//m 阅读全文
posted @ 2011-06-12 12:03 keeppoised 阅读(270) 评论(0) 推荐(0) 编辑
摘要: 安装试用版的PB6四个月后,Make Runtime image时报错误“failed PB timebomb check”。解决办法:http://www.cnblogs.com/we-hjb/archive/2010/01/20/1652226.htmla)删除目录C:\Program Files\Microsoft Platform Builder\6.00下的EtkRemov.inf文件b)新建一个文本文档c)重命名新建文本文档为EtkRemov.inf注意,必须要建一个和EtkRemov.inf不重名的文件,否则“filesystem tunnel”会自动修改文件的修改时间。http 阅读全文
posted @ 2011-06-12 09:25 keeppoised 阅读(428) 评论(0) 推荐(0) 编辑
摘要: WINCE6下调试双通道500MHz信号的采集,用了两个线程。在两个通道的采集都使能时,如果通道2仅仅是WaitForSingleObject,然后continue,则通道1的采集是正常的;但如果通道2也读数(通过片选读某个地址,每次读取2048个WORD),通道1的读数就跟不上了。以前也曾经考虑过Android;由此看来,Android做工控未必合适,特别是有性能要求的场合。不知道Linux的表现会不会不同。 阅读全文
posted @ 2011-06-08 10:39 keeppoised 阅读(923) 评论(0) 推荐(0) 编辑
摘要: 1、测试程序,越细致越好,越准确越好。坚持使用最准确的测试程序来测试技术点。不要试图用一个程序测试多个问题。 在集成OMAP3530的DSP滤波功能时,一开始直接用C#程序产生余弦信号,然后调用DSP_iir,结果根本不对。最后,用等价的C程序来模拟DSP_iir,用Matlab产生余弦信号和滤波器序数,才对关键问题有了定位。 阅读全文
posted @ 2011-06-05 07:19 keeppoised 阅读(165) 评论(0) 推荐(0) 编辑
摘要: http://www.mathworks.com/matlabcentral/newsreader/view_thread/244472-------------------------------------------------------------------------------------------问题:I recently changed my system to Windows 7 Beta and installed Matlab R2007b on it. The installation progress went well but I can not run it 阅读全文
posted @ 2011-06-02 20:49 keeppoised 阅读(3244) 评论(0) 推荐(0) 编辑