1. AMBA总线概述

AMBA2.0 以上版本都是基于单沿时钟、单向信号线的协议[1]

现在市场上大部分的基于 AMBA 架构的 SoC 产品, 系统总线采用 AHB, 外部总线采用 APB。系统总线负责连接例如 ARM 嵌入式处理器、DMA 控制器、片上存储器或其他需要高带宽的元件。 外围总线则是用以连接系统的外围元件, 其协议相对来说较为简单, 而两种总线通过总线桥相连。 通过这种机制来减轻系统总线的负担。

根据intergration手册,Cortex-m0p和Cortex-m4均采用AMBA 3.0协议,Cortex-m0p只用了其中的AHB、AHB-Lite,对于GPIO自己定义了一个IO port(IOP),用户例化时可自行选择使用IOP还是AHB-Lite,Cortex-m4则分别支持AHB、AHB-Lite和APB协议。

2. AHB-Lite信号

AHB-Lite协议下的总线与设备间接口port定义:

  input              HCLK;
input HRESETn;
input [:] HADDR; //主发从收-地址总线
input [ :] HBURST;
input HMASTLOCK;
input [ :] HPROT;
input [ :] HSIZE;
input [ :] HTRANS;
input [:] HWDATA; //主发从收-写数据
input HWRITE; //主发从收-写命令
input HSEL; //多路器发从设备收-从机选则
input HREADY; //多路器发主设备收-总线ready output [:] HRDATA; //从发主收-读数据
output HREADYOUT; //从发主收或多路器收-从设备ready
output HRESP; //从发主收:0-OKAY;1-ERROR

不管是m0+还是m4,访问GPIO都是用的AMBA3.0 AHB Lite协议,使用的总线信号如下:

HSIZE[1]     HSIZE[0]    单次传输的数据宽度

0                  0           8bit

0                  1           16bit

1                  0           32bit

当HSIZE[1:0] ={ 00 }, 8bit访问的情况:

HADDR[1]      HADDR[0]    字节地址选择  对应屏蔽码

0                            0         0                  0001

0                            1         1                  0010

1                            0         2                  0100

1                            1         3                  1000

当HSIZE[1:0] ={ 01 }, 16bit访问的情况:

HADDR[1]       HADDR[0] 读写地址选择  对应屏蔽码

0                            0         0                   0011

0                            1         X(0)              0011

1                            0         2                  1100

1                            1         X(0)              1100

当HSIZE[1:0] ={ 11 }, 32bit访问的情况:

HADDR[1]           HADDR[0] 读写地址选择  对应屏蔽码

1                            0           0                      1111

0                            1         X(0)                   1111

1                            0         X(0)                   1111

1                             1         X(0)                   1111

HTRANS[1]      HTRANS[0]   总线状态 – 只有当HTRANS[1]=1时才是一次有效传输

0                            0         空闲

0                            1         忙

1                            0         传输-非连续传输

1                            1         传输-连续传输(为突发传输而设,地址自增,GPIO访问不用)

HSEL: 设备选择,为1表示选中此设备

HWRITE: 总线写命令,为1表示写数据,为0表示读数据

HREADY: 总线准备好(表示总线给设备的命令、地址或数据都是稳定的状态,设备可以取走了)

HWDATA: 总线给到设备的数据

HRDATA:总线从设备读走的数据

3.AHB Lite时序

一次基本的总线传输需要两个时钟(cm4手册表示LDR、STB指令可通过总线流水的方式一拍完成,cm0+没这个注释,但提供了一个用于一拍访问外设的接口IOP),第一拍写地址,第二拍读(或写)数据:

4. Examples

以Cortex-m0p的SRAM接口、GPIO接口为例(Cortex-m4里这两个接口实现方式完全一样):

接口信号:

PowerPoint画了一张丑到不忍直视的接口示意:

【1】蒋周良.AMBA 总线新一代标准 AXI 分析和应用

