1. 程式人生 > 其它 >為什麼GPIO置位與清零採用要分開?

為什麼GPIO置位與清零採用要分開?

在嵌入式系統開發中,用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,11010001
0101
1011
1111

程式碼易於理解,速度快(3倍)!