国产成人av人人爽人人澡-亚洲国产日韩欧美一区-好吊日视频这里只有精品-日本高清精品视频在线

你好!歡迎來(lái)到深圳市穎特新科技有限公司!
語(yǔ)言
當(dāng)前位置:首頁(yè) >> 技術(shù)中心 >> 單片機(jī)入門 >> 高手經(jīng)驗(yàn)!STM32中的位帶(bit-band)操作

高手經(jīng)驗(yàn)!STM32中的位帶(bit-band)操作

關(guān)鍵字:STM32 單片機(jī) 作者:admin 來(lái)源:不詳 發(fā)布時(shí)間:2018-05-18  瀏覽:18

支持了位帶操作后,可以使用普通的加載/存儲(chǔ)指令來(lái)對(duì)單一的比特進(jìn)行讀寫(xiě)。在 CM3 中,有兩個(gè)區(qū)中實(shí)現(xiàn)了位帶。其中一個(gè)是 SRAM 區(qū)的最低 1MB 范圍,第二個(gè)則是片內(nèi)外設(shè)區(qū)的最低 1MB范圍。這兩個(gè)區(qū)中的地址除了可以像普通的 RAM 一樣使用外,它們還都有自己的“位帶別名區(qū)”,位帶別名區(qū)把每個(gè)比特膨脹成一個(gè) 32 位的字。當(dāng)你通過(guò)位帶別名區(qū)訪問(wèn)這些字時(shí),就可以達(dá)到訪問(wèn)原始比特的目的。

位帶操作的概念其實(shí) 30 年前就有了,那還是8051 單片機(jī)開(kāi)創(chuàng)的先河,如今,CM3 將此能力進(jìn)化,這里的位帶操作是 8051 位尋址區(qū)的威力大幅加強(qiáng)版。

CM3 使用如下術(shù)語(yǔ)來(lái)表示位帶存儲(chǔ)的相關(guān)地址:

位帶區(qū):支持位帶操作的地址區(qū)

位帶別名:對(duì)別名地址的訪問(wèn)最終作用到位帶區(qū)的訪問(wèn)上(這中途有一個(gè)地址映射過(guò)程)

 

在位帶區(qū)中,每個(gè)比特都映射到別名地址區(qū)的一個(gè)字——這是只有 LSB 有效的字。當(dāng)一個(gè)別名地址被訪問(wèn)時(shí),會(huì)先把該地址變換成位帶地址。對(duì)于讀操作,讀取位帶地址中的一個(gè)字,再把需要的位右移到 LSB,并把 LSB 返回。對(duì)于寫(xiě)操作,把需要寫(xiě)的位左移至對(duì)應(yīng)的位序號(hào)處,然后執(zhí)行一個(gè)原子的“讀-改-寫(xiě)”過(guò)程。

 1.jpg 2.jpg4.png  

支持位帶操作的兩個(gè)內(nèi)存區(qū)的范圍是:

0x2000_0000‐0x200F_FFFF(SRAM 區(qū)中的最低 1MB)

0x4000_0000‐0x400F_FFFF(片上外設(shè)區(qū)中的最低 1MB)

對(duì) SRAM 位帶區(qū)的某個(gè)比特,記它所在字節(jié)地址為 A,位序號(hào)為 n(0<=n<=7),則該比特在別名區(qū)的地址為:

AliasAddr=0x22000000+((A-0x20000000)*8+n)*4=0x22000000+(A-0x20000000)*32+n*4

對(duì)于片上外設(shè)位帶區(qū)的某個(gè)比特,記它所在字節(jié)的地址為 A,位序號(hào)為 n(0<=n<=7),則該比特在別名區(qū)的地址為:

AliasAddr=0x42000000+((A-0x40000000)*8+n)*4=0x42000000+(A-0x40000000)*32+n*4

上式中,“*4”表示一個(gè)字為 4 個(gè)字節(jié),“*8”表示一個(gè)字節(jié)中有 8 個(gè)比特。

這里再不嫌啰嗦地舉一個(gè)例子:

1. 在地址 0x20000000 處寫(xiě)入 0x3355AACC

2. 讀取地址0x22000008。本次讀訪問(wèn)將讀取 0x20000000,并提取比特 2,值為 1。

3. 往地址 0x22000008 處寫(xiě) 0。本次操作將被映射成對(duì)地址 0x20000000 的“讀-改-寫(xiě)”操作(原子的),把比特2 清 0。

4. 現(xiàn)在再讀取 0x20000000,將返回 0x3355AAC8(bit[2]已清零)。

位帶別名區(qū)的字只有 LSB 有意義。另外,在訪問(wèn)位帶別名區(qū)時(shí),不管使用哪一種長(zhǎng)度的數(shù)據(jù)傳送指令(字/半字/字節(jié)),都把地址對(duì)齊到字的邊界上,否則會(huì)產(chǎn)生不可預(yù)料的結(jié)果。

[cpp] view plain copy///////////////////////////////////////////////////////////////

