[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
Мне необходимо писать в 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