1. 程式人生 > >對暫存器操作的通用方法總結

對暫存器操作的通用方法總結

接觸了一陣子的STM32函式庫,使用起來挺方便的,但是很少有處理器會有函式庫,大部分情況下還是要自己來對暫存器進行操作,所以還是不要生疏了對暫存器的操作。對暫存器的操作有時候要考慮對其不同的位進行先後順序不同的設定,因為這樣可能達不到預期的效果,這個不太好總結,但是對暫存器操作的方法是固定的。在這之前,首先要明白邏輯運算子(! && ||)和位運算子(<< >> ~ | ^ &)的區別,對暫存器的操作使用的是位運算子,邏輯運算子一般用於在程式中判斷邏輯中使用。

例如 定義一個8位的暫存器(0xf0是暫存器的地址):

define REG 0xF0

1)對單個的位進行賦值
(1)將暫存器REG的第5位置“1”
REG |= (1 << 5);

(2)將暫存器REG的第5位清零
REG &= ~(1 << 5);

(3)將暫存器REG的第3和第5位置“1”
REG |= (1 << 5) | (1 << 3);

(4)將暫存器REG的第3和5位清零
REG &= ~( (1 << 5) | (1 << 3) );

該段總結如下:
將某位置1,移位取反後使用位運算”|”
將某位置0,移位取反後,使用位運算”&”

2)直接賦值
(1)將暫存器REG的1、2、3、5、7位置“1”
REG = 0x5E;
(即給暫存器REG1賦值為1010 1110,這種方法多在初始化中使用)

(2)分別將暫存器REG的1、3、5、7位置“1”,0、2位置“0”
u8 temp;
tmep = REG;
temp &= ~0x01; //等價於 temp &= ~(1<<0) 將第0位清零
temp |= (1 << 1);
temp &= ~(1 << 2);
temp |= (1 << 3);
temp |= (1 << 5);
temp |= (1 << 7);
REG = temp;

相關推薦

操作通用方法總結

接觸了一陣子的STM32函式庫,使用起來挺方便的,但是很少有處理器會有函式庫,大部分情況下還是要自己來對暫存器進行操作,所以還是不要生疏了對暫存器的操作。對暫存器的操作有時候要考慮對其不同的位進行先後順序不同的設定,因為這樣可能達不到預期的效果,這個不太好總結,

