如何更改32位寄存器特定位而不更改其他位?
发布时间:2020-12-16 03:28:24 所属栏目:百科 来源:网络整理
导读:我想直接使用其物理地址来操作寄存器的某些位.但是我找不到办法来做到这一点.我看到一些关于设置位掩码的帖子,但我觉得它们太混乱了. 我的寄存器物理地址是:0x4A10005C 我想操纵它在18-16位之间的位.我想在这些位内设置0x3. 如果你们能提供答案或办法,我将
我想直接使用其物理地址来操作寄存器的某些位.但是我找不到办法来做到这一点.我看到一些关于设置位掩码的帖子,但我觉得它们太混乱了.
我的寄存器物理地址是:0x4A10005C 我想操纵它在18-16位之间的位.我想在这些位内设置0x3. 如果你们能提供答案或办法,我将非常高兴.谢谢. 解决方法
您可以只定义指向寄存器的指针,然后使用常规C按位操作来操作各个位:
volatile uint32_t * const my_register = (uint32_t *) 0x4A10005C; // set up a pointer to the register uint32_t val = *my_register; // read register val &= ~(0x7 << 16); // clear bits 16..18 val |= (0x3 << 16); // set bits 16..18 to 0x03 (i.e. set bits 16 and 17) *my_register = val; // write register (以上假设您正在讨论寄存器中的三位,位16,17和18,并且您希望将位18设置为零,将位16和17设置为1.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |