TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320F280049: 如何理解寄存器操作的”或等“号 HWREGH(WD_BASE + SYSCTL_O_WDCR) |= SYSCTL_WD_CHKBITS | SYSCTL_WDCR_WDDIS

Part Number:TMS320F280049

#define HWREGH(x)        (*((volatile uint16_t *)((uintptr_t)(x))))

HWREGH(WD_BASE + SYSCTL_O_WDCR) |= SYSCTL_WD_CHKBITS | SYSCTL_WDCR_WDDIS; 这个语句理解如下:

HWREGH(0x0000 7000U+0x0000 0029U) |= 0x0000 0068U进行操作;

但我不太想白 这个或等号 ” |= “, 在这里是什么意思。 跟C语言里面的|= 运算符一样理解吗?把地址:0x0000 7000U+0x0000 0029U里面的值 与 0x0000 0068运算后再赋给地址:0x0000 7000U+0x0000 0029?如果这样理解的话,地址0x0000 7000U+0x0000 0029里面的初始值应该为0H?

Yale Li:

Hi Andy,

Andy Liu 说:跟C语言里面的|= 运算符一样理解吗?把地址:0x0000 7000U+0x0000 0029U里面的值 与 0x0000 0068运算后再赋给地址:0x0000 7000U+0x0000 0029?

是的。

您列一个真值表看一下,会方便您理解:

位值
运算值
‘|=’结果

0
0
0

0
1
1

1
0
1

1
1
1

可以看到‘|=’就是要对相关位置1(表格的第2、4行),并且不会改变不想操作的位的值(第1、3行)。

,

Andy Liu:

Hello Yale,

 再请教一下,初始状态下,地址:0x0000 7000U+0x0000 0029U里面的内容为0,对吗?    或等的运算我明白,只是以前习惯了直接位操作,现在初次接触这个地址操作的方法,一时想不明白。谢谢你的回答。

,

Yale Li:

Hi Andy,

Andy Liu 说:再请教一下,初始状态下,地址:0x0000 7000U+0x0000 0029U里面的内容为0,对吗?

这个要去查TRM中的寄存器表,表中会给出寄存器的每个位在复位之后的初始值;

但其实初始值是多少是无所谓的,这就是用 ‘或等’ 来代替 ‘等于’ 进行赋值操作的原因。

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F280049: 如何理解寄存器操作的”或等“号 HWREGH(WD_BASE + SYSCTL_O_WDCR) |= SYSCTL_WD_CHKBITS | SYSCTL_WDCR_WDDIS
分享到: 更多 (0)