101 const uint32_t *src = buf;
102 uint32_t flash_addr = (uint32_t)NVM_BASE + offset;
108 MSC_Status_TypeDef retVal = mscReturnOk;
110 if(size && (align = flash_addr & (FLASH_WORD_SIZE - 1))) {
111 len = MIN(FLASH_WORD_SIZE - align, size);
112 word = ~((*src & ((1 << (len << 3)) - 1)) << (align << 3));
114 retVal = MSC_WriteWord((uint32_t *)(flash_addr & ~(FLASH_WORD_SIZE - 1)),
115 &word, FLASH_WORD_SIZE);
117 if(retVal != mscReturnOk) {
120 *(
const uint8_t **)&src += len;
125 while(size >= FLASH_WORD_SIZE) {
127 for(i = 0; i < len / FLASH_WORD_SIZE; i++) {
128 page_buf[i] = ~*src++;
131 retVal = MSC_WriteWord((uint32_t *)flash_addr, page_buf, len);
133 if(retVal != mscReturnOk) {
141 word = ~(*src & ((1 << (size << 3)) - 1));
143 retVal = MSC_WriteWord((uint32_t *)flash_addr, &word, FLASH_WORD_SIZE);
145 if(retVal != mscReturnOk) {