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文章
19440瀏覽量
231321 -
單片機
+關注
關注
6044文章
44628瀏覽量
638992
發布評論請先 登錄
相關推薦
作為國產MCU龍頭,兆易創新GD32如何在工業市場開疆拓土?
【GD32 MCU入門教程】GD32 MCU GPIO 結構與使用注意事項
![【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b>入門教程】<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> GPIO 結構與使用注意事項](https://file1.elecfans.com/web2/M00/06/89/wKgaombbu8qAXdJKAAAW--yDqzA279.png)
【GD32 MCU 入門教程】GD32 MCU 常見外設介紹(14)RTC 模塊介紹
![【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 入門教程】<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 常見外設介紹(14)RTC 模塊介紹](https://file1.elecfans.com/web2/M00/03/E0/wKgZombH42WAIyq2AAA3DFzN548758.png)
GD32 MCU 入門教程】GD32 MCU 常見外設介紹(12)FMC 模塊介紹
![<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 入門教程】<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 常見外設介紹(12)FMC 模塊介紹](https://file1.elecfans.com/web2/M00/04/87/wKgaombFSS2AWG-GAAB5lPnhR3c604.png)
【GD32 MCU 入門教程】二、GD32 MCU 燒錄說明(3)脫機燒錄
![【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 入門教程】二、<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 燒錄說明(3)脫機燒錄](https://file1.elecfans.com/web2/M00/01/52/wKgZoma0k4mAPeLWAADZE2JooiI020.png)
【GD32 MCU 入門教程】二、GD32 MCU 燒錄說明 (2)SWD/JTAG在線下載
![【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 入門教程】二、<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 燒錄說明 (2)SWD/JTAG在線下載](https://file1.elecfans.com/web2/M00/02/3E/wKgaoma0kR6ATpzXAADFgXwSppw100.png)
【GD32 MCU 入門教程】二、GD32 MCU 燒錄說明(1)ISP 燒錄
![【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 入門教程】二、<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 燒錄說明(1)ISP 燒錄](https://file1.elecfans.com/web2/M00/02/38/wKgaoma0f8SAB_h5AAAvpALfiNs789.png)
【GD32 MCU 入門教程】一、GD32 MCU 開發環境搭建(3)使用 Embedded Builder 開發 GD32
![【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 入門教程】一、<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 開發環境搭建(3)使用 Embedded Builder 開發 <b class='flag-5'>GD32</b>](https://file1.elecfans.com/web2/M00/02/37/wKgaoma0e3mANRvBAAAxO0zTl60782.png)
【GD32 MCU 入門教程】一、GD32 MCU 開發環境搭建(2)使用 IAR 開發 GD32
![【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 入門教程】一、<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 開發環境搭建(2)使用 IAR 開發 <b class='flag-5'>GD32</b>](https://file1.elecfans.com/web2/M00/01/49/wKgZoma0doSAZgTbAABV8x9Lb_4326.png)
【GD32 MCU 入門教程】一、GD32 MCU 開發環境搭建(1)使用Keil開發GD32
![【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 入門教程】一、<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 開發環境搭建(1)使用Keil開發<b class='flag-5'>GD32</b>](https://file1.elecfans.com/web2/M00/02/32/wKgaoma0bSqAZmYJAABWzE6EVjY883.png)
都是32位MCU,ESP32、GD32、STM32有什么區別
![都是32<b class='flag-5'>位</b><b class='flag-5'>MCU</b>,ESP32、<b class='flag-5'>GD32</b>、STM32有什么區別](https://file.elecfans.com/web2/M00/02/C4/pYYBAGDSzfeAP86XAAAO5PbqJbI698.png)
GD32 ADC轉換時間如何計算?
![<b class='flag-5'>GD32</b> ADC轉換時間如何計算?](https://file1.elecfans.com/web2/M00/C2/75/wKgZomXlJOGANn8xAAA8pT3MMN4777.png)
GD32 MCU ISP失敗的原因
![<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> ISP失敗的原因](https://file1.elecfans.com/web2/M00/C1/B2/wKgZomXeix-AYt0QAAA9fb4pF5E360.png)
評論