在用寄存器配置IO口时,为什么要这么麻烦

2019-07-20 20:14发布

先给P9赋11,也就是赋3左移18位取反,与运算;然后再赋01左移做或运算。不能直接赋01左移18位吗?

不太了解寄存器位的原理,MODER &= ~(3<<2*9),不就是MODER = MODER & ~(3<<2*9)嘛,那这里面的 MODER 的值是什么或者说多少?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
destiny、
1楼-- · 2019-07-20 21:16
这种操作更规范化,先&复位要配置的位,再|配置的数据置位。特殊功能寄存器都有Reset值,真的都是未知的吗?建议去看看datasheet.。各个功能模块初始化顺序不一样,而且初始化各个功能模块可能会用到同一寄存器的不同位,这个顺序导致寄存器里面有非default的值。
mupb
2楼-- · 2019-07-21 00:21
 精彩回答 2  元偷偷看……
imaginer
3楼-- · 2019-07-21 00:25
寄存器是这样的,比如说MODER是一个32位的寄存器,是每两位控制一个状态,2*9就是你要左移18位  移动9个状态位, 把第10个状态位设置为11,
OMG
4楼-- · 2019-07-21 05:07
开始理解不来
杏帘在望
5楼-- · 2019-07-21 09:15
 精彩回答 2  元偷偷看……
mupb
6楼-- · 2019-07-21 11:50
杏帘在望 发表于 2016-9-7 09:06
因为寄存器写的代码对于新手或者一般人可读性没有库函数的那么直观,所以在写代码的过程中尽量会通过一些技 ...

寄存器的各个bit的状态一开始都是未知的,这是我今天想的答案。。。

一周热门 更多>