RSS

嵌入式系统ARM中DMA在数据采集中的应用03

来源:网络 作者:佚名 时间:2008-07-16 Tag:嵌入式系统   ARM   DMA   数据采集   点击:

fpga_buf_t *b=&fpga_buf;
    dma_addr_t *buf;
    b->size=count;
    buf="kmalloc"(b->size,GFP_DMA);
    s3c2410 dma_queue_buffer(b->dma_ch,(void*)b,buf,b->size,DMA_BUF_RD);
    if(copy_to_user(buff,buf,b->size))
    return -EFAULT;
    kfree(buf);
    return b->size;

  系统调用read函数时首先通过kmalloc分配一段虚拟内存空间,并将其指针和DMA通道、传输字节数一起通过s3c2410_dma_queue_buffer()加入DMA队列.在队列函数中调用process_dma()函数将虚拟地址转换为物理地址并且启动DMA操作。DMA操作完成后退出队列并调用copy_to_user()将采集到的数据由内核空间拷贝到用户空间进行后续操作。

5 测试结果

  图4为逻辑分析仪测得的数据采集时序图,A1表示FIFO中写入的数据数量;A2表示ARM采集到的数据;A3(0)表示读时钟CLKOUTO,频率为101.5 MHz;A3(1)表示片选信号nGCS4;A3(2)为DMA应答信号DACKO,即FIFO的读请求信号;A3(3)表示FIFO的空信号,即DMA的请求信号DREQO;A3(4)表示FIFO的复位信号,高电平复位,低电平开始工作;A3(5)表示FIFO的写时钟,频率为5 MHz;A3(6)表示写请求;A3(7)表示FIFO满信号。

  由测试结果可以看出.DMA操作完全符合时序要求.一次数据采集所需时间约为220 ns,系统工作稳定正常。

  6 结束语

  本文讨论了S3C2410微控制器的DMA通道在数据采集中的应用,并通过与FPGA相配合设计了基于DMA方式的数据采集系统,同时给出了Linux下设备驱动程序的设计思路。文章所设计的数据采集接口具有很强的通用性,可以广泛用于各种信号量的采集。


1.部分资源来自网络,经ET电子归类整理,旨在服务电子爱好者并无商业目的,不保证正确性与完整性.
2.如果您觉得本站资源对您有用,请告知您的好友,用搜索引擎搜"ET电子"即可.


最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
教程下载