Skip to content
Snippets Groups Projects
Unverified Commit 3995fd87 authored by Dylan Laduranty's avatar Dylan Laduranty Committed by GitHub
Browse files

Merge pull request #10880 from fedepell/sam0_write_intflag

sam0 flashpage: wait for READY bit in INTFLAG after write command
parents 72df5b23 318f0cf6
No related branches found
No related tags found
No related merge requests found
......@@ -41,6 +41,16 @@
#define _NVMCTRL NVMCTRL
#endif
static inline void wait_nvm_is_ready(void) __attribute__((always_inline));
static inline void wait_nvm_is_ready(void)
{
#ifdef CPU_SAML1X
while (!_NVMCTRL->STATUS.bit.READY) {}
#else
while (!_NVMCTRL->INTFLAG.bit.READY) {}
#endif
}
static void _unlock(void)
{
/* remove peripheral access lock for the NVMCTRL peripheral */
......@@ -89,11 +99,12 @@ void flashpage_write_raw(void *target_addr, const void *data, size_t len)
_unlock();
_NVMCTRL->CTRLA.reg = (NVMCTRL_CTRLA_CMDEX_KEY | NVMCTRL_CTRLA_CMD_PBC);
wait_nvm_is_ready();
for (unsigned i = 0; i < len; i++) {
*dst++ = *data_addr++;
}
_NVMCTRL->CTRLA.reg = (NVMCTRL_CTRLA_CMDEX_KEY | NVMCTRL_CTRLA_CMD_WP);
wait_nvm_is_ready();
_lock();
}
......@@ -112,11 +123,7 @@ void flashpage_write(int page, const void *data)
_NVMCTRL->ADDR.reg = (((uint32_t)page_addr) >> 1);
#endif
_NVMCTRL->CTRLA.reg = (NVMCTRL_CTRLA_CMDEX_KEY | NVMCTRL_CTRLA_CMD_ER);
#ifdef CPU_SAML1X
while(!_NVMCTRL->STATUS.bit.READY) {}
#else
while (!_NVMCTRL->INTFLAG.bit.READY) {}
#endif
wait_nvm_is_ready();
_lock();
/* write data to page */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment