diff options
| author | JF <jf@codingfield.com> | 2020-06-07 12:17:45 (GMT) |
|---|---|---|
| committer | Gitea <gitea@fake.local> | 2020-06-07 12:17:45 (GMT) |
| commit | a0e73f5c1a1e652aa6270b7e42a73aee3d12ded6 (patch) | |
| tree | 6205dfb543bb22245d39a2f6e44d2c26cb381c10 /src/drivers/InternalFlash.cpp | |
| parent | 8a94750e30399bfb204cbec59a769d9d1b6b5baa (diff) | |
| parent | dbdb26ae1fa45cec88f1b9ea0353b3d0a3c39f56 (diff) | |
Merge branch 'develop' of JF/PineTime into master
Diffstat (limited to 'src/drivers/InternalFlash.cpp')
| -rw-r--r-- | src/drivers/InternalFlash.cpp | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/drivers/InternalFlash.cpp b/src/drivers/InternalFlash.cpp new file mode 100644 index 0000000..bc89ff1 --- /dev/null +++ b/src/drivers/InternalFlash.cpp @@ -0,0 +1,39 @@ +#include <sdk/modules/nrfx/mdk/nrf.h> +#include "InternalFlash.h" +using namespace Pinetime::Drivers; + +void InternalFlash::ErasePage(uint32_t address) { + // Enable erase. + NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Een; + __ISB(); + __DSB(); + + // Erase the page + NRF_NVMC->ERASEPAGE = address; + Wait(); + + // Disable erase + NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Ren; + __ISB(); + __DSB(); +} + +void InternalFlash::WriteWord(uint32_t address, uint32_t value) { + // Enable write. + NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Wen; + __ISB(); + __DSB(); + + // Write word + *(uint32_t*)address = value; + Wait(); + + // Disable write + NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Ren; + __ISB(); + __DSB(); +} + +void InternalFlash::Wait() { + while (NRF_NVMC->READY == NVMC_READY_READY_Busy) {;} +} |