使用位運算操作通用方法

     對暫存器的操作有時候要考慮對其不同的位進行先後順序不同的設定,但是對暫存器操作的方法是固定的。      首先要明白邏輯運算子(!,&&,||)和位運算子(<<,

操作方法

一, 暫存器的設定和操作特性 1,一個暫存器的每個位有其不同的意義,進行不同的設定會使硬體產生不同的效果和功能; 2,有些情況下需要對一個暫存器進行連續的不同的甚至完全相反的設定; 3,有些情況下需要對一個暫存器中的某一位或一位進行連續的不同的甚至完全相反的設定,而其餘的位要保持不變;

嵌入式開發中的位操作

在嵌入式開發中常常要對暫存器或者變數的位進行讀和寫,以下有幾個常用的tips。 開始之前,先複習一下C語言的位與(&)位或(|)運算。 # 假設 A 為暫存器上的某一位 A | 0 = A A

海思Hi3516A操作命令總結

海思himm原始碼路徑:                        xxx/Hi3519V101_SDK_V1.0.4.0/osdrv/tools/board/reg-t

一種操作指定位翻轉方法

通常情況,很多CPU暫存器是不可以進行單獨的位操作的,比如32位ARM,若要改變暫存器某位,那就有可能影響到其它的31位。 平時開發中會經常遇到,以平時開發中遇到的LED為例,如果要實現指定的LED翻轉時,其它的LED狀態不變,那麼就要操作暫存器對指定位進行翻

新路程------hi3516a 在應用層操作

  由於在應用層沒法用writel,所以參考himm.c寫了一個設定,程式碼如下: void uart1_rtsn_high(void) {     void * pMem  = NULL;   pMem = memmap(0x201d0010, DEFAULT_MD_LE

嵌入式操作-----C語言位操作的學習

2015年4月1日總結。 a |= 1<<x //第x位寫1 a &=~(1<<x) //第x位寫0 (a &(1<<x)) == a //判斷1,等號左邊括號不能省略 (a&a

STM32操作埠模式SDA_OUT()/SDA_IN()

#define SDA_IN()        {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)8<<28;}  #define SD

STM32入門學習之GPIO(STM32F030F4P6基於CooCox IDE)(操作版)

依然,直接上程式碼 #include "stm32f0xx.h" #include "stm32_lib/inc/stm32f0xx_rcc.h" #include "stm32_lib/inc/stm32f0xx_gpio.h" int main(void) { /

CPU操作方式

 CPU暫存器的讀取方式,其實就是讀取某個地址中儲存的資料,只不過這個地址是晶片廠商規定好用於特定功能的。 一般IDE都會提供暫存器的標頭檔案,可以參考晶片的程式設計手冊,手冊中都有每個模組的暫存器定義,以及地址說明,如果你不想使用標頭檔案定義可以自己手動編寫,例如你想

ESP和EBP的一些理解

PS:EBP是當前函式的存取指標,即儲存或者讀取數時的指標基地址;ESP就是當前函式的棧頂指標。每一次發生函式的呼叫(主函式呼叫子函式)時,在被呼叫函式初始時,都會把當前函式(主函式)的EBP壓棧,以便從子函式返回到主函式時可以獲取EBP。 下面是按呼叫約定__stdc

基於ARM9處理器的工作模式&工作狀態&&異常型別總結筆記

ARM9處理器工作模式 改變工作模式的方法:①軟體改變,改變CPSR(當前程式狀態暫存器)的低5位即可;②外部中斷或異常處理改變; 使用者模式:大部分情況下,程式是執行在使用者模式下,此時某些被保護的暫存器是不能訪問; 非使用者模式:除了使用者模式之外的模式;

STM32 IO操作

STM32的IO埠有八種模式:1、輸入浮空         5、開漏輸出2、輸入上拉         6、推輓輸出3、輸入下拉         7、推輓複用4、模擬輸入         8、開漏複用每個IO口都有七個暫存器來控制:CHL、CHR        :埠配置暫存器(

MTK6589抓取Log,VM_Log,pcm data,抓取方法

1撥號盤輸入*#*#3646633#*#* Enter Engineer Mode\MTKLog VM Log 抓取方法: 1. 插入sdcard,用來儲存所謂的vm log; 2.輸入*#*#3646633#*#* 進入Engineer Mode;

GPIOA高8位輸入控制低8位輸出(操作)

int main() { GPIOA->CRH = 0x44444444; GPIOA->CRL = 0x33333333; while(1) {

iMX6引腳配置的使用方法總結

平臺:  OKMX6Q-S系統:  Linux核心版本:linux-3.0.35Datasheet:IMX6DQRM.pdf i.MX 6Q包含有限數量的引腳,其中大部分具有多個訊號選項。這些訊號到引腳和引腳到訊號的選項由輸入輸出多路複用器IOMUX選擇。IOMUX還用於配置

大白帶你重玩STM32系列(三)------STM32的通用GPIO口(操作

轉載自—— 在上一講中,我們學習了MDK的安裝以及破解。這一講中,我們就開始認認真真的談一談,STM32可愛的GPIO口。 本文中,通過對點亮一個LED燈的操作,我們來講解一下,如何操作GPIO口。就像學各類軟體程式設計的同學們言必談HelloWorld一樣,學微控制器的

第二章 相關內容總結

      對於一個彙編程式設計師來說,CPU中的主要部件是暫存器。暫存器是CPU中程式設計師可以用指令讀寫的部件。程式設計師通過改變各種暫存器中的內容來實現對CPU的控制。不同的CPU,暫存器的個數、結構是不相同的。8086CPU有14個暫存器,每個暫存器有一個名稱。 &nb

第三章 (記憶體訪問)相關內容總結

      在本章中,我們從訪問記憶體的角度繼續學習了幾個暫存器。我們提出字單元的概念:字單元,即存放一個字型資料(16位)的記憶體單元,由兩個地址連續的記憶體單元組成。高地址記憶體單元中存放字型資料的高位位元組,低地址記憶體單元中存放字型資料的低位位元組。CPU要讀寫一個記憶體