通過這段時(shí)間的工作和學(xué)習(xí),我感覺在嵌入式硬件編程中,大多數(shù)情況下都是對(duì)相應(yīng)硬件的功能寄存器進(jìn)行設(shè)置和操作。
一, 寄存器的設(shè)置和操作特性
1,一個(gè)寄存器的每個(gè)位有其不同的意義,進(jìn)行不同的設(shè)置會(huì)使硬件產(chǎn)生不同的效果和功能;
2,有些情況下需要對(duì)一個(gè)寄存器進(jìn)行連續(xù)的不同的甚至完全相反的設(shè)置;
3,有些情況下需要對(duì)一個(gè)寄存器中的某一位或一位進(jìn)行連續(xù)的不同的甚至完全相反的設(shè)置,而其余的位要保持不變;
4,有時(shí),對(duì)一個(gè)寄存器進(jìn)行設(shè)置時(shí),對(duì)其不同的位進(jìn)行先后順序不同的設(shè)置,即對(duì)其各個(gè)位有先后設(shè)置的順序的要求,使硬件產(chǎn)生的結(jié)果也不同;
5,有時(shí),對(duì)于一個(gè)寄存器要求必須一次賦值,若對(duì)其某些位賦值先后順序不同,便達(dá)不到預(yù)期的效果和功能。
二,寄存器的賦值操作方法
為說明方便,定義如下3個(gè)8位的寄存器:
#define?? REG???? 0xFFFFFF10
1,對(duì)單個(gè)的位進(jìn)行賦值
(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) );
2,直接賦值
(1)將寄存器REG的0、1、2、3、5、7位置“1”
REG = 0x5F;
(即給寄存器REG1賦值為1010 1111,這種方法多在初始化中使用)
(2)分別將寄存器REG的1、3、5、7位置“1”,0、2位置“0”
uint32 temp;
tmep = REG;
temp &= ~0x01;
temp |= (1 << 1);
temp &= ~(1 << 2);
temp |= (1 << 3);
temp |= (1 << 5);
temp |= (1 << 7);
REG = temp;
因篇幅問題不能全部顯示,請(qǐng)點(diǎn)此查看更多更全內(nèi)容
Copyright ? 2019- 91gzw.com 版權(quán)所有 湘ICP備2023023988號(hào)-2
違法及侵權(quán)請(qǐng)聯(lián)系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市萬商天勤律師事務(wù)所王興未律師提供法律服務(wù)