This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

sd API for GPREGRET2

How to access GPREGRET2 with sd API call?

thanks

jing

  • This is not exposed in any API call for any of the currently released SoftDevices, so I assume it will be added in the next release.

    In the mean time you could try accessing it directly.

    NRF_POWER->GPREGRET2 = 0xdeadbeef;
    
  • This is an unfortunate miss from our side, the s132 lacks API for setting the GPREGRET2 register. However, it is possible to workaround this by disabling the MWU when you want to access it:

     #define TEST_UNPROTECT_POWER \
    
    NRF_MWU->PREGION[0].SUBS &= ~(MWU_PREGION_SUBS_SR0_Include << MWU_PREGION_SUBS_SR0_Pos)
    
    #define TEST_REPROTECT_POWER \
    
     NRF_MWU->PREGION[0].SUBS |= (MWU_PREGION_SUBS_SR0_Include << MWU_PREGION_SUBS_SR0_Pos) 
    

    This has already been reported internally.

  • You can do this as well, but can only be done before the SD is enabled.

  • How do I clear it?

    Lets say I unprotect, then I want to write to it, then I reprotect it.

    Previously you have to write a mask of bits to clear and then the value.

    Is this just an abstraction on top of a standard R/W register? As I don't see any address that I'd write to it's mask to clear etc..

  • This is still locking up the NRF52 ......

        // TEST_UNPROTECT_POWER
    NRF_MWU->PREGION[0].SUBS &= ~(MWU_PREGION_SUBS_SR0_Include << MWU_PREGION_SUBS_SR0_Pos);
    
    // Update it
    NRF_POWER->GPREGRET2 = (value_to_write & 0xFF);
    
    // TEST_REPROTECT_POWER
    NRF_MWU->PREGION[0].SUBS |= (MWU_PREGION_SUBS_SR0_Include << MWU_PREGION_SUBS_SR0_Pos);
    

    If I comment out the Updating it line of code, no problem.

1 2 3 4