既然ODR能控制管腳高低電平,為什么還需要BSRR寄存器呢?
為什么需要BSRR寄存器
在單片機(jī)中,為了控制端口的輸出狀態(tài),我們需要使用特定的寄存器。其中,ODR寄存器負(fù)責(zé)直接控制端口輸出電平,但是在某些情況下,我們需要更高效、更精準(zhǔn)的控制電平狀態(tài),這時(shí)就需要使用BSRR寄存器了。
BSRR寄存器全稱Bit Set/Reset Register,中文名稱為位設(shè)置/重置寄存器,其作用是能夠快速切換輸入輸出引腳的電平狀態(tài)。通過(guò)BSRR寄存器的配置,我們可以簡(jiǎn)單、高效地設(shè)置或者重置對(duì)應(yīng)的引腳電平,而無(wú)需進(jìn)行其他操作。
BSRR寄存器的結(jié)構(gòu)
BSRR寄存器總共32位,其中前16位是用于設(shè)置對(duì)應(yīng)引腳的高電平,后16位是用于設(shè)置對(duì)應(yīng)引腳的低電平。
在BSRR寄存器的低16位中,每4位對(duì)應(yīng)一個(gè)引腳,以16進(jìn)制的形式表示。例如:低16位的0號(hào)位(LSB)至3號(hào)位分別對(duì)應(yīng)的引腳號(hào)為0~3,以此類推。對(duì)于高16位,它們與低16位的區(qū)別在于,它們控制對(duì)應(yīng)引腳的低電平狀態(tài),即為清零操作。
例如,如果要使引腳1變?yōu)楦唠娖?,那么我們可以給BSRR寄存器的第17位(低16位的1號(hào)位)寫(xiě)入1,這將會(huì)把引腳1設(shè)置為高電平。如果想要將引腳1的電平設(shè)置為低電平,我們只需要給BSRR寄存器的第33位(高16位的1號(hào)位)寫(xiě)入1,即可實(shí)現(xiàn)。
BSRR寄存器與ODR寄存器的區(qū)別
雖然ODR和BSRR都可以控制引腳的電平狀態(tài),但是它們?cè)趯?shí)現(xiàn)上還是有一些區(qū)別的。
首先,ODR寄存器的寫(xiě)入操作是瞬時(shí)的,即寫(xiě)入后立即生效。而B(niǎo)SRR寄存器的寫(xiě)入操作是有延遲的,需要在CPU時(shí)鐘上升沿時(shí)才能夠生效,因此,如果需要精準(zhǔn)地控制電平狀態(tài),我們需要根據(jù)CPU主頻等因素,精確地計(jì)算出延遲時(shí)間。
其次,在使用BSRR寄存器時(shí),我們可以直接通過(guò)對(duì)應(yīng)電平位的寫(xiě)入操作,來(lái)實(shí)現(xiàn)針對(duì)某一位的設(shè)置或重置操作。這樣,在高頻率操作時(shí),會(huì)比使用ODR寄存器更具有優(yōu)勢(shì),不僅可以提高效率,還能保證電平狀態(tài)的準(zhǔn)確性。
還有一個(gè)重要區(qū)別是,在使用BSRR寄存器時(shí),如果想要對(duì)某個(gè)引腳進(jìn)行設(shè)置或重置,我們只需要對(duì)對(duì)應(yīng)的位進(jìn)行操作即可,而使用ODR寄存器時(shí),我們需要同時(shí)對(duì)所有引腳進(jìn)行設(shè)置或重置,這樣會(huì)導(dǎo)致效率降低。
綜上所述,BSRR寄存器與ODR寄存器相比,更加靈活高效,能夠更好地滿足實(shí)際需求,特別是在高頻率控制電平情況下更為顯著。
結(jié)語(yǔ)
在單片機(jī)的開(kāi)發(fā)中,對(duì)端口的輸入輸出狀態(tài)控制是一項(xiàng)非常基礎(chǔ)的操作,因此理解和掌握相關(guān)的寄存器是非常重要的。在實(shí)際應(yīng)用中,根據(jù)不同的場(chǎng)景需求,選擇合適的寄存器會(huì)使我們的開(kāi)發(fā)更加方便、高效。
BSRR寄存器雖然只是一個(gè)小小的寄存器,但是在高頻率作業(yè)中,能夠發(fā)揮出強(qiáng)大的功能和優(yōu)勢(shì)。因此,對(duì)于端口輸出狀態(tài)的控制需求得到了更好的滿足。
-
寄存器
+關(guān)注
關(guān)注
31文章
5434瀏覽量
124513 -
odr
+關(guān)注
關(guān)注
0文章
5瀏覽量
3689 -
bsrr
+關(guān)注
關(guān)注
0文章
2瀏覽量
1346
發(fā)布評(píng)論請(qǐng)先 登錄
Texas Instruments SN74AC164-Q1 8位SIPO移位寄存器數(shù)據(jù)手冊(cè)

Texas Instruments SN74ACT164-Q1 8位SIPO移位寄存器數(shù)據(jù)手冊(cè)

請(qǐng)問(wèn)L9663 Transceiver使用Direct Interface(SYNCx&DOUTx)模式時(shí)還需要通過(guò)SPI對(duì)其寄存器進(jìn)行配置嗎?
ADS1298如果使用寄存器命令RESET去復(fù)位,那么其RESET管腳是接高電平還是低電平,還是懸空?
DAC7565 SYNC這個(gè)IO腳在常態(tài)應(yīng)該置為低電平還是高電平?
想用一個(gè)控制器來(lái)直接對(duì)TSB81BA3E的寄存器進(jìn)行讀寫(xiě),怎么實(shí)現(xiàn)?
DAC5681z從FPGA讀數(shù)據(jù),為什么還需要一個(gè)DCLKP/N呢?
ADS8678是否可以把CS直接拉低或者拉高,SDI保持低電平,使得ADC一直保持在STDBY模式?
ADS62P49降低采樣率,使用50M采樣,除了“enable low speed mode”的寄存器,還需要更改其他的設(shè)置嗎?
ADS9234R復(fù)位、寄存器如何配置?
當(dāng)LMK00725的輸入為L(zhǎng)VPECL電平時(shí),由于芯片輸入管腳內(nèi)部存在51KOhm上下拉,在芯片外部是否還需要增加上下拉偏置電阻呢?
接口的控制與狀態(tài)寄存器什么作用
請(qǐng)問(wèn)tlv320dac3100設(shè)成喇叭輸出時(shí),應(yīng)該怎樣配置寄存器呢?
寄存器的類型和作用
寄存器是什么意思?寄存器是如何構(gòu)成的?

評(píng)論