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

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

3天内不再提示

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

英创信息技术 来源:英创信息技术 作者:英创信息技术 2020-02-11 16:50 次阅读

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

关于对精简ISA总线接口的应用编程的基本方法,请参考《精简ISA总线编程 – Part 1》。本文介绍由应用程序启动基于DMA的数据块读写,即MemCpy方式的DMA。采用DMA进行ISA总线数据传送的目的,是为了降低高速传送大量数据时的CPU开销。MemCpy方式的DMA是指软件线程启动DMA,然后该线程挂起等待DMA操作完成。在多线程环境中,其他线程即可在DMA执行过程中得以并行运行。

ISA总线信号定义如下:

信号及说明 PIN# 信号及说明
RESET_B,硬件复位 1 2 ISA_ADVn,地址锁存控制信号
ISA_AD0,地址数据总线,LSB 3 4 ISA_AD4,地址数据总线
ISA_AD1,地址数据总线 5 6 ISA_AD5,地址数据总线
ISA_AD2,地址数据总线 7 8 ISA_AD6,地址数据总线
ISA_AD3,地址数据总线 9 10 ISA_AD7,地址数据总线,MSB
MSLn,支持多模块挂接总线 11 12 ISA_WEn,数据写控制信号
GPIO9,可选作为IRQ 13 14 ISA_RDn,数据读控制信号
GPIO8,可选作为IRQ 15 16 ISA_CSn,片选控制信号
GPIO25,可选作为IRQ 17 18 VDD_5V0,+5V供电
GPIO24 / ISA_BCLK,同步时钟ISA_BCLK 19 20 GND,电源信号地

本文以下部分,将以ESM7000 Linux平台为例,介绍具体的编程方法。

DMA总线访问API

应用启动DMA数据传输,需要使用数据结构struct isa_transfer的传递参数和数据,structisa_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 */
};

每一个总线周期的操作只能是读或写,因此在isa_transfer结构中只能有一个buffer指针不为NULL。以下是执行32字节数据块写的代码,写入地址为0x4040。顺序的数据可方便时序的观察。

unsignedchargbuf[64 * 1024];
unsignedint i, value;
structisa_transfer t;
unsignedchar *pBuf8;
// write data block
memset(&t, 0, sizeof(structisa_transfer));
t.offset = 0x4040;
t.len = 32; // max len<= 16KB = 16 * 1024
t.tx_buf = gbuf;
// fill data
value = 0x55; // initialvalue
pBuf8 = (unsignedchar*)t.tx_buf;
for(i = 0; i
*pBuf8 = (unsignedchar)(value + i);
pBuf8++;
}
isa_write_buf(fd, &t);

注意offset必须是0x4000 – 0x40FF,驱动程序才会启动MemCpy方式的DMA传输。若从0x4040读入32字节数据,实现代码则为:

unsignedchargbuf[64 * 1024];
structisa_transfer t;
// read data block
memset(&t, 0, sizeof(structisa_transfer));
t.offset = 0x4040;
t.len = 32; // max len<= 16KB = 16 * 1024
t.rx_buf = gbuf;
isa_read_buf(fd, &t);

DMA传输总线时序说明

图1、图2分别为MemCpy方式DMA读总线时序概要、写总线时序概要。

图1DMA读总线时序

图2DMA写总线时序

从上面的时序可见,DMA也是16字节一组,连续4个总线周期组成,每组之间有一定间隔。DMA读操作的总线速率大约为11.8MB/s,DMA写操作的总线速率大约为11.2MB/s。

展开DMA写的总线时序可看到:

图3DMA写总线时序—第1组起始部分

图4DMA写总线时序—第1组结束部分

图5DMA写总线时序—第2组起始部分

图6DMA写总线时序—第2组结束部分

在每个总线周期中,地址递增4。这样当传输长度超过256字节时,ISA地址及会循环。这意味着当采用MemCpy方式DMA进行数据传输时,数据端口译码不能采用普通的组合电路地址译码方式,而必须采用BCLK+ ADV#的同步电路译码方式。具体方式就是每个周期的第一个BCLK下降沿锁存到有效ADV#,标志同步周期的开始,之后经过连续7个BCLK下降沿后同步周期结束。

DMA传输时的CPU负载率

与纯软件的同步总线周期传输相比,DMA传输最大的优点是有效降低了总线传输的CPU开销,使应用程序的其它线程能同步运行。基本的测试代码如下:

#define MAX_DMA_LEN (16*1024)
unsignedchar gbuf[64 * 1024];
unsignedint i, count = 1;
struct isa_transfer t;
unsignedchar *pBuf8;
longdouble a[4], b[4], loadavg; //for CPU utilization calculation
FILE *fp;
constchar *bus_type_name[] = {"async-cpu","async-dma-mem","async-dma-ext","sync-cpu","sync-dma-mem","sync-dma-ext"};
// fill data
pBuf8 = (unsignedchar*)gbuf;
for(i = 0; i < MAX_DMA_LEN; i++){
*pBuf8 = (unsignedchar)(value + i);
pBuf8++;
}
memset(&t, 0, sizeof(struct isa_transfer));
// get initial values for calculating CPU usage in %
fp = fopen("/proc/stat","r");
fscanf(fp,"%*s %Lf %Lf %Lf %Lf",&a[0],&a[1],&a[2],&a[3]);
fclose(fp);
// write data block loop
while(count) {
i = (count < MAX_DMA_LEN)? count : MAX_DMA_LEN;
t.offset = offset;
t.len = i;
t.tx_buf = gbuf;
isa_write_buf(fd, &t);
count -= i;
}
// get end values for calculating CPU usage in %
fp = fopen("/proc/stat","r");
fscanf(fp,"%*s %Lf %Lf %Lf %Lf",&b[0],&b[1],&b[2],&b[3]);
fclose(fp);
// calculate CPU usage in %
loadavg = ((b[0]+b[1]+b[2]) - (a[0]+a[1]+a[2])) /((b[0]+b[1]+b[2]+b[3]) - (a[0]+a[1]+a[2]+a[3]));
loadavg *= 100;
i = (offset >> 12) & 0xf;
printf("%s bus write, CPU utilization is : %Lf%%\n",bus_type_name[i], loadavg);

