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. MySQL InnoDB加锁超时回滚机制(转)

    add by zhj: 看来我对MySQL的理解还有待深入,水还是挺深的啊,MySQL给记录加锁时,可以通过innodb_lock_wait_timeout参数设置超时时间, 如果加锁等待超过这个时间 ...

  2. swift 字体自适应,宽高自适应

    let kScreenWidth = UIScreen.main.bounds.width let kScreenHeight = UIScreen.main.bounds.height public ...

  3. Docker 引擎(三)

    Docker 引擎是一个包含以下主要组件的客户端服务器应用程序. 一种服务器,它是一种称为守护进程并且长时间运行的程序. REST API用于指定程序可以用来与守护进程通信的接口,并指示它做什么. 一 ...

  4. 注意:WordPress栏目别名slug不要设为p

    这几天ytkah接了一个WordPress项目,没用多少时间就搞定了,交付给甲方使用,刚开始还算顺利,突然有一天其中一个栏目及栏目下是文章都无法访问了,出现404页面,其他页面都可以.询问他们最近改动 ...

  5. 各版本系统安装tesseract-ocr

    Mac版本 1.tesseract-ocr安装  brew install tesseract-ocr 注意:如果未安装brew命令,可以输入命令: brew官网:http://brew.sh /us ...

  6. 前端框架之Vue(8)-表单输入绑定

    基础用法 你可以用 v-model 指令在表单 <input> . <textarea> 及 <select> 元素上创建双向数据绑定.它会根据控件类型自动选取正确 ...

  7. edraw的符号制作

    1.选中要制作的符号,在"符号"->"保存符号",这将保存为两个文件,1个是ede,另一个是png文件. 2. 3.名称,提示,随意写,只要你明白什么意思 ...

  8. 【1】vue/cli 3.0 脚手架 及cube-ui 安装

    安装 Vue CLI 需要 Node.js 8.9 或更高版本 (推荐 8.11.0+).你可以使用 nvm 或 nvm-windows在同一台电脑中管理多个 Node 版本. 检查node版本: $ ...

  9. mysql数据具体操作

    1.建表操作 前面提到的是简单的建表,这里需要提到一下外键. create table userinfo2( id int auto_increment primary key, name ), ge ...

  10. Centos7 下 yum -y install ntp 出现/var/run/yum.pid 已被锁定

    [root@localhost ~ ]# yum -y install ntp已加载插件:fastestmirror, langpacksRepodata is over 2 weeks old. I ...