Супер!
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

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

Отправлено Ирина 01 июля 2003 г. 15:48
В ответ на: Тогда проще "код в студию", разберемся отправлено BLACKEAGLE 01 июля 2003 г. 15:42

//Подключен на стандартный SPI, порт B CS - бит4.
#define DF_CHIP_SELECT 0x10
extern unsigned int buffer_counter;
unsigned char temp = 0x80;

unsigned char sta_flash(void)
{ unsigned char read_SPI;
PORTB &= ~DF_CHIP_SELECT; // enable DataFlash
SPDR = 0x57;
while (!(SPSR & temp)); // wait for data transfer to be completed
SPDR = 0xff;
while (!(SPSR & temp)); // wait for data transfer to be completed
read_SPI=SPDR;
PORTB |= DF_CHIP_SELECT; // disable DataFlash
return read_SPI;
}
void setup(void)
{
DDRB=0xf7;
SPCR=0x5c;
}
void write_buf(unsigned char flash_data)
{

PORTB &= ~DF_CHIP_SELECT; // enable DataFlash
SPDR = 0x84;
while (!(SPSR & temp)); // wait for data transfer to be completed

SPDR = 0x00; // don’t cares
while (!(SPSR & temp)); // wait for data transfer to be completed

SPDR = 0x00; // don’t cares
while (!(SPSR & temp)); // wait for data transfer to be completed

//SPDR = (char)(buffer_counter>>8);// don’t cares plus first two bits
// of buffer address
//while (!(SPSR & temp)); // wait for data transfer to be completed

SPDR = (char)buffer_counter; // buffer address (max. 2^8 = 256 pages)
while (!(SPSR & temp)); // wait for data transfer to be completed

SPDR = flash_data; // write data into SPI Data Register
while (!(SPSR & temp)); // wait for data transfer to be completed

PORTB |= DF_CHIP_SELECT; // disable DataFlash

buffer_counter++;
if(buffer_counter>264) buffer_counter=0;
}
void read_buf(void)
{
// until active buffer not empty read active buffer to speaker
unsigned int buffer_counter = 0;
PORTB &= ~DF_CHIP_SELECT; // enable DataFlash
SPDR = 0x56; // read from buffer1 56
while (!(SPSR & temp)); // wait for data transfer to be completed
SPDR = 0x00; // write don’t care byte
while (!(SPSR & temp)); // wait for data transfer to be completed
SPDR = 0x00; // write don’t care byte
while (!(SPSR & temp)); // wait for data transfer to be completed
SPDR = 0x00; // start at buffer address 0
while (!(SPSR & temp)); // wait for data transfer to be completed
SPDR = 0x00; // write don’t care byte
while (!(SPSR & temp)); // wait for data transfer to be completed
while (buffer_counter < 264)
{
SPDR = 0xFF; // write dummy value to start register shift
while (!(SPSR & temp)); // wait for data transfer to be completed
//0while(wait); // wait for timer1 overflow interrupt
dest1[buffer_counter]= SPDR; // play data from shift register
//wait = 1; // clear the signal flag
buffer_counter++;
}
PORTB |= DF_CHIP_SELECT; // disable DataFlash
}
void read_page ( unsigned int page_counter)
{
PORTB &= ~DF_CHIP_SELECT; // enable DataFlash
SPDR =0x55; // transfer next page to buffer2
while (!(SPSR & temp)); // wait for data transfer to be completed
SPDR = (unsigned char)(page_counter >> 7);//6
while (!(SPSR & temp)); // wait for data transfer to be completed
SPDR = (unsigned char)(page_counter<<1); //<<2
while (!(SPSR & temp)); // wait for data transfer to be completed
SPDR = 0x00; // write don’t care byte
while (!(SPSR & temp)); // wait for data transfer to be completed
PORTB |= DF_CHIP_SELECT; // disable DataFlash and start transaction
}

void write_page ( unsigned int page_counter)
{
PORTB &= ~DF_CHIP_SELECT;// enable DataFlash
SPDR = 0x83;// write data from
//buffer1 to page
while (!(SPSR & temp)); // wait for data transfer to be completed
SPDR = (unsigned char)(page_counter>>7); //6
while (!(SPSR & temp));// wait for data transfer to be completed
SPDR = (unsigned char)(page_counter<<1); //<<2
while (!(SPSR & temp)); // wait for data transfer to be completed
SPDR = 0x00; // don’t cares
while (!(SPSR & temp)); // wait for data transfer to be completed
PORTB |= DF_CHIP_SELECT;// disable DataFlash
}

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

Ответы



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

E-mail: info@telesys.ru