<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          寄存器操作的方法

          作者: 時間:2016-11-09 來源:網(wǎng)絡(luò) 收藏
          一, 寄存器設(shè)置操作特性

          1,一個寄存器的每個位有其不同的意義,進行不同的設(shè)置會使硬件產(chǎn)生不同的效果和功能;

          本文引用地址:http://www.ex-cimer.com/article/201611/318035.htm

          2,有些情況下需要對一個寄存器進行連續(xù)的不同的甚至完全相反的設(shè)置;

          3,有些情況下需要對一個寄存器中的某一位或一位進行連續(xù)的不同的甚至完全相反的設(shè)置,而其余的位要保持不變;

          4,有時,對一個寄存器進行設(shè)置時,對其不同的位進行先后順序不同的設(shè)置,即對其各個位有先后設(shè)置的順序的要求,使硬件產(chǎn)生的結(jié)果也不同;

          5,有時,對于一個寄存器要求必須一次賦值,若對其某些位賦值先后順序不同,便達不到預(yù)期的效果和功能。

          二,寄存器的賦值操作方法

          為說明方便,定義如下3個8位的寄存器:

          #define REG 0xFFFFFF10

          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) );

          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;

          ----------------------------------------------------------------------------------------------

          1 寄存器地址的定義:
          #define UART_BASE_ADRS (0x10000000) /* 串口的基地址 */
          #define UART_RHR*(volatile unsigned char *)(UART_BASE_ADRS + 0) /* 數(shù)據(jù)接受寄存器 *///?????????
          #define UART_THR *(volatile unsigned char *)(UART_BASE_ADRS + 0) /* 數(shù)據(jù)發(fā)送寄存器 */
          2 寄存器讀寫操作:
          UART_THR = ch; /* 發(fā)送數(shù)據(jù) */
          ch = UART_RHR; /* 接收數(shù)據(jù) */
          也可采用定義帶參數(shù)宏實現(xiàn)
          #define WRITE_REG(addr, ch) *(volatile unsigned char *)(addr) = ch
          #define READ_REG(addr, ch) ch = *(volatile unsigned char *)(addr)


          3 對寄存器相應(yīng)位的操作方法:
          定義寄存器
          #define UART_LCR *(volatile unsigned char *)(UART_BASE_ADRS + 3) /* 線控制寄存器 */

          定義寄存器相應(yīng)位的值
          #define CHAR_LEN_5 0x00
          #define CHAR_LEN_6 0x01
          #define CHAR_LEN_7 0x02
          #define CHAR_LEN_8 0x03 /* 8 data bit */
          #define LCR_STB 0x04 /* Stop bit control */
          #define ONE_STOP 0x00 /* One stop bit! */
          #define LCR_PEN 0x08 /* Parity Enable */
          #define PARITY_NONE 0x00
          #define LCR_EPS 0x10 /* Even Parity Select */
          #define LCR_SP 0x20 /* Force Parity */
          #define LCR_SBRK 0x40 /* Start Break */
          #define LCR_DLAB 0x80 /* Divisor Latch Access Bit */

          定義寄存器相應(yīng)位的值另一種方法
          #define CHAR_LEN_5 0<<0
          #define CHAR_LEN_6 1<<0
          #define CHAR_LEN_7 1<<1
          #define CHAR_LEN_8 (1<<0)|(1<<1) /* 8 data bit */
          #define LCR_STB 1<<2 /* Stop bit control */
          #define ONE_STOP 0<<2 /* One stop bit! */
          #define LCR_PEN 1<<3 /* Parity Enable */
          #define PARITY_NONE 0<<3
          #define LCR_EPS 1<<4 /* Even Parity Select */
          #define LCR_SP 1<<5 /* Force Parity */
          #define LCR_SBRK 1<<6 /* Start Break */
          #define LCR_DLAB 1<<7 /* Divisor Latch Access Bit */

          對寄存器操作只需對相應(yīng)位或賦值
          UART_LCR = CHAR_LEN_8 | ONE_STOP | PARITY_NONE; /* 設(shè)置 8位數(shù)據(jù)位,1位停止位,無校驗位 */

          4 對寄存器某一位置位與清零
          對某一寄存器第7位置位
          XX_CRTL |= 1<<7;
          XX_CRTL &= ~(1<<7);

          UART_LCR |= LCR_DLAB; /* 時鐘分頻器鎖存使能 */
          UART_LCR &= ~(LCR_DLAB); /* 禁止時鐘分頻器鎖存 */

          5 判斷寄存器某一位是否置位或為0的方法
          #define UART_LSR *(volatile unsigned char *)(UART_BASE_ADRS + 5) /* 線狀態(tài)寄存器 */
          #define LSR_DR 1<<0 /* Data Ready */

          當(dāng)UART_LSR的第0位為1時結(jié)束循環(huán)
          while (!(UART_LSR & LSR_DR)) /* 等待數(shù)據(jù)接收完 */



          關(guān)鍵詞: 寄存器設(shè)置操作特

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();