繁体   English   中英

如何定义寄存器中标志的宽度

[英]How to define the width of a flag in a register

我正在尝试访问名为 RESPONSE0 的寄存器中的 CMMND_CTR 标志。 根据文档,运行标志是第 7 位,挂起标志是第 6 位,睡眠标志是第 5 位等,我将这些位定义如下:#define RESPONSE0_RUNNING (1 << 7)。 我遇到问题的地方是 CMMND_CTR 标志是 4 位宽(位 3:0),似乎无法弄清楚如何在定义中为标志指定宽度。 我已经在下面发布了代码。注册和标志定义

我遇到问题的地方是 CMMND_CTR 标志是 4 位宽(位 3:0),似乎无法弄清楚如何在定义中为标志指定宽度

如果 CMMD_CTR 是 4 位,那么您需要屏蔽这 4 位。 这意味着您需要设置 4 位 (0xF),并且正如您在其他定义中所做的那样,将其移动到适当的位置。 由于 CMMD_CTR 是位 3-0,因此您需要移位零位。

#define RESPONSE0_REGISTER  (*(volatile uint8_t*)0x11)
#define RESPONSE0_RUNNING   (1 << 7)
#define RESPONSE0_SUSPEND   (1 << 6)
#define RESPONSE0_SLEEP     (1 << 5)
#define RESPONSE0_CMD_ERR   (1 << 4)
#define RESPONSE0_CMMND_CTR (0xF << 0)

然后你可以像这样读取这些位,

uint8_t response0_cmmd_ctr = RESPONSE0_REGISTER & RESPONSE0_CMMND_CTR; 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM