ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
22 ноября
187802
Беня (02.04.2010 12:13, просмотров: 9234) blackbit
PIC24FJ64GA004 family - не получается запись во flash-память программы  Безуспешно пытаюсь на PIC24F записать информацию во flash память программы. У PIC24F нет EEPROM памяти , поэтому решил под хранение конфигурационных данных использовать flash память программы. Пишу на Си Микрочиповском. Объявил массив в ПЗУ, выравнял его по границе 512 на всякий случай : int __attribute__((space(prog),aligned(512))) dat[2048]; Смотрю в отладчике - в нем содержатся нули (по умолчанию инициализируется нулями). Решил начинать с малого - написАть процедуру очистки памяти (erasing). Еще я в отладчике подсмотрел, что адрес у этого массива 0x1A00 (решил явно использовать для начала). Решил команды на ассемблере написать, чтобы уж точно не ошибиться (тупо передрал последовательность команд с примера на ассемблере с документации) : // NVMCON = 0x4042 ; WREN=1, ERASE=1, Memory page erase operation asm volatile ("MOV #0x4042, W0"); asm volatile ("MOV W0, NVMCON"); asm volatile ("MOV #tblpage(#0x1A00), W0"); asm volatile ("MOV W0, TBLPAG");// Initialize PM Page Boundary SFR asm volatile ("MOV #tbloffset(#0x1A00), W0");// Initialize in-page EA //[15:0] pointer asm volatile ("TBLWTL W0, [W0]"); // Set base address of erase block asm volatile ("DISI #5");// Block all interrupts for next 5 //instructions asm volatile ("MOV #0x55, W0"); // Write the 55 key asm volatile ("MOV W0, NVMKEY"); asm volatile ("MOV #0xAA, W1"); // Write the AA key asm volatile ("MOV W1, NVMKEY"); asm volatile ("BSET NVMCON, #15"); // Start The erase sequence Nop() ; Nop() ; do ; while( NVMCONbits.WR) ; Затем смотрю в отладчике на свой массив dat[] (специально удаляю его из окна Watch и заново добавляю его, чтобы увидеть измененное значение) - как были там нули, так и остались, а по моему разумению после стирания там должны быть 0xFF. Вот никак не могу понять в чем же дело. Еще могла быть засада в словах конфигурации - в первом слове CW1 есть биты GCP (Code protection bit) и GWRP (Flash Write protction bit), но я объявил _CONFIG1(GCP_OFF & GWRP_OFF & FWDTEN_OFF) ; // - это значение 0x777F и указанные биты в 1, т. е. разрешают запись. Кто нибудь работал с PIC24FJ64GA004 family и смог записать во flash-память ?