秉火429笔记之七位带操作
生活随笔
收集整理的這篇文章主要介紹了
秉火429笔记之七位带操作
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
目錄
?位帶概況
?位帶概況
位操作,簡單的理解,可以單獨(dú)的對一個比特位讀和寫,51單片機(jī)非常常見。類如,51單片機(jī)通過關(guān)鍵字sbit來實現(xiàn)位定義,STM32并沒有這個關(guān)鍵字,而是通過訪問位帶別名區(qū)(Bit band alias)來實現(xiàn)的。
通過查看《M4內(nèi)核參考手冊》3.4 system address map 可知下圖:
M4中2個區(qū)域?qū)崿F(xiàn)了位帶,其一為SRAM的最低1MB空間,其二為外設(shè)區(qū)域的最低1MB空間。
參考3.7 Bit-banding 可知,位帶區(qū)的一個比特經(jīng)過膨脹后,雖然變大到4個字節(jié),但是還是LSB才有效。有人會問這不是浪費(fèi)空間嗎,要知道F429的系統(tǒng)總線是32位的,按照4個字節(jié)訪問的時候是最快的,所以膨脹成4個字節(jié)來訪問是最高效的。通過指針的形式訪問位帶別名區(qū)地址從而達(dá)到操作位帶區(qū)比特位的效果。
// 把“位帶地址+位序號”轉(zhuǎn)換成別名地址的宏 #define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x02000000+((addr & 0x000FFFFF)<<5)+(bitnum<<2))// 把一個地址轉(zhuǎn)換成一個指針 #define MEM_ADDR(addr) *((volatile unsigned long *)(addr))// 把位帶別名區(qū)地址轉(zhuǎn)換成指針 #define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum))?
總結(jié)
以上是生活随笔為你收集整理的秉火429笔记之七位带操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【信息安全技术】实验报告:木马及远程控制
- 下一篇: PHP 3D大富翁,3D立体大富翁手游《