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 分析和應用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM