ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
5 июля
151704
Dany (24.03.2009 09:42, просмотров: 6942)
PIC24FJ256 запись во Flash /*============================================================== Запись во внутреннюю Flash data word(16 bit) Пишет только Low word(0xFFXXXX) Вход: UINT32 addr - начальный адрес UINT16* u16_word - массив данных для записи UINT16 length - длина массива Возвращаемое значение: Нет ===============================================================*/ void FlashWriteDataWord(UINT32 addr, UINT16* u16_word, UINT16 length) { UINT16 i; DWORD_VAL _addr; _addr.Val = addr; NVMCON = 0x4003; //Perform WORD write next time WR gets set = 1. for(i = 0; i < length; i++) { TBLPAG = _addr.word.HW; __builtin_tblwtl(_addr.word.LW, u16_word[i]);//Write the low word to the latch asm("DISI #16"); //Disable interrupts for next few instructions for unlock sequence __builtin_write_NVM(); while(NVMCONbits.WR == 1); _addr.Val += 2; } } #define ADDR_START_DATA_FLASH 0x1ABF6L//0xABF6 //Отсюда начнем писать данные int main(void) { UINT16 i; UINT32 addr = ADDR_START_DATA_FLASH; for(i = 0; i < 32768; i++) { FlashWriteDataWord(addr,(UINT16 *)&i, 1); addr += 2; } while(1); return(0); } Дело в том, что если пишем, начиная, с 0xABF6 адреса, то записывается 32768 значения, как и надо, а вот если с 0x1ABF6L то записывается только 32261. Возникло непонимание, почему так происходит. С Flash только знакомлюсь, подскажите где искать ответ.