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

AT32講堂034 | AT32 MCU Cortex M4內核入門指南

實際項目開發中為何選擇ARM? Cortex?-M4 內核的HK32MCU?

評論