基于Cortex的MCU設計
今日更新的存貨文檔,發現日更文章還是很花時間的。保證一周更新三篇文章就行啦,本篇文章的內容起始主要取自于《Cortex-M3 權威指南》和知網下載的論文。寫的不詳細,想進一步了解的就去看這篇文檔或網上找別的資料,有錯誤的地方評論區留言或者私信我,我再更改。書本網盤鏈接如下,永久有效鏈接。
鏈接:https://pan.baidu.com/s/1Zp0L1rAnCJi8brKHjc766Q
提取碼:5v92
文章目錄
- 基于Cortex的MCU設計
- 一、概述
- 二、什么是Cortex-M3內核?
- 2.1 指令集
- 2.2 寄存器
- 2.3 異常和中斷
- 2.4 存儲器映射
- 2.5 總線接口
- 三、芯片內部數據怎么傳輸?(AMBA總線)
- 3.1 AHB總線特性和構成
- 3.2 APB總線
- 3.APB橋
- 三、MCU外圍設備
一、概述
如下表所示,MCU大致可以分為5個發展階段,MCU的位數表示微處理器核每次處理數據的位數或者總線系統的位寬。目前電子市場的主流芯片是16位和32位處理器。
MCU按照指令集可以分為復雜指令集計算機(Complex Instruction Set Computer,CISC)和精簡指令集計算機(Reduced Instruction Set Computer,RISC)。現在市面上常用的MCU采用的ARM架構是RISC指令集,該指令集的計算機處理速度更快、功耗更低。
根據MCU中才采用的存儲結構不同可以分為馮諾依曼結構和哈佛結構,前者程序指令和數據指令共用同一個存儲空間,后者程序指令和數據指令放在不同的空間。目前常用的MCU基本都是采用哈佛結構,比如ARM公司推出的ARM架構大多也是采用的哈佛結構,部分對內核要求很高的SOC系列芯片,采用的是馮諾依曼結構。本文主要講解以下基于Cortex-M3內核的MCU設計時需要具備什么硬件功能。主要是從處理器內核、系統片上總線和片上外設三部分去講解。
二、什么是Cortex-M3內核?
基于ARM的MCU控制器的制作流程如下圖所示,各大芯片廠商得到了ARM微處理器授權后,根據自身需求再處理器的基礎上添加存儲器、系統總線和外設等部件。
ARM公司設計了多系列的微處理器內核,其部分Cortex-M系列的產品如下所示,Cortex-M3系列的處理器是ARM公司為高性能、低成本的平臺開發而設計。
Cortex-M3具備一個完整的微控制器架構,如下圖所示,下文將會根據該內核的簡化視圖依次從指令集、寄存器、異常和中斷、存儲器映射和總線接口五大點講解內核的核心知識點。
2.1 指令集
ARM處理器目前可支持兩種相互獨立的指令集,分別是32位的ARM指令集和16位的Thumb指令集,兩而cortex-M3可支持這兩個指令集,三者之間的關系如下所示。
2.2 寄存器
Cortex-M3包括16個32bit的寄存器和多個特殊寄存器。特殊寄存器包括程序號狀態寄存器、中斷屏蔽寄存器和控制寄存器,其分類如下所示。
2.3 異常和中斷
Cortex-M3支持11種類型的系統異常以及240個外部中斷,通過內核中搭載的嵌套向量中斷控制器(Nested Vectored Interrupt Controller,NVIC)實現對中斷和異常的響應,其系統中斷如下所示。
2.4 存儲器映射
Cortex-M3的地址空間映射如下所示。
2.5 總線接口
Cortex-M3處理器內核基于AHB總線協議的32位總線接口包括:I-CODE總線、D-CODE總線、系統總線和外設總線,如下所示。
三、芯片內部數據怎么傳輸?(AMBA總線)
3.1 AHB總線特性和構成
計算機不同部件之間通過什么通信呢?以及各種電子設備之間通過什么傳輸數據呢?我們知道UART、I2C和SPI等通信協議都是需要對應的線纜進行通信的,并且有對應的通信協議。
那么SOC內部之間各個模塊之間的數據是怎么傳輸的呢?同樣的道理啦,也是需要在芯片內部構建對應的“線纜”和“通信規則”。即,在SOC里,單個芯片內部集成了內部總線和微處理器,那么這就稱為片上系統總線。一個新概念的提出,必定會有其定義和名字及相關規則吧。而ARM公司推出了面向高性能微處理器的片上通信協議,即先進微控制器總線結構(Advanced Microcontroller Bus Architecture)協議。我們現在常用的微處理器采用的就是AHB總線,該總線就是AMBA總線協議中的一種,其支持多總線主機和流水線操作,典型的AHB總線系統如下所示。
AHB的總線信號一般分為主機接口信號、從機接口信號和其他信號三大類,部分關鍵信號名稱和作用如下表所示。
AHB采用流水線傳輸操作,其數據傳輸過程如下所示。
3.2 APB總線
與AHB總線不同的是,APB總線沒有流水線操作,其主要的信號描述如下所示。
APB總線的傳輸狀態如下圖所示,我們可以看到,APB傳輸數據主要分為3個狀態。①外設總線的默認狀態;②SETUP狀態,有傳輸數據時候,PSEL_x信號拉高,總線保持一個SETUP周期。③ENABEL狀態,該狀態下PENABLE拉高保持一個周期,傳輸數據。如果沒有數據傳輸了則進入到狀態①,負責進入狀態②。
根據以上的狀態機,APB寫傳輸的時序如下所示。
APB讀傳輸時序如下。
3.APB橋
AMBA總線協議提供了APB橋實現AHB總線和APB總線之間的時序切換。APB橋在總線系統中既是AHB的從機又是APB的唯一主機。APB橋接信號如下圖所示。
三、MCU外圍設備
不同的生產廠商根據自身的需求會增加對應的外設,包括有定時器、輸入輸出端口、通信接口、看門狗、SPI接口、I2C接口等。
我們現在使用的32位單片機,基本都是基于ARM的內核實現的MCU。比如我們常用的STM32F103,其內核是ARM的cortex-M3內核,在內核的基礎上再配置了一些外設,如GPIO、ADC、DAC、USART、SPI、I2C等外設接口。且這些芯片公司基本都有成熟的固件庫,芯片公司已經寫好了對應外設的API接口函數,我們在應用的時候使用固件庫開發就會輕松很多,不需要再去花時間去配置對應的寄存器。但是對于一個實際的系統開發,我們需要編寫MCU控制器以外芯片對應的配置代碼,需要訪問對應芯片內部寄存器控制芯片功能。