//位帶操作,實(shí)現(xiàn)51類似的GPIO控制功能

//具體實(shí)現(xiàn)思想,參考<>第五章(87頁(yè)~92頁(yè)).

//IO口操作宏定義

#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))

#define MEM_ADDR(addr) *((volatile unsigned long *)(addr))

#define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum))

//IO口地址映射

#define GPIOA_ODR_Addr (GPIOA_BASE+12) //0x4001080C

#define GPIOB_ODR_Addr (GPIOB_BASE+12) //0x40010C0C

#define GPIOC_ODR_Addr (GPIOC_BASE+12) //0x4001100C

#define GPIOD_ODR_Addr (GPIOD_BASE+12) //0x4001140C

#define GPIOE_ODR_Addr (GPIOE_BASE+12) //0x4001180C

#define GPIOF_ODR_Addr (GPIOF_BASE+12) //0x40011A0C

#define GPIOG_ODR_Addr (GPIOG_BASE+12) //0x40011E0C

#define GPIOA_IDR_Addr (GPIOA_BASE+8) //0x40010808

#define GPIOB_IDR_Addr (GPIOB_BASE+8) //0x40010C08

#define GPIOC_IDR_Addr (GPIOC_BASE+8) //0x40011008

#define GPIOD_IDR_Addr (GPIOD_BASE+8) //0x40011408

#define GPIOE_IDR_Addr (GPIOE_BASE+8) //0x40011808

#define GPIOF_IDR_Addr (GPIOF_BASE+8) //0x40011A08

#define GPIOG_IDR_Addr (GPIOG_BASE+8) //0x40011E08

//IO口操作,只對(duì)單一的IO口!

//確保n的值小于16!

#define PAout(n) BIT_ADDR(GPIOA_ODR_Addr,n) //輸出

#define PAin(n) BIT_ADDR(GPIOA_IDR_Addr,n) //輸入

#define PBout(n) BIT_ADDR(GPIOB_ODR_Addr,n) //輸出

#define PBin(n) BIT_ADDR(GPIOB_IDR_Addr,n) //輸入

#define PCout(n) BIT_ADDR(GPIOC_ODR_Addr,n) //輸出

#define PCin(n) BIT_ADDR(GPIOC_IDR_Addr,n) //輸入

#define PDout(n) BIT_ADDR(GPIOD_ODR_Addr,n) //輸出

#define PDin(n) BIT_ADDR(GPIOD_IDR_Addr,n) //輸入

#define PEout(n) BIT_ADDR(GPIOE_ODR_Addr,n) //輸出

#define PEin(n) BIT_ADDR(GPIOE_IDR_Addr,n) //輸入

#define PFout(n) BIT_ADDR(GPIOF_ODR_Addr,n) //輸出

#define PFin(n) BIT_ADDR(GPIOF_IDR_Addr,n) //輸入

#define PGout(n) BIT_ADDR(GPIOG_ODR_Addr,n) //輸出

#define PGin(n) BIT_ADDR(GPIOG_IDR_Addr,n) //輸入

編輯:admin  最后修改時(shí)間:2018-05-18

聯(lián)系方式

0755-82591179

傳真:0755-82591176

郵箱:vicky@yingtexin.net

地址:深圳市龍華區(qū)民治街道民治大道973萬(wàn)眾潤(rùn)豐創(chuàng)業(yè)園A棟2樓A08

Copyright © 2014-2023 穎特新科技有限公司 All Rights Reserved.  粵ICP備14043402號(hào)-4

亚洲欧美日韩色图七区| 欧美亚洲综合另类色妞| 欧美黑人黄色一区二区| 黄色污污在线免费观看| 久久福利视频这里有精品| 日韩精品一区二区亚洲| 中文字字幕在线中文乱码二区| 精品视频一区二区三区不卡| 午夜福利网午夜福利网| 中文字字幕在线中文乱码二区| 亚洲国产成人久久一区二区三区| 久久精品亚洲情色欧美| 色婷婷丁香激情五月天| 日本一区二区三区久久娇喘| 国产美女精品午夜福利视频| 国产综合香蕉五月婷在线| 国产偷拍精品在线视频| 亚洲国产av精品一区二区| 国产偷拍盗摄一区二区| 久热香蕉精品视频在线播放| 中文字幕精品一区二区年下载| 99久久免费中文字幕| 日韩精品第一区二区三区| 国产成人亚洲欧美二区综| 国产日本欧美韩国在线| 日韩精品小视频在线观看| 欧美日韩黑人免费观看| 大香蕉伊人精品在线观看| 暴力性生活在线免费视频| 欧美二区视频在线观看| 日韩人妻毛片中文字幕| 色哟哟国产精品免费视频| 日韩欧美国产精品自拍| 欧美一区二区三区播放| 一区二区三区精品人妻| 日韩精品在线观看完整版| 午夜福利视频偷拍91| 国产精品成人一区二区三区夜夜夜| 日本少妇中文字幕不卡视频| 精品高清美女精品国产区| 久久成人国产欧美精品一区二区|