為什麼GPIO置位與清零採用要分開?
阿新 • • 發佈:2021-03-20
在嵌入式系統開發中,用C語言進行位操作,設定管腳的值等是非常多的,在操作的同時我們有希望不要影響其他位的值,通常我們是要首先儲存其他管腳的值,然後在設定,如我們置位PA01管腳(不採用C51的位操作):
PA->OUT&=~(1<<1);
置位操作:
PA->OUT|=1<<1;
語句結構是非常複雜的,而且要翻譯成6條彙編指令。
引入置位與清零暫存器後,置位:
PA->OUTSET=1<<1;
清零:
PA->OUTCLR=1<<1;
指令結構非常簡單,且一般大約翻譯成2條彙編彙編指令。
這樣操作會影響其他管腳的值嗎?答案是不會,以置位為例,只看2個管腳,看下錶分析:
SET暫存器前值 | SET暫存器後值 | 管腳前值 | 管腳後值 | 備註 |
00,01,10,11 | 01 | 00 | 01 | |
01 | 01 | |||
10 | 11 | |||
11 | 11 |
程式碼易於理解,速度快(3倍)!