arm cortex-m0plus源码学习(二)AMBA3.0_ AHBLite
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的更多相关文章
- Dubbo源码学习(二)
@Adaptive注解 在上一篇ExtensionLoader的博客中记录了,有两种扩展点,一种是普通的扩展实现,另一种就是自适应的扩展点,即@Adaptive注解的实现类. @Documented ...
- python 协程库gevent学习--gevent源码学习(二)
在进行gevent源码学习一分析之后,我还对两个比较核心的问题抱有疑问: 1. gevent.Greenlet.join()以及他的list版本joinall()的原理和使用. 2. 关于在使用mon ...
- Vue源码学习二 ———— Vue原型对象包装
Vue原型对象的包装 在Vue官网直接通过 script 标签导入的 Vue包是 umd模块的形式.在使用前都通过 new Vue({}).记录一下 Vue构造函数的包装. 在 src/core/in ...
- 以太坊 layer2: optimism 源码学习(二) 提现原理
作者:林冠宏 / 指尖下的幽灵.转载者,请: 务必标明出处. 掘金:https://juejin.im/user/1785262612681997 博客:http://www.cnblogs.com/ ...
- [spring源码学习]二、IOC源码——配置文件读取
一.环境准备 对于学习源码来讲,拿到一大堆的代码,脑袋里肯定是嗡嗡的,所以从代码实例进行跟踪调试未尝不是一种好的办法,此处,我们准备了一个小例子: package com.zjl; public cl ...
- SocketServer源码学习(二)
SocketServer 中非常重要的两个基类就是:BaseServer 和 BaseRequestHandler在SocketServer 中也提供了对TCP以及UDP的高级封装,这次我们主要通过分 ...
- Thrift源码学习二——Server层
Thrift 提供了如图五种模式:TSimpleServer.TNonblockingServer.THsHaServer.TThreadPoolServer.TThreadSelectorServe ...
- mybatis源码学习(二)--mybatis+spring源码学习
这篇笔记主要来就,mybatis是如何利用spring的扩展点来实现和spring的整合 1.mybatis和spring整合之后,我们就不需要使用sqlSession.selectOne()这种方式 ...
- java集合类源码学习二
我们查看Collection接口的hierarchy时候,可以看到AbstractCollection<E>这样一个抽象类,它实现了Collection接口的部分方法,Collection ...
- hadoop源码学习(二)之ZooKeeper
要能够熟练使用hadoop,就得对其原理和源码有些了解.hadoop中比较重要的概念是NameNode,DataNode,去看这些类时,又会发现其使用了ZooKeeper包,这样就可以将hadoop的 ...
随机推荐
- 洛谷P3246 序列 [HNOI2016] 莫队/线段树+扫描线
正解:莫队/线段树+扫描线 解题报告: 传送门! 似乎是有两种方法的,,,所以分别港下好了QAQ 第一种,莫队 看到这种询问很多区间之类的就会自然而然地想到莫队趴?然后仔细思考一下,发现复杂度似乎是欧 ...
- 深入理解Java虚拟机笔记
1. Java虚拟机所管理的内存 2. 对象创建过程 3. GC收集 4. HotSpot算法的实现 5. 垃圾收集器 6. 对象分配内存与回收细节 7. 类文件结构 8. 虚拟机类加载机制 9.类加 ...
- 前端 html button标签
就是一个按钮标签 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...
- linux命令学习:PATH and LDFLAGS and CFLAGS
CFLAGS 表示用于 C 编译器的选项, CXXFLAGS 表示用于 C++ 编译器的选项. 这两个变量实际上涵盖了编译和汇编两个步骤. 先来看几个相关的环境变量:PATH.LDFLAGS. ...
- 001-RESTful服务最佳实践-RestFul准则、HTTP动词表示含义、合理的资源命名、响应格式XML和JSON
一.概述 因为REST是一种架构风格而不是严格的标准,所以它可以灵活地实现.由于这种灵活性和结构自由度,对设计最佳实践也有很大的差异. API的方向是从应用程序开发人员的角度考虑设计选择. 幂等性 不 ...
- 帝国cms建站总结-(分页)
帝国cms分页代码文件t_functions.php 代码为: <?php if(!defined('InEmpireCMS')) { exit(); } define('InEmpireCMS ...
- Ext.create细节分析
var win1 = Ext.create('Ext.window.Window', { //实例化方法四 : 使用 完整的 Extjs 类名 width: 800, title: 'define t ...
- HTTPS安全不?
首先,它是什么?我的理解是一开始进行SSL握手,商量好将要使用哪些加密算法来通讯,或者加密方法后使用非对称的加密方法,交互一下随机数,加上一个pre-master-secrect的,然后服务端利用私钥 ...
- 学习erlang书籍 - 转
Here are a few resources:Programming Erlang, by Joe Armstrong. A good book, really teaching you more ...
- NPOI设置单元格格式
转自:http://www.cr173.com/html/18143_2.html //创建一个常用的xls文件 private void button3_Click(object sender, E ...