|
30 | 30 |
|
31 | 31 | /* Clock + RAM voltage settings */ |
32 | 32 | #include "fsl_clock.h" |
33 | | -//#include "fsl_spc.h" |
34 | 33 |
|
35 | 34 | /* Flash driver */ |
36 | 35 | #include "fsl_device_registers.h" |
@@ -87,24 +86,25 @@ int RAMFUNCTION hal_flash_write(uint32_t address, const uint8_t *data, int len) |
87 | 86 | { |
88 | 87 | int ret; |
89 | 88 | int w = 0; |
| 89 | + const uint32_t flash_word_size = 16; |
90 | 90 | const uint32_t empty_qword[4] = { |
91 | 91 | 0xFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF |
92 | 92 | }; |
93 | 93 |
|
94 | 94 | while (len > 0) { |
95 | | - if ((len < 16) || (address & 0x0F)) { |
| 95 | + if ((len < (int)flash_word_size) || (address & (flash_word_size - 1))) { |
96 | 96 | uint32_t aligned_qword[4]; |
97 | | - uint32_t address_align = address - (address & 0x0F); |
| 97 | + uint32_t address_align = address - (address & (flash_word_size - 1)); |
98 | 98 | uint32_t start_off = address - address_align; |
99 | | - int i; |
| 99 | + uint32_t i; |
100 | 100 |
|
101 | | - memcpy(aligned_qword, (void*)address_align, 16); |
102 | | - for (i = start_off; ((i < 16) && (i < len + (int)start_off)); i++) { |
| 101 | + memcpy(aligned_qword, (void*)address_align, flash_word_size); |
| 102 | + for (i = start_off; ((i < flash_word_size) && (i < len + start_off)); i++) { |
103 | 103 | ((uint8_t *)aligned_qword)[i] = data[w++]; |
104 | 104 | } |
105 | | - if (memcmp(aligned_qword, empty_qword, 16) != 0) { |
| 105 | + if (memcmp(aligned_qword, empty_qword, flash_word_size) != 0) { |
106 | 106 | ret = FLASH_Program(&pflash, FLASH, address_align, aligned_qword, |
107 | | - 16); |
| 107 | + flash_word_size); |
108 | 108 | if (ret != kStatus_Success) |
109 | 109 | return -1; |
110 | 110 | } |
|
0 commit comments