AT32內(nèi)核架構(gòu)概述
AT32F4系列產(chǎn)品是基于Cortex-M4F處理器架構(gòu),該處理器是一款低功耗處理器,具有低門數(shù),低中斷延遲和低成本調(diào)試的特點。支持包括DSP指令集與浮點運算功能,特別適合用于深度嵌入式應(yīng)用程序需要快速中斷響應(yīng)功能。Cortex-M4F處理器是基于ARMv7-M架構(gòu),既支持Thumb指令集也支持DSP指令集。
下圖為Cortex-M4F處理器的內(nèi)部框圖,請參閱《ARMCortex-M4 技術(shù)參考手冊》了解關(guān)于Cortex-M4F更詳盡信息。
圖1. AT32 Cortex-M4F內(nèi)部框圖
本文主要就M4內(nèi)核自帶的位帶、硬件浮點運算單元和滴答時鐘中斷功能進行基礎(chǔ)講解。
案例 位帶操作
功能簡介
利用位帶操作,可以使用普通的加載/存儲操作來對單一比特進行讀寫訪問。在Cortex-M4F中提供了兩個位帶區(qū):SRAM最低1M字節(jié)空間和外設(shè)區(qū)間的最低1M字節(jié)空間。這兩個區(qū)中的地址除了可以像普通存儲器一樣訪問外,還可以通過它們各自的位帶別名區(qū)來快捷訪問這兩個區(qū)中任意地址的任意比特位,位帶別名區(qū)將位帶區(qū)每個比特膨脹成一個32位的字。當你訪問位帶別名區(qū)的一個地址時,等同于直接訪問位帶區(qū)的一個比特位。
圖2.位帶區(qū)與位帶別名區(qū)的膨脹關(guān)系圖A ?
圖3. 位帶區(qū)與位帶別名區(qū)的膨脹關(guān)系圖B ?
位帶區(qū):支持位帶操作的地址區(qū) 位帶別名區(qū):對別名區(qū)地址的訪問最終作用到位帶區(qū)的訪問上 在位帶區(qū)中,每個比特都映射到別名地址區(qū)的一個字(這是只有LSB有效的字)。當一個位帶別名區(qū)地址被訪問時,會先把該地址變換成位帶區(qū)地址。對于讀操作,讀取位帶區(qū)地址中的一個字,再把需要的位右移到LSB,并把LSB返回。對于寫操作,把需要寫的位左移到對應(yīng)的位序號處,然后執(zhí)行一個比特級的“讀-改-寫”過程。
支持位帶操作的兩個內(nèi)存區(qū)的地址范圍為:
SRAM區(qū)中的最低1M字節(jié):0x2000_0000~0x200F_FFFF 外設(shè)區(qū)間的最低1M字節(jié):0x4000_0000~0x400F_FFFF 對于SRAM位帶區(qū)的某個比特,如果所在字節(jié)地址為A,位序號為n(0<=n<=7),則該比特在別名區(qū)的地址為: AliasAddr=0x2200_0000+(A-0x2000_0000)*32+n*4 對于外設(shè)區(qū)間位帶區(qū)的某個比特,如果所在字節(jié)地址為A,位序號為n(0<=n<=7),則該比特在別名區(qū)的地址為: AliasAddr=0x4200_0000+(A-0x4000_0000)*32+n*4 對于SRAM區(qū)中,位帶區(qū)與位帶別名區(qū)的映射如下表所示:
表1. SRAM區(qū)中的位帶地址映射 ?
對于外設(shè)區(qū)中,位帶區(qū)與位帶別名區(qū)的映射如下表所示:
表2. 外設(shè)區(qū)中的位帶地址映射
位帶操作的優(yōu)越性最容易想到的是通過GPIO的管腳來單獨控制每盞LED的點亮與熄滅。另一方面,也對操作串行接口提供很大的方便。總之,位帶操作對于硬件I/O密集型的底層程序最有用處。位帶操作還能簡化跳轉(zhuǎn)的判斷。當跳轉(zhuǎn)依據(jù)是某個位時,以前必須這樣做:
讀取整個寄存器 屏蔽不需要的位 比較并跳轉(zhuǎn)現(xiàn)在只需要: 從位帶別名區(qū)讀取該位的狀態(tài) 比較并跳轉(zhuǎn) 使代碼更簡潔,這只是位帶操作優(yōu)越性的初步體現(xiàn),位帶操作還有一個重要的好處是在多任務(wù)以及多任務(wù)環(huán)境中,將以前的讀-改-寫需要的三條指令,做成了一個硬件級別支持的原子操作,消除了以前讀-改-寫可能被中斷,導致出現(xiàn)紊亂的情況。
注意事項
1) 因各系列的外設(shè)IP地址排布的不同,AT32F421xx與AT32F425xx系列的GPIO外設(shè)基地址不在位帶映射地址范圍內(nèi)。
資源準備
1) 硬件環(huán)境 對應(yīng)產(chǎn)品型號的AT-START BOARD 2) 軟件環(huán)境 projectat_start_f4xxexamplescortex_m4it_band
軟件設(shè)計
1) 配置流程 SRAM位帶操作
定義全局變量variables=0xA5A5A5A5,
對variables bit0的位帶地址寫0
檢查variables是否修改為0xA5A5A5A4,如果是則表示操作成功
對variables bit0的位帶地址寫1
檢查variables是否修改為0xA5A5A5A5,如果是則表示操作成功
對variables bit16的位帶地址寫0
檢查variables是否修改為0xA5A4A5A5,如果是則表示操作成功
對variables bit16的位帶地址寫1
檢查variables是否修改為0xA5A5A5A5,如果是則表示操作成功
對variables bit31的位帶地址寫0
檢查variables是否修改為0x25A5A5A5,如果是則表示操作成功
對variables bit31的位帶地址寫1
檢查variables是否修改為0xA5A5A5A5,如果是則表示操作成功
外設(shè)位帶操作
對LED2對應(yīng)GPIO ODT寄存器bit位的位帶地址寫0
對LED2對應(yīng)GPIO ODT寄存器bit位的位帶地址寫1
循環(huán)執(zhí)行上述操作,實現(xiàn)LED toggle功能
2) 代碼介紹
main函數(shù)代碼描述
宏定義內(nèi)容描述
實驗結(jié)果
SRAM位帶操作:如果不滿足預期,LED4翻轉(zhuǎn)。
外設(shè)位帶操作:如果滿足預期,LED2翻轉(zhuǎn)。
案例 硬件浮點運算單元
功能簡介
FPU即浮點運算單元(Float Point Unit)。浮點運算,對于定點CPU(沒有FPU的CPU)來說必須要按照IEEE-754標準的算法來完成運算,是相當耗費時間的。而對于有FPU的CPU來說,浮點運算則只是幾條指令的事情,速度相當快。
AT32F4屬于Cortex M4F架構(gòu),帶有32位單精度硬件FPU,支持浮點指令集,相對于Cortex M0和Cortex M3等,高出數(shù)十倍甚至上百倍的運算性能
注意事項
1) 由各系列應(yīng)用方向及成本的綜合考慮,AT32F415xx、AT32F421xx和AT32F425xx系列不支持硬件浮點運算單元。
資源準備
1) 硬件環(huán)境 對應(yīng)產(chǎn)品型號的AT-START BOARD
2) 軟件環(huán)境
projectat_start_f4xxexamplescortex_m4fpu
軟件設(shè)計
1) 配置流程 FPU功能的開啟必須要編譯器和代碼都開啟才可以。若只開啟編譯器FPU,程序會進入 hardfault;若只開啟代碼中FPU,編譯器不會編譯出FPU的代碼指令。
編譯器上開啟FPU功能
IAR開啟FPU方式如下圖
圖4. IAR開啟FPU方式 ?
MDK開啟FPU方式如下圖
圖5. MDK開啟FPU方式
代碼中開啟FPU功能
在system_at32f4xx.c文件中void SystemInit (void)函數(shù)確保有如下粗斜體代碼
執(zhí)行Julia算法函數(shù)
比較開啟和不開啟 FPU 功能的 Julia 運算速度。
2) 代碼介紹
main函數(shù)代碼描述 ? ?
實驗結(jié)果
編譯器上開啟FPU功能,觀察LED4翻轉(zhuǎn)速度
編譯器上關(guān)閉FPU功能,觀察LED4翻轉(zhuǎn)速度
對比以上兩種情形LED4翻轉(zhuǎn)速度區(qū)別
案例 系統(tǒng)滴答時鐘中斷
功能簡介
系統(tǒng)嘀嗒定時器是一個24位遞減計數(shù)器,遞減至零可自動重載計數(shù)初值。可產(chǎn)生周期性異常,用作嵌入式操作系統(tǒng)的多任務(wù)調(diào)度計數(shù)器,或?qū)τ跓o嵌入式操作系統(tǒng),可用于調(diào)用需周期性執(zhí)行的任務(wù)。系統(tǒng)嘀嗒定時器校準值固定值9000,當系統(tǒng)嘀嗒時鐘設(shè)定為9MHz,產(chǎn)生1ms時間基準。
資源準備
1) 硬件環(huán)境 對應(yīng)產(chǎn)品型號的AT-START BOARD
2) 軟件環(huán)境
projectat_start_f4xxexamplescortex_m4systick_interrupt
軟件設(shè)計
1) 配置流程
配置systick時鐘源
配置systick重載值并開啟systick中斷
在void SysTick_Handler(void)函數(shù)中添加應(yīng)用代碼
2) 代碼介紹
main函數(shù)代碼描述
實驗結(jié)果
本應(yīng)配置的是1 ms systick中斷,每進200次systick中斷LED2翻轉(zhuǎn)一次,因此應(yīng)該觀察到的現(xiàn)象是LED2以200ms一次的頻率進行翻轉(zhuǎn)。
審核編輯:湯梓紅
-
mcu
+關(guān)注
關(guān)注
146文章
17317瀏覽量
352630 -
內(nèi)核
+關(guān)注
關(guān)注
3文章
1382瀏覽量
40421 -
Cortex-M4F
+關(guān)注
關(guān)注
0文章
9瀏覽量
7658 -
AT32
+關(guān)注
關(guān)注
1文章
118瀏覽量
2164
原文標題:AT32講堂034 | AT32 MCU Cortex M4內(nèi)核入門指南
文章出處:【微信號:AT32 MCU 雅特力科技,微信公眾號:AT32 MCU 雅特力科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
Recognize AT32 MCU內(nèi)核版本、MCU廠商及型號的識別
Cortex-M7 + M4內(nèi)核的MCU資料大合集
Cortex-M7 + M4內(nèi)核的MCU性能及特點是什么
AT32 MCU XMC入門指南
TI M4(Cortex M4) MCU DMA 操作
![TI <b class='flag-5'>M4</b>(<b class='flag-5'>Cortex</b> <b class='flag-5'>M4</b>) <b class='flag-5'>MCU</b> DMA 操作](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
AT32講堂034 | AT32 MCU Cortex M4內(nèi)核入門指南
![<b class='flag-5'>AT32</b>講堂034 | <b class='flag-5'>AT32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>Cortex</b> <b class='flag-5'>M4</b><b class='flag-5'>內(nèi)核入門</b><b class='flag-5'>指南</b>](https://file.elecfans.com/web2/M00/42/9C/pYYBAGJ5xmyARrXXAAALuRDQWfU330.jpg)
實際項目開發(fā)中為何選擇ARM? Cortex?-M4 內(nèi)核的HK32MCU?
![實際項目開發(fā)中為何選擇ARM? <b class='flag-5'>Cortex</b>?-<b class='flag-5'>M4</b> <b class='flag-5'>內(nèi)核</b>的HK32<b class='flag-5'>MCU</b>?](https://file1.elecfans.com/web1/M00/F3/6D/wKgaoWcXSA6Ab8NCAABoLavdfNw365.png)
評論