MCS-51單片機可以簡單的將P1口的第2位獨立操作,如P1.2=0;P1.2=1,就是這樣把P1口的第三個腳(BIT2)置0置1。對于32位ARM MCU 我們可以像51單片機一樣單獨的對某個端口的某一個IO單獨操作嗎?答案是可以的。并且這樣就引入了“位帶操作”的概念。簡而言之,為了能夠實現單獨的位控制,所以就有了位帶這樣的操作機制。
ARM Cortex-M3處理器采用哈佛結構,可以使用相互獨立的總線來讀取指令和加載/存儲數據。指令代碼和數據都位于相同的存儲器地址空間,但在不同的地址范圍。程序存儲器,數據存儲器,寄存器和I/O端口都在同一個線性的4 GB的地址空間之內。這是Cortex-M3的最大地址范圍,因為它的地址總線寬度是32位。此外,為了降低不同客戶在相同應用時的軟件復雜度,存儲映射是按Cortex-M3處理器提供的規則預先定義的。
ARM Cortex-M3的自帶的系統外設也占用了一些地址空間。如GD32F1x0系列設備的存儲映射,包括指令代碼、SRAM、外設和其他預先定義的區域。為了簡化外設的地址譯碼,每個外設分配的地址空間都是1KB。
為了實現位帶操作,我們可以設置GD32的位帶別名區。對象可以是SRAM、I/O外設空間,從而實現對這些地方的某一位的操作。這樣就可以把代碼縮小、速度更快、效率更高也更安全。
在尋址空間(32位地址是 4GB)的另一地方,取個別名區空間,從這地址開始處,每一個字(32BIT)就對應SRAM或I/O的一位。這樣,1MB SRAM就可以有32MB的對應別名區空間,就是1位膨脹到32位(1BIT 變為1個字)。我們對這個別名區空間開始的某一字操作,置0或置1,就等于它映射的SRAM或I/O相應的某地址的某一位的操作。
支持了位帶操作后,用戶可以使用普通的加載/存儲指令來對單一的比特進行讀寫。Cortex-M3處理器提供了兩個支持位帶操作的區域。其中一個是SRAM區的最低1MB范圍,第二個是片內外設區的最低1MB范圍。這兩個區域中的地址除了普通應用外,還有自己的“位帶別名區”。位帶別名區把每個比特擴展成一個32位的字。當用戶訪問位帶別名區時,就可以達到訪問原始比特的目的。
下面的映射公式表明了位帶別名區的每個32位字如何對應位帶區的某個比特。
位帶別名區地址 = 位帶別名區基地址 + (字節偏移×32) + (位數×4)
其中:
位帶別名區地址指的是位帶區目標比特對應在位帶別名區的地址
位帶別名區基地址指的是位帶別名區的起始地址
字節偏移指的是位帶區目標比特所在的字節的字節地址偏移量
位數指的是目標比特在對應字節中的位置
例如,要想訪問0x2000 0200地址的第7位, 可訪問的位帶別名區地址是:
位別名地址= 0x2200 0000 + (0x200 * 32) + (7 * 4) = 0x2200 401C
如果對0x2200 401C進行寫操作,那么0x2000 0200的第7位將會相應變化;
如果對0x2200 401C進行讀操作,那么視0x2000 0200的第7位狀態而返回0x0000 0001或0x0000 0000。
-
處理器
+關注
關注
68文章
19817瀏覽量
233671 -
單片機
+關注
關注
6064文章
44931瀏覽量
647387
發布評論請先 登錄
兆易創新GD32 MCU閃耀2025慕尼黑上海電子展

#新年新氣象,大家新年快樂!#emWin應用開發——基于GD32
作為國產MCU龍頭,兆易創新GD32如何在工業市場開疆拓土?
【GD32 MCU入門教程】GD32 MCU GPIO 結構與使用注意事項

【GD32 MCU 入門教程】GD32 MCU 常見外設介紹(14)RTC 模塊介紹

GD32 MCU 入門教程】GD32 MCU 常見外設介紹(12)FMC 模塊介紹

【GD32 MCU 入門教程】二、GD32 MCU 燒錄說明(3)脫機燒錄

【GD32 MCU 入門教程】二、GD32 MCU 燒錄說明 (2)SWD/JTAG在線下載

【GD32 MCU 入門教程】二、GD32 MCU 燒錄說明(1)ISP 燒錄

【GD32 MCU 入門教程】一、GD32 MCU 開發環境搭建(3)使用 Embedded Builder 開發 GD32

【GD32 MCU 入門教程】一、GD32 MCU 開發環境搭建(2)使用 IAR 開發 GD32

【GD32 MCU 入門教程】一、GD32 MCU 開發環境搭建(1)使用Keil開發GD32

評論