Поэма в двух частях ч первая H
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

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

Отправлено #1064;#1090;#1091;#1096;#1072;-#1050;#1091;#1090;#1091;#1096;#1072; 01 апреля 2004 г. 12:20
В ответ на: А есть где-нибудь примеры С кода для работы AVR с атмеловским флэшем at45dbXXX отправлено DMB 01 апреля 2004 г. 11:42

#ifndef SPIMEMIO_H
#define SPIMEMIO_H

#define max_bytes 264

__no_init unsigned int buffer_addr;
__no_init unsigned int page_addr;
__no_init unsigned char count_buffer;


unsigned char spi(unsigned char data);
void csh(void);
void csl(void);

void wait_mem_ready(void);

void mem_to_buffer(void);
void buffer_to_mem(void);

void init_series_read(void);

void init_buf_write(void);

void clr_block(unsigned int StartPage,unsigned int n);

char read_str(char* str, unsigned char n);
char write_str(char* str, unsigned char n);


/* Инициализация процедуры последовательного чтения */
#define InitSeriesRead(PageAddr) \
page_addr=PageAddr;\
buffer_addr=0;\
init_series_read()

/* Чтение данных */
#define SeriesRead() spi(0)

/*Окончание процедуры последовательного чтения*/
#define EndSeriesRead() csh()

/*

Пример:

InitSeriesRead(0x10);
while(....){
.........
data = SeriesRead();
.........
}
EndSeriesRead();
*/


/*инициялизация процедуры последовательной записи*/
#define InitSeriesWrite(PageAddr)\
page_addr=PageAddr;\
buffer_addr=0;\
init_buf_write()

/* Запись данных */
void SeriesWrite(char data);

/*Окончание последовательного чтения*/
#define EndSeriesWrite()\
csh();\
if(buffer_addr)buffer_to_mem();

/*
Примечание: При выполнении операции последовательной записи
все данные на стр на которые производися запись
будут поврежены!!!!

Пример:

InitSeriesWrite(0x10);
while(...){
.......
SeriesWrite(data);
.......
}
EndSeriesWrite()

*/

void SeriesStrWrite(char* str,unsigned char n);

/*
Примечание: При выполнении операции последовательной записи
все данные на стр на которые производися запись
будут поврежены!!!!

Пример:

typedef struct{
unsigned char flag;
unsigned long IdCod;
unsigned int OLim
unsigned int ILim;
char str1[15];
char str2[7];
}DData;
DData d_data;

InitSeriesWrite(0x10);
while(....){
......
SerieStrWrite((char*)&d_data,sizeof(DData))
......
}
EndSeriesWrite();


*/

void SeriesStrRead(char* str, unsigned char n);

/*
Пример:

InitSeriesRead(0x10);
while(....){
......
SerieStrRead((char*)&d_data,sizeof(DData))
......
}
EndSeriesRead();
*/

/****************************************************************/
/*
Запись массива данных
PageAddr - Адрес страницы
BufferAddr - Адрес на странице
n - кол-во байт

*/
#define WriteStr(str,PageAddr,BufferAddr,n)\
page_addr = PageAddr;\
buffer_addr = BufferAddr;\
write_str(str, n)

#define WriteNextStr(str,n)\
write_str(str, n)

/*
Прим: Кроме перезаписываемых, другие данные НЕ повреждаются!
Пример:


WriteStr((char*)&d_data, DStartPage,0,sizeof(DData));
while(...){
.....
WriteNextStr((char*)&d_data, sizeof(DData));
.....
}
*/

/*******************************************************************/

#define ReadStr(str, PageAddr, BufferAddr,n)\
page_addr = PageAddr;\
buffer_addr = BufferAddr;\
read_str(str, n)

#define ReadNextStr(str,n)\
read_str(str, n)

/*
Пример:

ReadStr((char*)&d_data, DStartPage,0,sizeof(DData));
while(...){
.....
ReadNextStr((char*)&d_data, sizeof(DData));
.....
}

*/

#endif

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

Ответы



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

E-mail: info@telesys.ru