MCS-51單片機(jī)可以簡單的將P1口的第2位獨立操作,如P1.2=0;P1.2=1,就是這樣把P1口的第三個腳(BIT2)置0置1。對于32位ARM MCU 我們可以像51單片機(jī)一樣單獨的對某個端口的某一個IO單獨操作嗎?答案是可以的。并且這樣就引入了“位帶操作”的概念。簡而言之,為了能夠?qū)崿F(xiàn)單獨的位控制,所以就有了位帶這樣的操作機(jī)制。
ARM Cortex-M3處理器采用哈佛結(jié)構(gòu),可以使用相互獨立的總線來讀取指令和加載/存儲數(shù)據(jù)。指令代碼和數(shù)據(jù)都位于相同的存儲器地址空間,但在不同的地址范圍。程序存儲器,數(shù)據(jù)存儲器,寄存器和I/O端口都在同一個線性的4 GB的地址空間之內(nèi)。這是Cortex-M3的最大地址范圍,因為它的地址總線寬度是32位。此外,為了降低不同客戶在相同應(yīng)用時的軟件復(fù)雜度,存儲映射是按Cortex-M3處理器提供的規(guī)則預(yù)先定義的。
ARM Cortex-M3的自帶的系統(tǒng)外設(shè)也占用了一些地址空間。如GD32F1x0系列設(shè)備的存儲映射,包括指令代碼、SRAM、外設(shè)和其他預(yù)先定義的區(qū)域。為了簡化外設(shè)的地址譯碼,每個外設(shè)分配的地址空間都是1KB。
為了實現(xiàn)位帶操作,我們可以設(shè)置GD32的位帶別名區(qū)。對象可以是SRAM、I/O外設(shè)空間,從而實現(xiàn)對這些地方的某一位的操作。這樣就可以把代碼縮小、速度更快、效率更高也更安全。
在尋址空間(32位地址是 4GB)的另一地方,取個別名區(qū)空間,從這地址開始處,每一個字(32BIT)就對應(yīng)SRAM或I/O的一位。這樣,1MB SRAM就可以有32MB的對應(yīng)別名區(qū)空間,就是1位膨脹到32位(1BIT 變?yōu)?個字)。我們對這個別名區(qū)空間開始的某一字操作,置0或置1,就等于它映射的SRAM或I/O相應(yīng)的某地址的某一位的操作。
支持了位帶操作后,用戶可以使用普通的加載/存儲指令來對單一的比特進(jìn)行讀寫。Cortex-M3處理器提供了兩個支持位帶操作的區(qū)域。其中一個是SRAM區(qū)的最低1MB范圍,第二個是片內(nèi)外設(shè)區(qū)的最低1MB范圍。這兩個區(qū)域中的地址除了普通應(yīng)用外,還有自己的“位帶別名區(qū)”。位帶別名區(qū)把每個比特擴(kuò)展成一個32位的字。當(dāng)用戶訪問位帶別名區(qū)時,就可以達(dá)到訪問原始比特的目的。
下面的映射公式表明了位帶別名區(qū)的每個32位字如何對應(yīng)位帶區(qū)的某個比特。
位帶別名區(qū)地址 = 位帶別名區(qū)基地址 + (字節(jié)偏移×32) + (位數(shù)×4)
其中:
位帶別名區(qū)地址指的是位帶區(qū)目標(biāo)比特對應(yīng)在位帶別名區(qū)的地址
位帶別名區(qū)基地址指的是位帶別名區(qū)的起始地址
字節(jié)偏移指的是位帶區(qū)目標(biāo)比特所在的字節(jié)的字節(jié)地址偏移量
位數(shù)指的是目標(biāo)比特在對應(yīng)字節(jié)中的位置
例如,要想訪問0x2000 0200地址的第7位, 可訪問的位帶別名區(qū)地址是:
位別名地址= 0x2200 0000 + (0x200 * 32) + (7 * 4) = 0x2200 401C
如果對0x2200 401C進(jìn)行寫操作,那么0x2000 0200的第7位將會相應(yīng)變化;
如果對0x2200 401C進(jìn)行讀操作,那么視0x2000 0200的第7位狀態(tài)而返回0x0000 0001或0x0000 0000。
-
處理器
+關(guān)注
關(guān)注
68文章
20247瀏覽量
252083 -
單片機(jī)
+關(guān)注
關(guān)注
6076文章
45492瀏覽量
670097
發(fā)布評論請先 登錄
兆易創(chuàng)新GD32 MCU如何續(xù)寫嵌入式創(chuàng)新之路
兆易創(chuàng)新正式推出GD32 Embedded AI平臺
兆易創(chuàng)新GD32H7系列MCU適配Micro-ROS的完整技術(shù)指南
arm單片機(jī)位帶操作的原理
位帶操作的分析
GPIO位輸出操作的幾種方法分享
兆易創(chuàng)新GD32 MCU家族高性能產(chǎn)品再添新銳:GD32F503/505系列芯片實力亮相
GD32的串口DMA收發(fā)數(shù)據(jù)失敗怎么解決?
rt-thread studio中創(chuàng)建不了gd32項目是怎么回事?
基于兆易創(chuàng)新GD32系列MCU的GUI智能屏顯解決方案
兆易創(chuàng)新GD32 MCU閃耀2025慕尼黑上海電子展
關(guān)于使用GD32 MCU實現(xiàn)位帶操作的指南
評論