arm cortex-m0plus源码学习(二)AMBA3.0_ AHBLite的更多相关文章

  1. Dubbo源码学习(二)

    @Adaptive注解 在上一篇ExtensionLoader的博客中记录了,有两种扩展点,一种是普通的扩展实现,另一种就是自适应的扩展点,即@Adaptive注解的实现类. @Documented ...

  2. python 协程库gevent学习--gevent源码学习(二)

    在进行gevent源码学习一分析之后,我还对两个比较核心的问题抱有疑问: 1. gevent.Greenlet.join()以及他的list版本joinall()的原理和使用. 2. 关于在使用mon ...

  3. Vue源码学习二 ———— Vue原型对象包装

    Vue原型对象的包装 在Vue官网直接通过 script 标签导入的 Vue包是 umd模块的形式.在使用前都通过 new Vue({}).记录一下 Vue构造函数的包装. 在 src/core/in ...

  4. 以太坊 layer2: optimism 源码学习(二) 提现原理

    作者:林冠宏 / 指尖下的幽灵.转载者,请: 务必标明出处. 掘金:https://juejin.im/user/1785262612681997 博客:http://www.cnblogs.com/ ...

  5. [spring源码学习]二、IOC源码——配置文件读取

    一.环境准备 对于学习源码来讲,拿到一大堆的代码,脑袋里肯定是嗡嗡的,所以从代码实例进行跟踪调试未尝不是一种好的办法,此处,我们准备了一个小例子: package com.zjl; public cl ...

  6. SocketServer源码学习(二)

    SocketServer 中非常重要的两个基类就是:BaseServer 和 BaseRequestHandler在SocketServer 中也提供了对TCP以及UDP的高级封装,这次我们主要通过分 ...

  7. Thrift源码学习二——Server层

    Thrift 提供了如图五种模式:TSimpleServer.TNonblockingServer.THsHaServer.TThreadPoolServer.TThreadSelectorServe ...

  8. mybatis源码学习(二)--mybatis+spring源码学习

    这篇笔记主要来就,mybatis是如何利用spring的扩展点来实现和spring的整合 1.mybatis和spring整合之后,我们就不需要使用sqlSession.selectOne()这种方式 ...

  9. java集合类源码学习二

    我们查看Collection接口的hierarchy时候,可以看到AbstractCollection<E>这样一个抽象类,它实现了Collection接口的部分方法,Collection ...

  10. hadoop源码学习(二)之ZooKeeper

    要能够熟练使用hadoop,就得对其原理和源码有些了解.hadoop中比较重要的概念是NameNode,DataNode,去看这些类时,又会发现其使用了ZooKeeper包,这样就可以将hadoop的 ...

随机推荐

  1. python摸爬滚打之day11----函数闭包,迭代器

    1.函数名 函数名就是一个变量名, 函数名存储的是该函数的内存地址.    函数名都可以进行哪些应用? 函数名可以赋值给其他的变量; 函数名可以作容器里的元素使用; 函数名可以当做形参传进另一函数; ...

  2. 在Linux下用C语言实现短信收发

     本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lyserver/archive/2008/10/01/3007090.aspx 首先,我根据功能需要创建了几个头文件 ...

  3. 洛谷P4358密钥破解 [CQOI2016] 数论

    正解:数论 解题报告: 先,放个传送门QwQ 这题难点可能在理解题意,,, 所以我先放个题意QAQ 大概就是说,给定一个整数N,可以被拆成两个质数的成绩p*q,然后给出了一个数e,求d满足e*d=1( ...

  4. CF997C Sky Full of Stars 数论

    正解:容斥 解题报告: 传送门! 两个方法,分别港下QAQ 先说第一种 首先要推出式子,就∑2*C(i,n)*(-1)i+1*3i*3n*n-n+3*∑∑(-1)i+j+1*C(i,n)*C(j,n) ...

  5. sed命令 windows与linux换行

    Linux的Bash命令中有一个sed操作,SSD的create_list.sh中有用到这个操作: 结合着下面这个解释: 也就是删除所有行里面的以VOC2007/Annotations/(这里的\代表 ...

  6. json和jsonp的区别?

    json返回的是一串json格式数据:而jsonp返回的是脚本代码(包含一个函数调用): jsonp的全名叫做json with padding,就是把 json 对象用符合 js 语法的形式包裹起来 ...

  7. MongoDB 查询$关键字 $in $or $all

    属于:$in 满足其中一个元素的数据把age=13,73 的数据显示 > db.user.find({age: { $in:[13,73]}}) { "_id" : Obje ...

  8. The each() function is deprecated报错的解决方法

    下午ytkah安装程序时出现了如下提示,意思是each函数过时了,可能跟php版本有关,因为今天早上刚把LAMP组件升级了,php升到7.2了,切换成php 7.1版本,提示消失了,可见PHP 7.2 ...

  9. 要继续看Python写算法的内容请到那里去

    由于在这里发文章的时候.莫名其妙的出现公布出去的问题.客服告知是由于链接或者敏感词. 能不能告诉我哪里出了问题?我能够改动,以便再发. 可是,没有人告诉我.仅仅是告诉我不能发. 另外,能不能公布一下敏 ...

  10. 如何在Digital Ocean上申请服务器的教程

    本文会详细叙述如何在digital ocean上注册.申请.创建以及配置服务器,亲测有效. what's the Digital Ocean ? 根据度娘释义,Digital Ocean是digita ...