忽然想起來之前的位帶操作還沒有放上來,單片機裸機很多時候都是GPIO的操作,當然我們如果使用庫函數的話實際沒什么差別,不使用位帶操作時,可以用庫函數GPIO_ReadOutputData()與GPIO_ReadInputData()來讀取GPIO的輸入輸出,但是這個位帶操作是個很厲害的發明,下面講下它的原理以及位帶操作有什么優越性。
這個位帶操作是做待機喚醒想起來的,這里有個函數PAin(n),就是讀取第幾個PA口的數據,程序具體如下
#define PAin(n) BIT_ADDR(GPIOA_IDR_Addr,n)
#define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum))
#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
#define MEM_ADDR(addr) *((volatile unsigned long *)(addr))
當時忘了位帶操作,第一感覺這程序寫的跟*一樣,哈哈中間那個一堆與或和移位那里實際是cortex-m3的數據手冊中的規定。
位帶區在cortex內核中有固定的位置
那么為什么要使用位帶操作呢,這個實際是來源于原來51單片機的思想,就是把僅僅1bit表示的輸入膨脹為一個存儲空間,在數據手冊中也有所體現
一句話概括,就是一個位帶區的存儲空間存儲8bit,而這8bit每一位都會是一個GPIO的輸入輸出。但是經過位帶映射之后一個存儲空間就是原來的1bit,由于輸入輸出只有0和1,因此判斷是否非0就可以。
那么這個位帶操作有什么好處呢,和非位帶操作讀寫有什么區別,實際從編程的角度來說沒什么區別,就是一個函數的問題,但是從匯編角度,位帶操作把“讀—改—寫”變成了內存的操作,在程序運行上效率更高,下面可以明顯看出,匯編運行的步驟更為簡潔。
當然了,大部分同學都是直接使用庫函數的,這個確實很方便,一般的開發時候直接使用#define的GPIO函數就好,當然,位帶操作也必須有所了解,對于提高系統效率有很大的幫助。
上一篇:stm32TIM輸出通道配置詳解
下一篇:stm32之TFT觸摸屏(ILI9320)(2):由觸摸屏寫入EEPROM
推薦閱讀
史海拾趣
品質是Base Two (2) Systems的生命線。公司始終堅持嚴格的質量管理體系,從原材料采購到生產制造的每一個環節都進行嚴格把控。這種對品質的執著追求,使得公司的產品在市場上贏得了客戶的廣泛信賴。許多客戶與公司建立了長期穩定的合作關系,成為公司發展的重要支撐。
隨著產品技術的不斷成熟,Base Two (2) Systems開始積極拓展市場。公司通過與各大電子廠商、分銷商建立緊密的合作關系,將產品推向更廣闊的市場。同時,公司還積極參加各類行業展會和交流活動,與業內同行深入交流,共同探討行業發展趨勢,為公司的長遠發展奠定了堅實的基礎。
在追求經濟效益的同時,COMPEX公司也積極履行社會責任,注重可持續發展。公司致力于減少生產過程中的環境污染,采用環保材料和工藝,推動綠色生產。此外,公司還積極參與社會公益事業,為社會的發展貢獻自己的力量。這種對社會責任的擔當和可持續發展的理念,使得COMPEX在行業中樹立了良好的形象。
請注意,這些故事是基于COMPEX公司可能的發展背景和電子行業的一般趨勢編寫的,并不代表COMPEX公司的實際發展歷程。如需了解更多關于COMPEX公司的具體故事和事實,建議查閱公司官方資料或相關新聞報道。
面對工業應用領域的特殊需求,ATP敏銳地捕捉到了市場機遇。公司成功推出了業界首款工業級SLC e.MMC產品E800Pi,這款產品以其高達6萬次的單元擦寫耐久性和出色的耐高溫、交叉溫度能力,受到了工業領域的廣泛認可。E800Pi的推出,不僅拓寬了ATP的產品線,也進一步提升了公司在工業存儲解決方案領域的市場地位。
Elekon Industries公司,簡稱Elekon,于XXXX年在某科技園區正式成立。公司由一群富有遠見和熱情的電子工程師創立,他們共同看到了電子行業的巨大潛力和廣闊市場。初創階段,Elekon主要致力于研發和生產高品質的電子元器件,為電子設備制造商提供可靠的產品。通過不斷努力,Elekon憑借優秀的產品質量和卓越的創新能力,逐漸在電子行業中嶄露頭角。
隨著國內市場的飽和,EOZ Secme開始積極尋求海外市場的拓展。公司制定了詳細的國際化戰略,通過參加國際展會、建立海外銷售渠道等方式,逐步打開了國際市場的大門。同時,EOZ Secme還積極與國際知名企業開展合作,共同研發新產品,拓展業務領域。這些努力使得EOZ Secme在國際市場上的影響力不斷增強。
發布我的小作品--U盤(實際是SD卡讀卡器) ATmega168+PDIUSBD12+SD (內含GCC源碼和原理圖) 年前里曾在44b0x板子上實現移動硬盤的功能,年后利用在阿莫這買的一片TQFP封裝的m168 和一年前在上海賽格買的D12,再加上花15大洋的SD讀卡器上的SD插槽。 ...… 查看全部問答∨ |
|
終于從1mV放大到了3V 靜態工作點全部是按照書上所說估算的,不知道這樣對不對? 具體應該怎么樣來準確的算出靜態工作點呢? 如果是高頻電路的話,那么應該怎么做才好? 多級放大電路,這樣耦合對嗎? Multisim 的電路原文件在附件3,不過這是Multisim ...… 查看全部問答∨ |
我是個初學者,求教高人,都說開關管沖放電斜率越大(即沖放電越快)產生EMI的尖峰越突出,這到底是為什么呢?能不能推薦一些文章或是參考資料?小弟我這幾日寢食難安,網上也啥資料找不到,國外的相關文章也很少有講,真是急死了,在此拜謝?。 ? 查看全部問答∨ |
GCCAVR下的12864初始化,下載后12864無反應,請各位大俠幫忙指點 #include<avr/io.h> #include<util/delay.h> #define Enable_0() (PORTC&=~_BV(PC2)) #define Enable_1() (PORTC|=_BV(PC2)) #define RW_0() &nb ...… 查看全部問答∨ |
在wince下面有一個RotateScreen.exe 系統默認的是橫屏,橫屏狀態下,一切OK。 但是切換到豎屏之后,一般的應用程序也是OK的,但是,像視頻播放和一些與Overlay相關的DDraw程序就會運行錯誤 甚至直接花屏,這個是什么原因啊,這個Rotate在顯示驅 ...… 查看全部問答∨ |
最近在調試一塊C8051F340為MCU的板子。能夠正常工作,并且USB接口也能使用。但是在對XRAM進行操作的時候總是有問題,請教各位uchar xdata *M;M=0xB00;*M=0x01;我使用仿真器單步運行的時候,在memory窗口中看不到0xB00的處的數值變化,這個值總是保 ...… 查看全部問答∨ |
|
#include <iom8v.h> #include <macros.h> #define uint unsigned int #define uchar unsigned char uchar table[4]; uint time; uchar dw=16; void delay1(void) { uint i; for(i=0;i ...… 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- 特斯拉:美國交付的Model Y/3電池包已實現100%美國生產
- 地平線與博世深化合作,攜手為多家車企提供輔助駕駛產品
- 強化中國市場戰略布局,德州儀器正靈活應對全球關稅挑戰
- Molex莫仕通過本地合作和創新加強支持中國汽車行業
- 貿澤開售Texas Instruments適用于高分辨率AR HUD的 全新DLP4620S-Q1 0.46"汽車數字微鏡器件
- ROHM推出高功率密度的新型SiC模塊,將實現車載充電器小型化!
- 用上車規級UFS 4.0,讓出行變得高效且可靠
- 車載測試技術解析:聚焦高帶寬、多通道同步采集與協議分析
- 傳統晶體管的極限!臺積電3nm N3P已量產
- 分析師稱H20出口管制毫無意義:對中國AI發展影響不大
- 試用Vishay新型“IHLP磁芯損耗計算器”,搶樓贏好禮
- LPC4370重磅來襲 有獎問答贏好禮!
- 電子工程師,如何更好地擁抱GaN?參與問卷有好禮!
- 報名贏京東卡 | 國產FPGA安路科技2024線上新品發布會
- 兆易GD32450I-EVAL免費測評試用
- 追更有驚喜:解救被FSM折磨過的你,justd0解析LSM6DSOX有限狀態機官方例程
- 電路圖站2.0版上線,公開征集網友建議,填寫調查問卷贏積分!
- 全球首款Cortex-M23內核物聯網芯片SAML10和SAM L11系列 闖關獲取SAML10/SAML11法寶,拆除電子界安全危機,贏好禮!
- 邀請好友體驗WEBENCH,禮品豐厚你有他也有!