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

關(guān)于使用GD32 MCU實(shí)現(xiàn)位帶操作的指南
評(píng)論