ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
28 ноября
199888
John (01.07.2010 10:34, просмотров: 4600)
Все еще остался вопрос по поводу сохранения данных во флеш(питание не постоянно) Вот что я понаписал: [CODE] __no_init volatile int T0 @ 0x01002; __no_init volatile char acknowledge @ 0x01006; void init_flash_controler(void) { FCTL1 = (0xA5<<8) | //ïàðîëü äëÿ çàïèñè (BLKWRT * 0) | //ðàçðåøåíèå çàïèñè (WRT * 0) | //ðåæèì íå âûáðàí (EEIEX * 1) | //ðàçðåøåíèÿ àâàðèéíîãî âûõîäà (EEI * 0) | //çàïðåò ïðåðûâàíèÿ ñòèðàíèÿ ôëåø (MERAS * 0) | // (ERASE * 0); // FCTL2 = (0xA5<<8) | //ïàðîëü äëÿ çàïèñè (FSSEL0 * 1) | //äåëèòåëü äëÿ òàêòîâàíèÿ êîíòðîëëåðà ôëåø ~257 - ~476 êÃö CPU_FREQ/400 kHz (DIV_FOR_FLASH); // FCTL3 = (0xA5<<8) | //ïàðîëü äëÿ çàïèñè (LOCKA * 0) | //áëîêèðîâêó Segment A íå ìåíÿåì (LOCK * 1); //çàáëîêèðîâàíà âñÿ ôëåø IE1 &= ~ACCVIE; //áåç ïðåðûâàíèÿ ïî íàðóøåíèþ óñëîâèÿ äîñòóïà ê ôëåø //if( FCTL3 & LOCKA) //FCTL3 |= (0xA5<<8) | (LOCKA * 1); } void erase_write_flash_data(unsigned int data, char ack) { WDTCTL=WDTPW | WDTHOLD; FCTL1 |= (0xA5<<8)|(ERASE*1)|(EEIEX * 1)|(EEI * 0); //óñëîâèÿ äëÿ ñòèðàíèÿ - óñòàíîâêà ðåæèìà ñòèðàíèÿ îäíîãî ñåãìåíòà FCTL3 |= (0xA5<<8)|(LOCK*0); //è ñíÿòèå áëîêèðîâêè if(FCTL3 & LOCKA) FCTL3 |= (0xA5<<8)|(LOCKA); //T0=0; //ñòèðàíèå íóæíûõ ÿ÷ååê (- CLR ñèììóëèðóåòñÿ MOV 0, dst) acknowledge = 0 ; //dummy write while(FCTL3 & BUSY) _NOP(); FCTL1 = (0xA5<<8)|(WRT * 1)|(EEIEX * 1)|(EEI * 0); //ðåæèì çàïèñè //T0 = data; // acknowledge = 0;//çàïèñûâàåì ïåðèîä(data) acknowledge = ack; while(FCTL3 & BUSY) _NOP(); //è ïîäòâåðæäåíèå FCTL1 = (0xA5<<8)|(EEIEX * 1)|(EEI * 0); //ðåæèì íå âûáðàí FCTL3 = (0xA5<<8)|(LOCK); //óñòàíàâëèâàåì áëîêèðîêó // FCTL1 = (0xA5<<8)|(WRT * 1)|(EEIEX * 1)|(EEI * 0); //ðåæèì çàïèñè // acknowledge = ack; //è ïîäòâåðæäåíèå // FCTL1 = (0xA5<<8)|(EEIEX * 1)|(EEI * 0); //ðåæèì íå âûáðàí // FCTL3 = (0xA5<<8)|(LOCK); //óñòàíàâëèâàåì áëîêèðîâêó if(!(FCTL3 & LOCKA)) FCTL3 |= (0xA5<<8)|(LOCKA); VD_PORT &= ~VD_BIT; __delay_cycles(0.5*CPU_FREQ); VD_PORT |= VD_BIT; } [/CODE]