[an error occurred while processing this directive] [an error occurred while processing this directive]
Помогите! SPI EEPROM AT25256 + AT90S8515 = больная голова
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Andy Дюх 19 января 2002 г. 17:46

Мне необходимо писать в AT25256 небольшие куски данных по разным адресам.
первая посылка проходит замечательно - по любому адресу, следующие не записаваются

постараюсь приевести програмку

#define SetupSPI_e SPCR=0x5C; ClrBit(PORTB,BitRom); SetBit(PORTB,CST);

//инициализация управляющего регистра SPI для часов

#define SetupSPI_c SPCR=0xfd; SetBit(PORTB,BitRom); ClrBit(PORTB,CST);

//установка записи часов

#define SetWriteClok ClrBit(PORTB,WRT);

//установка чтения часов

#define SetReadClok SetBit(PORTB,WRT);

#define MISO 6

//чтение данных из памяти

#define ReadSPI 3

//запись данных в память

#define WriteSPI 2

//запретить операции записи

#define WRDI 4

//разрешить операции записи

#define WREN 6

//чтение регистра статуса

#define RDSR 5

//запись регистра статуса

#define WRSR 1

//установить бит - отказ от выбора EEPROM

#define DeSelectRom SetBit(PORTB,BitRom);

//сбросить бит - выбор EEPROM

#define SelectRom ClrBit(PORTB,BitRom);

//функция записи в EEPROM AT25256 по интерфейсу SPI (0,0) или (1,1)

//AdresM - адрес начала записи в EEPROM

//znah - записываемое значение

void TestWrite(int AdresM,char znah)

{char CountByte;//количество записываемых байтов

char temp;//временная переменная

int Adres=AdresM; //используем локальну переменную

do {} while((SystemBegin&ClokOperation));//цикл ожидания освобождения шины SPI

SetupSPI_e;//установить параметры режима SPI и сбросить CS в Low, прерывание SPI запрещено

CountByte=2;

SelectRom;//здесь ничего но при записи серии устанавливает CS

for (temp=SPSR,SPDR=WREN;!(TestBit(SPSR,SPIF)););//разрешение записи

DeSelectRom;//установить CS

SelectRom;//сбросить CS в Low

for (temp=SPSR,SPDR=WriteSPI;!(TestBit(SPSR,SPIF)););//запись

for (SPDR=Hi(Adres);!(TestBit(SPSR,SPIF)););//адрес

for (SPDR=Lo(Adres);!(TestBit(SPSR,SPIF)););

do {

do{}while(!(TestBit(SPSR,SPIF)));//ожидание прерывания

SPDR=znah;//записать

}while (--CountByte);

do{}while(!(TestBit(SPSR,SPIF)));//ожидание прерывания

DeSelectRom;//установить CS

temp=SPDR;//прочитаь чтобы не было прерывания

SetupSPI_c;//активизировать ЧАСЫ, установить CS в Hi, разрешить прерывание SPI

}
уже сил нет а времени сколько угробил!

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

Ответы



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

E-mail: info@telesys.ru