Делаю для себя, микроконтроллер mega128, внешняя памятьFL25L256, соединены по SPI, программирую в CodeVision
Код:
|
#include ‹mega128.h›
#include ‹stdio.h›
#include ‹spi.h›
#include ‹delay.h›
#define WREN 0x06 //Set Write Enable Latch
#define WRDI 0x04 //Write Disable
#define RDSR 0x05 //Read Status Register
#define WRSR 0x01 //Write Status Register
#define READ 0x03 //Read Memory Data
#define WRITE 0x02 //Write Memory Data
#define Ready 1;
#define SPIF 0x80 //Флаг прерывания по SPI
#define Zapis 80 //размер строки
#define Dop 30 // смещение
char Zap[128] //запись из памяти
char nmbzap=0; //количество записей в памяти
char TOP_ADDR=256;
unsigned char temp = 0x80;
// SPI interrupt service routine
interrupt [SPI_STC] void spi_isr(void)
{
unsigned char data;
data=SPDR;
}
/* проверка занятости интерфейса SPI*/
char ReadySPI(void)
{
return (SPSR››7); // 1 - ready
}
/* чтение из памяти одного или нескольких байт */
/* Чтение записи*/
char ReadSPI(int address)
{
if ((address) ‹= TOP_ADDR)
{
if (SPSR & temp) // проверка занятости интерфейса SPI
{
SPCR = 0x00; //запрет прерывания по SPI
SPDR = READ; //передать оп-код READ
return SPDR;
}
}
}
/* Запись */
char WriteSPI(int mesto, char Dzap)
{
if (start_add ‹= TOP_ADDR)
{
if (SPSR & temp) // проверка занятости интерфейса SPI
{
SPDR = WREN; // оп-код подготовки записи
SPDR = WRITE; // оп-код записи
SPAR = nmbzap*Zapis+Dop; // адрес (номер записи, усмноженный на размер записи + смещение)
SPDR = Dzap; // данные
nmbzap++; // счетчик записей в памяти
}
}
}
/*передача данных из памяти дальше*/
if ( 1==1 ) //если есть коннект
{
if (nmbzap!=0) //есть записи в памяти?
{
for(i=0; i‹nmbzap; i++) // считываем сохраненные записи из памяти
{
Zap[i] = ReadSPI(i*Zapis+Dop); // i-я строка из памяти
}
nmbzap=0;
}
}
/******************************/ |
вот пример моего кода, объясните, что я делаю не так.
я никак не могу понять как правильно выставлять адрес для заполнения памяти, а также как правильно организовать счетчик записи нескольких строк в память (т.е. я на каком-то этапе делаю несколько записей (строки по 80 символов) в память, считаю сколько строк я записал, а затем по какой-то команде мне нужно считать эти строки из памяти). Ну вот как мне это сделать?????
Используй кнопку code в следующий раз.
dosikus