为什么GPIO置位与清零采用要分开?
程序员文章站
2022-03-05 16:54:18
...
在嵌入式系统开发中,用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倍)!
上一篇: 用U盘在电脑端启动linux内核(kernel)最小系统
下一篇: DRF 工程 搭建
推荐阅读