0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

英创信息技术精简ISA总线Linux编程 – Part3简介

英创信息技术 ? 来源:英创信息技术 ? 作者:英创信息技术 ? 2020-02-11 16:48 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

精简ISA总线接口是一种8-bit宽度的双向并行扩展总线,其特点是地址数据分时复用8位总线,加上4条总线控制信号,即可实现对外部数据的快速读写。若再使能一条总线时钟信号(共13条信号),就可实现高达10MB/s以上的数据传输。精简ISA总线作为英创主板的特色功能之一,在ESM6802、ESM7000、ESM7100、ESM335x等多款型号中均有配置。

关于对精简ISA总线接口的应用编程的基本方法,请参考《精简ISA总线编程– Part 1》;应用程序直接启动DMA做定长数据的传送方法,请参考《精简ISA总线编程– Part 2》。本文介绍由外部硬件触发DMA传送,应用程序通过ISA驱动(/dev/em_isa)读取采集数据的方法。

硬件DMA的基本工作原理

下图是基于硬件DMA实现高速数据采集功能的系统框图:

●应用程序通过常规的异步ISA读写操作,对AD采集单元进行必要配置。

●通过特殊的isa_write_buf(..)操作启动硬件DMA。

●当AD采集单元转换数据准备好,发出DMA请求信号(DMAREQ置高,脉冲宽度400ns – 1000ns)。

●DMA控制器感受到DMAREQ信号,连续产生4个同步总线周期,读取AD单元内已准备好的数据,每个同步周期读取2个字节,共读取8个字节。从DMAREQ请求开始,到DMA数据传输完毕,整个过程大约1840ns。之后DMA将等待一下一个DMAREQ脉冲信号。

●DMA读取的数据将自动存入驱动程序内部的环形Buffer中,当DMA读取的数据达到一定阈值(4KB)时,驱动将通过事件触发应用程序读取整块数据。

由于AD单元中的数据是通过DMA硬件存入系统缓冲区的,由此产生的CPU开销就很低。应用程序可在数据采集的同时,完成必要的数据处理、显示、通讯等功能块。另一方面,由于AD采集单元不再需要保存转换的数据,可有效降低硬件成本。

实现基于硬件DMA的数据采集,需要以下信号:

ESM7000信号管脚 实际信号功能
ISA_AD0 ISA地址数据总线,LSB
ISA_AD1 ISA地址数据总线
ISA_AD2 ISA地址数据总线
ISA_AD3 ISA地址数据总线
ISA_AD4 ISA地址数据总线
ISA_AD5 ISA地址数据总线
ISA_AD6 ISA地址数据总线
ISA_AD7 ISA地址数据总线,MSB
ISA_CSn ISA片选控制信号CS,低电平有效
GPIO24 ISA同步总线周期时钟BCLK
ISA_ADVn ISA地址锁存控制信号ADV,低电平有效
ISA_RDn ISA数据读控制信号RD,低电平有效
ISA_WEn ISA数据写控制信号WE,低电平有效
GPIO12 DMA请求信号DMAREQ,输入,高电平有效

注意:在使用硬件DMA数据传输时,将禁止使用挂角GPIO12和GPIO24的GPIO功能、禁止使用CAN2端口

DMA传输总线时序说明

图1是一次完整的DMA传输总体时序图。

图1硬件DMA传输总线时序

从上面的时序可见,DMAREQ请求开始,到第一个总线周期,大约有640ns的延时。整个传输周期大约1840ns。按2000ns计算,采用硬件DMA传输,可实现每秒4MB字节的数据传输率。若假设4路模拟通道,每个样点16-bit量化,这样就对应每通道500ksps的采样率。这样的采样率可满足绝大部分的工控应用需求。展开图1观察,可见:

图2硬件触发DMA传输时序前半部分

图3硬件触发DMA传输时序后半部分

