[an error occurred while processing this directive]
А вот моя функция.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

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

Отправлено rezident 03 августа 2006 г. 19:37
В ответ на: что-то типа [+] отправлено MegaJohn-home 03 августа 2006 г. 19:31


//================================================
// Чтение из DataFlash произвольного количества
// байт данных с произвольного адреса
//------------------------------------------------
//аргументы: указатель на структуру данных DataFlash,
// указатель на буфер приемника данных,
// стартовый адрес в DataFlash,
// количество читаемых байт
//возвращает:количество прочитанных байт
//================================================
xWord at45RndRead(st_at45_Data *pntr, xByte *pdst, xLong startAddr, xWord size)
{
xWord byteCntr=0; //счетчик считанных байт
xWord pageAddr, byteAddr;
if((startAddr+(xLong)size)>pntr->maxMemSize) //урежем кол-во запрошенных
{ size=(xWord)(pntr->maxMemSize-startAddr); //до реального размера
} //DataFlash
if (size==0) return (0); //нет размера - нет записи
pageAddr=(xWord)(startAddr/(xLong)pntr->maxBufSize);//получим номер страницы
byteAddr=(xWord)(startAddr%(xLong)pntr->maxBufSize);//номер байта в странице
xWord tmp=(pntr->maxBufSize)>>8; //выделим второй байт
while (tmp)
{ pageAddr<<=1; //выровняем номер страницы
tmp>>=1;
}
pageAddr+=(byteAddr>>8); //добавим второй байт
//----- проверяем готовность DataFlash ---------
at45WaitReady(pntr); //ждем готовности DataFlash
DelayAccess(); //задержка между обращениями
//----- чтение основной памяти DataFlash -------
SET_CS_DATAFLASH; //установим CS для DataFlash
txrxByteSpi(at45_ContArrayRead1, pntr->num); //передаем номер команды
txrxByteSpi((xByte)(pageAddr>>8), pntr->num); //передаем старший байт номера
//страницы
txrxByteSpi((xByte)pageAddr, pntr->num); //передаем младший байт номера
//страницы и старший бит
//номера байта
txrxByteSpi((xByte)byteAddr, pntr->num); //передаем младший байт номера
//байта
txrxByteSpi(0, pntr->num); //формальная передача
txrxByteSpi(0, pntr->num); //формальная передача
txrxByteSpi(0, pntr->num); //формальная передача
txrxByteSpi(0, pntr->num); //формальная передача
while (byteCntr { *pdst++=txrxByteSpi(0, pntr->num); //приемника данных в
byteCntr++; //соответствии с заданным
} //количеством
RESET_CS_DATAFLASH; //сбросим CS для DataFlash
return(byteCntr);
}

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

Ответы


Отправка ответа
Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 
URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание