Погляди, может поможет...
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

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

Отправлено Al Volovich 30 июля 2004 г. 10:16
В ответ на: Вопрос по существу, AT45DBxxx (+) отправлено Котик 30 июля 2004 г. 09:55

//Keil C51 для AT45DB161
#define ReadStat 0x57 //чтение статуса
#define ToBuf1 0x84 //Запись данных в буфер
#define WrBuf1 0x83 //запись буфера 1 во флэш
#define ReadMem 0x52 //чтение флэш
#define SeqRead 0x68 //последовательное чтение из флэш
#define AutoRewrite 0x58 //перезапись флэш


void StartAT45D(void) //настраивает SPI и включает флэш
{
SPCON = 0x7D; //01111101 CPOL=CPHA=1, SCK=Fosc/4, SSDIS = 1;
FlashCS = 0; //Включаем флэш
}

void StopAT45D(void) //выключает флэш и SPI
{
FlashCS = 1; //выключаем флэш
SPCON &= (SPE_^0xFF); //выключаем SPI
}


ubyte ReadAT45DStat(void) //возвращает байт статуса флэш
{
ubyte uuu;
StartAT45D();
SendToSPI(ReadStat);
uuu = GetFromSPI();
StopAT45D();
return uuu;
}

void StartRdMemAT45D(uword pagenum)
//инициализирует чтение флэш начиная с байта 0 страницы pagenum
{
StartAT45D();
pagenum <<=2; //формируем адрес
SendToSPI(ReadMem); //посылаем команду
SendToSPI(HighByte(pagenum)); //адрес
SendToSPI(pagenum);
SendNullToSPI(); //добираем до 64 бит в посылке
SendNullToSPI();
SendNullToSPI();
SendNullToSPI();
SendNullToSPI();
}

void StartContRdMemAT45D(uword pagenum)
//инициализирует непрерывное чтение флэш начиная с байта 0 страницы pagenum
{
StartAT45D();
pagenum <<=2; //формируем адрес
SendToSPI(SeqRead); //посылаем команду
SendToSPI(HighByte(pagenum)); //адрес
SendToSPI(pagenum);
SendNullToSPI(); //добираем до 64 бит в посылке
SendNullToSPI();
SendNullToSPI();
SendNullToSPI();
SendNullToSPI();
}

void StartWrBuf1AT45D(uword bytenum)
//инициализирует запись в буфер 1 начиная с байта bytenum
{
StartAT45D();
SendToSPI(ToBuf1); //посылаем команду
SendNullToSPI();
SendToSPI(HighByte(bytenum)); //адрес
SendToSPI(LowByte(bytenum));
}

void Buf1toMemAT45D(uword pagenum)
//запись содержимого Buffer 1 в страницу pagenum флэш c build-in erase
{
StartAT45D();
pagenum <<=2;
SendToSPI(WrBuf1); //посылаем команду
SendToSPI(HighByte(pagenum)); //адрес
SendToSPI(LowByte(pagenum));
SendNullToSPI(); //добираем до 32 бит в посылке
StopAT45D();
}


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

Ответы



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

E-mail: info@telesys.ru