Читай ! Дарю !
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено miv 28 мая 2004 г. 17:18
В ответ на: Ответ: ! отправлено pkfo 28 мая 2004 г. 17:06

Инклуд

#define WaitSPM() while(SPMCSR & (1 << SPMEN))
#define WaitEEPROM() while(EECR & (1 << EEWE))
#define WaitReady() while(SPMCSR & (1 << RWWSB))
#define _DoSpm(vol) while(SPMCSR & (1 << SPMEN)); SPMCSR = vol; asm("SPM");
#define ciflPageSizeB 256
#define ciflPageSizeW 128
void iflPageRead(unsigned char __farflash *address,unsigned int *buffer);
bool iflPageWrite(unsigned long address,unsigned int *buffer,int size) @ "BOOT_F";

Код на С
//--------------------------------------------------------//
// ??????? ??? ?????? ? ?????????? flash //
//--------------------------------------------------------//
bool iflPageWrite(unsigned long address,unsigned int *buffer,int sizeb) {
BYTE wsize,sreg,cntr;

if((sizeb % 2) != 0) return false;
wsize = sizeb / 2;
sreg = SREG;

__disable_interrupt();
// ???????
WaitSPM();
WaitEEPROM();
RAMPZ = 0;
if(address >= (1024L * 64L)) RAMPZ = 1;
_SPM_24_ERASE(address);
// ???????
for(cntr=0;cntr<128;cntr++) {
WaitSPM();
WaitEEPROM();
if(cntr < wsize) _SPM_24_FILLTEMP(cntr << 1,buffer[cntr]);
else _SPM_24_FILLTEMP(cntr << 1,0);
}

// ??????????
WaitSPM();
WaitEEPROM();
_SPM_24_PAGEWRITE(address);
// ????????? ?????? ?????????? ????????
WaitEEPROM();
_DoSpm((1 << RWWSRE) | (1 << SPMEN));
WaitReady();

SREG = sreg;
return true;
}
//--------------------------------------------------------//
void iflPageRead(unsigned char __farflash *address,unsigned int *buffer) {
// ?????? 256 ????
BYTE cntr = 0;
pBYTE dst = (pBYTE) buffer;
unsigned char __farflash *src = address;

do *dst++ = __extended_load_program_memory(src++);
while(++cntr != 0);
}

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru