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

你可能感兴趣的:(51822内部retention register)