• 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  [31:0]      HADDR;          //主发从收-地址总线
      input  [ 2:0]      HBURST;
      input              HMASTLOCK;
      input  [ 3:0]      HPROT;
      input  [ 2:0]      HSIZE;
      input  [ 1:0]      HTRANS;
      input  [31:0]      HWDATA;         //主发从收-写数据
      input              HWRITE;         //主发从收-写命令
      input              HSEL;           //多路器发从设备收-从机选则
      input              HREADY;         //多路器发主设备收-总线ready
    
      output [31:0]      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 分析和应用

  • 相关阅读:
    C#获取当前日期时间(转)
    c#截取字符串split各种用法
    c#国际化
    C#密码加密
    c#程序中对密码进行加密的方法
    百度信誉认证体系初级实名认证即将取消,这意味着什么?
    新增利息宝-京东淘宝唯品会自动抢单系统源码搭建过程
    webapp/H5封装,混开APP,没有原生APP好?事实是这样的吗?
    laravel基础laravle中orm简单的增删改查-一颗优雅草男神你姚哥
    Thinkphp二次开发威客RW平台源码详细搭建教程(技术分享帖)-一颗优雅草科技yungui
  • 原文地址:https://www.cnblogs.com/zhengmeisong/p/7680071.html
Copyright © 2020-2023  润新知