从上面的时序图可见,有DMA启动的总线周期,每个周期只有6个BCLK脉冲,读取2个数据字节。这与在《精简ISA总线编程– Part 2》中介绍的CPU启动的DMA操作不同。在使用时需特别注意。DMAREQ的脉冲宽度有一定要求:DMAREQ脉冲宽度应大于240ns,才能保证可靠触发DMA,其次DMAREQ应在DMA传输周期结束前变低,否则可能误触发下一次DMA传输。

每个总线周期详细的时序关系如下:

图4硬件触发DMA总线周期时序

图5硬件触发DMA总线周期时序参数标注

为了简化AD采集单元的电路设计,硬件触发DMA传输总线周期输出的地址固定在0xE0。AD采集单元的其他寄存器应避免使用0xE0 – 0xE1这两个地址。

应用程序设计要点

应用程序启动DMA数据传输,需要使用数据结构struct isa_transfer的传递参数和数据,struct isa_transfer的结构定义如下:

structisa_transfer
{
void *rx_buf; /* != NULL: buffer for bus read */
void *tx_buf; /* != NULL: buffer for bus write */
unsigned len; /* buffer length in byte */
unsigned offset; /* offset,port address on isa bus */
unsigned inc; /* = 0: fixed offset, = 1: offset+1 after r/w */
};

启动硬件触发DMA传输,需要特殊的写操作,代码如下:

structisa_transfer t;
// start ext-trigger dma
memset(&t, 0, sizeof(structisa_transfer));
t.offset = 0x50E0;
t.len = 0xFFFFFFFF;
isa_write_buf(fd, &t);

注意在上述代码中t.rx_buf和t.tx_buf均必须为空。停止硬件触发DMA传输的代码为:

structisa_transfer t;
// stopext-trigger dma
memset(&t, 0, sizeof(structisa_transfer));
t.offset = 0x50E0;
t.len = 0;
isa_write_buf(fd, &t);

在启动DMA后,应用程序的数据接收线程需调用poll等待数据ready的消息:

structpollfdfds[1];
fds[0].fd = fd;
fds[0].events = POLLPRI;
// wait data ready with timeout 2 seconds
if(poll(fds, 1, 2) == -1) {
perror("poll failed!\n");
goto error;
}
// data is ready….

读取数据的代码为:

intrc, total_bytes;
structisa_transfer t;
externunsignedchargbuf[64 * 1024];
total_bytes = 0;
memset(&t, 0, sizeof(structisa_transfer));
// read data
t.rx_buf = gbuf;
t.offset = offset;
t.len = sizeof(gbuf);
rc = read(fd, &t, sizeof(structisa_transfer));
if(rc< 0) {
printf("%s dma data read failed %d\n", __func__, rc);
}
elseif(rc> 0) {
total_bytes += rc;
printf("%s dma data read %d\n", __func__, total_bytes);
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6105

    浏览量

    36478
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    易华录入选国家级信息技术应用创新典型解决方案

    近日,工业和信息化部网络安全产业发展中心(工业和信息化部信息中心)公布了“2024年信息技术应用创新解决方案”评选结果。易华录申报的“基于节能高效蓝光的超级智能存储解决方案”凭借显著的
    的头像 发表于 08-07 15:35 ?483次阅读

    信息技术应用产学协同人才培养行动计划”正式发布,诚迈科技入选首批参与单位

    设在中国软件评测中心。诚迈科技作为信技术先锋企业,受邀成为首批参与单位,与国内顶尖高校、领军企业和权威机构携手,共同打造具有中国特色的信息技术人才培养新范式,为
    的头像 发表于 08-06 17:29 ?744次阅读
    “<b class='flag-5'>信息技术</b>应用产学协同人才培养行动计划”正式发布,诚迈科技入选首批参与单位

    佛瑞亚如何通过信息技术推动业务增长

    在数字化、信息化的浪潮下,信息技术已经不仅是后台工具,更成为驱动企业发展的关键力量。本期Women Inspiring Mobility,我们采访了佛瑞亚中国区信息技术总监马瑛,了解她和团队如何将
    的头像 发表于 07-29 14:00 ?405次阅读

    飞腾主板为信产业发展提高硬实力

    信息技术飞速发展的当下,信产业已成为我国实现科技自立自强、保障国家信息安全的关键领域。信,即信息技术应用创新,其核心目标是实现
    的头像 发表于 07-22 18:20 ?307次阅读

    DEKRA德凯成为沙特通信和信息技术设备技术法规认证机构

    近日,DEKRA德凯成功获得沙特标准、计量和质量组织(SASO)认可,正式成为沙特通信和信息技术设备技术法规(Technical Regulation for Communications
    的头像 发表于 07-15 14:27 ?443次阅读

    科普|信是什么?一文读懂“信息技术应用创新”战略

    什么是信?信,即“信息技术应用创新”,是国家推动IT系统自主可控、安全可控的重要战略工程。它不仅是技术层面的创新,更承载着保障国家网络安全、推动产业升级和实现数字主权的重任。简单来
    的头像 发表于 06-13 10:06 ?3081次阅读
    科普|信<b class='flag-5'>创</b>是什么?一文读懂“<b class='flag-5'>信息技术</b>应用创新”战略

    Platform总线简介

    平台总线(Platform Bus)是 Linux 内核中的一个基础架构,用于支持硬件平台上的设备驱动程序的开发和管理。它提供了一种统一的方式来表示和操作与特定平台相关的设备。平台总线的设计目标是将
    发表于 03-31 16:43

    龙芯中科荣获2024年度信息技术应用创新工作委员会卓越贡献成员单位

    近日,中国电子工业标准化技术协会信息技术应用创新工作委员会(以下简称“信工委会”)在北京召开2024年度工作总结座谈会暨信“大比武”总结大会。中国工程院院士、信
    的头像 发表于 01-23 10:50 ?778次阅读

    芯盛智能荣获2024年信息技术应用创新工作委员会卓越贡献成员单位

    日前,中国电子工业标准化技术协会信息技术应用创新工作委员会(以下简称 “信工委会”)2024 年度总结座谈会于北京隆重举行。此次会议对在信工作中作出突出贡献的成员单位予以表彰。江苏
    的头像 发表于 01-20 09:56 ?713次阅读

    飞腾助力首届教育信息技术应用创新大赛圆满落幕

    近日,由中国教育技术协会主办,教育部教育管理信息中心教育信实验室、公安部第三研究所、中国电子工业标准化技术协会信工委会支持,北京航空航天
    的头像 发表于 12-24 09:57 ?586次阅读

    有方科技参编的信息技术团体标准发布

    近日,有方科技参编的《信息技术产品供应链成熟度 共性指标 第1部分:企业背景评价》《信息技术产品供应链成熟度 共性指标 第2部分:技术掌控评价》《信息技术产品供应链成熟度 共性指标 第
    的头像 发表于 12-23 10:44 ?685次阅读

    龙芯中科助力2024首届教育信息技术应用创新大赛成功举办

    近日,2024首届教育信息技术应用创新大赛在北京航空航天大学成功举办。本次大赛由中国教育技术协会主办,教育信实验室、公安部第三研究所、中国电子工业标准化技术协会信
    的头像 发表于 12-19 17:02 ?629次阅读

    中科达荣获2024年软件和信息技术服务优秀企业

    及前百家企业”名单。中科达凭借非凡的技术实力与持续的创新能力,成功入选“2024年度软件和信息技术服务竞争力百强企业”以及“2024年软件和信息技术服务优秀企业”。
    的头像 发表于 10-30 11:44 ?1077次阅读

    Linux应用编程的基本概念

    Linux应用编程涉及到在Linux环境下开发和运行应用程序的一系列概念。以下是一些涵盖Linux应用编程的基本概念。
    的头像 发表于 10-24 17:19 ?730次阅读

    梯度科技入选2023年信息技术应用创新解决方案名单

    日前,工业和信息化部网络安全产业发展中心(工业和信息化部信息中心)在天津举办2024信息技术应用创新发展大会暨解决方案应用推广大会。会上正式公布了2023年
    的头像 发表于 09-09 16:29 ?835次阅读