使用100M数据长度来测试总的CPU负载率的情况如下:

模式 MemCpy DMA 纯软件操作
同步总线读 6.01% 50.3%
同步总线写 5.71% 50.0%

ESM7000使用的是具有双核CPU的iMX7D,总CPU负载率50%,表示某个CPU核的负载已经100%。DMA的使用对提高系统整体的性能是非常显著的。

进一步可测试应用层实际的传输速率如下:

模式 传输速率 CPU负载
MemCpy DMA同步总线读 8.67MB/s 6.01%
MemCpy DMA同步总线写 7.93MB/s 5.71%

若把每个周期传输的字节数从4个提升到8个,传输率则可有50%的提升。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11302

    浏览量

    209427
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6085

    浏览量

    35314
收藏 人收藏

    评论

    相关推荐

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

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

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

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

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

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

    拓维信息参与牵头组建!长沙新一代信息技术产教联合体正式获批

    的长沙新一代信息技术产教联合体成功获批,为长沙市信息技术产业发展注入了新的活力。图/《2024年长沙市市级市域产教联合体名单》长沙新一代信息技术产教联合体将依托龙头企
    的头像 发表于 12-07 01:06 366次阅读
    拓维<b class='flag-5'>信息</b>参与牵头组建!长沙新一代<b class='flag-5'>信息技术</b>产教联合体正式获批

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

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

    Linux应用编程的基本概念

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

    国产化背景下的工控主板发展现状

    ,是信息技术应用创新产业的简称,于2016年“信工委会”(信息技术应用创新工作委员会)提出,目的就是要推动我们国内软硬件关键技术的研发
    的头像 发表于 09-21 16:15 395次阅读

    加速鲲鹏落地!拓维信息迁移工具荣获鲲鹏原生开发技术认证

    认证。图/拓维·数据库适配中间件取得鲲鹏原生开发N认证在数字化时代的大潮中,信战略作为国家推动信息技术应用创新、保障信息安全与自主可控的关键举措,其重要性日益凸显
    的头像 发表于 09-10 08:03 446次阅读
    加速鲲鹏落地!拓维<b class='flag-5'>信息</b>信<b class='flag-5'>创</b>迁移工具荣获鲲鹏原生开发<b class='flag-5'>技术</b>认证

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

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

    中软国际信服务助力大连信产业发展

    为进一步激发大连本地信产业生态的活力与潜力,搭建一个高效、开放的交流平台。由大连软件行业协会携手大连市信息技术应用创新综合服务中心主办,中软国际协办的,2024年大连市信息技术应用创新产业发展大会
    的头像 发表于 08-27 16:49 874次阅读

    翼辉信息入选2023年信息技术应用创新解决方案名单

    近日,2023 年(第五届)信息技术应用创新解决方案公布遴选名单,历经资格初审、技术中评、区域评议、终评预审,翼辉以“面向工业领域嵌入式操作系统 SylixOS 解决方案”,成功在全国优秀方案中脱颖而出,入选典型解决方案名单。
    的头像 发表于 04-28 11:37 548次阅读
    翼辉<b class='flag-5'>信息</b>入选2023年<b class='flag-5'>信息技术</b>应用创新解决方案名单

    光庭信息荣膺武汉市侨届“科之星”称号

    4月2日,武汉市侨联十一届五次全委(扩大)会议隆重召开,武汉光庭信息技术股份有限公司(简称“光庭信息”)凭借其在科技创新领域的突出贡献,被授予“科之星”荣誉称号。
    的头像 发表于 04-07 10:25 410次阅读

    龙芯中科三项信方案入围工信部2023年信息技术应用创新应用示范案例名单

    近日,工业和信息化部通报了2023年信息技术应用创新解决方案征集遴选结果,本次共评选出典型解决方案173个、应用示范案例83个、单项创新案例64个。
    的头像 发表于 03-07 16:45 926次阅读
    龙芯中科三项信<b class='flag-5'>创</b>方案入围工信部2023年<b class='flag-5'>信息技术</b>应用创新应用示范案例名单

    RX78M组 EtherCAT ETG.5003示例程序固件信息技术

    电子发烧友网站提供《RX78M组 EtherCAT ETG.5003示例程序固件信息技术.pdf》资料免费下载
    发表于 02-21 14:22 1次下载
    RX78M组  EtherCAT ETG.5003示例程序固件<b class='flag-5'>信息技术</b>

    软通动力与捷技术签订战略合作协议

    近日,软通动力信息技术(集团)股份有限公司(以下简称“软通动力”)与宁波捷技术股份有限公司(以下简称“捷技术”)正式签订战略合作协议,并
    的头像 发表于 02-03 16:35 1117次阅读