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