51822内部retention register

在看51822的DFU文章时看到了内部有种比较特殊的寄存器,避免自己在忘记,记录下来加深印象。
根据nRF51 Series Reference Manual 手册中讲到的内容:


retention register.png

大概意思: Retained Register 是一个可以在系统OFF模式时保持内部数据值的寄存器,也只能允许由复位源给定的复位情况。在不同独立的外设章节有对不同外设做的介绍。

下面简单翻译为:保持寄存器。 不同的外设有不同的保持寄存器,功能和特性可能都不一样,用的时候根据实际情况再详细看资料。

今天主要是使用了NRF_POWER->GPREGRET寄存器,文档中提到的数据保持功能,仅限于软件或者外部按键复位操作时可以保持寄存器值,如果断电源后数据还是会被丢失的。这个是自己亲自做实验得出的结论。

SDK这种介绍使用方法:
http://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.sdk51.v10.0.0%2Findex.html

1. uint32_t sd_power_gpregret_set(uint32_t  gpregret_msk)
2. uint32_t sd_power_gpregret_clr(uint32_t  gpregret_msk)
3. uint32_t sd_power_gpregret_get(uint32_t * p_gpregret)
 // 举个例子:
 uint32_t * buffer;

 sd_power_gpregret_get(buffer);
 PW_retention_register = *buffer & 0x00ff;

 sd_power_gpregret_set(0x01); //置位bit0
 sd_power_gpregret_clr(0x01); //清零bit0
set和clr分别是设定寄存器GPREGRET和清除寄存器操作;对特定位写1将置位或者清零操作; 寄存器有效位为低8位有效。
使用前两个语句set寄存器值Parameters:
[in]   gpregret_msk   Bits to be set in the GPREGRET register
使用第三个语句get读取寄存器参数: Parameters:
[out]  p_gpregret   Contents of the GPREGRET register.  p_gpregret 是32位指针使用时注意。
//第二种直接寄存器操作:
       1.  NRF_POWER->GPREGRET = 0x00;  
       2.  NRF_POWER->GPREGRET = 0x01;      // write 
       3.  buffer = NRF_POWER->GPREGRET & 0xff;  //read register
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容