реклама на сайте
подробности

 
 
> atmega32 и vs1011.
Pentium02
сообщение Apr 1 2010, 01:58
Сообщение #1





Группа: Участник
Сообщений: 4
Регистрация: 5-07-09
Пользователь №: 50 937



Здравствуйте всем. Подключил vs1011 к atmega32 согласно даташиту, только помимо vs1011 на spi висит ещё и SD карта.
CS карты на PB4, CS vd1011 на PB3. Не особо понимаю зачем нужен BSYNC (висит на PB0), с английским не очень хорошо, читаю даташит как могу.
Кварца на 24.576 не нашёл, поставил на 24.000. Компилятор gcc-avr.

Код
void mmc_select()
{
    PORTB &= ~(1<<PB4);
}

void mmc_dselect()
{
    PORTB |= (1<<PB4);
}

void vs1011_select()
{
    PORTB &= ~(1<<PB3);
}

void vs1011_dselect()
{
    PORTB |= (1<<PB3);
}

void spi_write_byte(BYTE dat)
{
    SPDR=(dat);
    loop_until_bit_is_set(SPSR,SPIF);
}

void VS1011_data(BYTE data)
{
    spi_write_byte(data);
}

void VS1011_write(unsigned short adress, unsigned int data1)
{
    vs1011_select();
    loop_until_bit_is_set(PINB, PB1); //DREQ висит на PB1
    spi_write_byte(0x02);
    spi_write_byte(adress);
    spi_write_byte(data1 >> 8);
    spi_write_byte(data1);
    vs1011_dselect();
}

void VS1011_SetClock (unsigned int clock_khz, char doubler)
{
    clock_khz /= 2;
    if (doubler) clock_khz |= 0x8000;
    VS1011_write(0x03, clock_khz);
    _delay_us(2);
}

void VS1011_HardReset()
{
    PORTB &= ~(1 << PB2); //на PB2 висит xreset
    _delay_ms(1000);
    PORTB |= (1 << PB2);
    _delay_ms(10);
    return;
}
void VS1011_SoftReset()
{
    VS1011_write(0x00, 0x0204);
    _delay_ms(10);
}

void VS1011_init()
{
    VS1011_HardReset();
        VS1011_SetClock(24000, 0);
    VS1011_SoftReset();
}

void init()
{
    PORTB |= (1 << PB4);
    PORTB &= ~(1 << PB7);
    PORTB |=  (1 << PB5);
    PORTB &= ~(1 << PB6);
    DDRB |= (1 << PB7 );
    DDRB &= ~(1 << PB6);
    DDRB |= (1 << PB5); //
    DDRB |= (1 << PB4); //SD card CS
    DDRB |= (1 << PB3); //vs1011 xCS
    DDRB |= (1 << PB2); // xRESET
    DDRB &= ~(1 << PB1); //DREQ
    DDRB |= (1 << PB0);  // BSYNC
    PORTB &= ~(1 << PB0);
    SPCR = (1<<SPE)|(1<<MSTR);
    SPSR=0x00;
}

int main()
{
................
init();
VS1011_init();
................
    pf_open("/1.mp3");
    int cnt = 1;
    while (cnt != 0)
    {
        mmc_select();
        char buff[32];
        pf_read(buff, sizeof(buff), &cnt);
        mmc_dselect();
        vs1011_select();
        for (int i = 0; i < 32; i++)
        {
                    VS1011_data(buff[i]);
                }
        loop_until_bit_is_set(PINB, PB1);
        vs1011_dselect();
    }
................
};

Читаю 32 байта из файла в буфер, отсылаю vs1011, жду сигнала с DREQ (висит на PB1).
всё что я слышу в наушниках, это треск.
Микроконтроллеры начал изучать недавно. Чтение файла с карты происходит нормально, дело очевидно в работе с vs1011, никак не могу разобраться :-( прошу вашей помощи.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sonycman
сообщение Apr 1 2010, 08:09
Сообщение #2


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(Pentium02 @ Apr 1 2010, 05:58) *
Не особо понимаю зачем нужен BSYNC (висит на PB0), с английским не очень хорошо, читаю даташит как могу.

BSYNC это сигнал для синхронизации байт данных. Без его использования интерфейс в compatibility mode работать не будет.
В этом режиме используются пины декодера:
DCLK, SDATA, BSYNC - для записи данных для декодирования;
SCK, SI, SO - для записи\чтения комманд.

Вы же пытаетесь записать и данные и команды по одним и тем же пинам через SPI.

Проще выбрать режим интерфейса VS1002 Native Mode (New Mode) установив в регистре SCI_MODE биты SM_SDINEW и SM_SDISHARE.

Изучите внимательнее режимы интерфейса в даташите.

Цитата(Pentium02 @ Apr 1 2010, 05:58) *
Читаю 32 байта из файла в буфер, отсылаю vs1011, жду сигнала с DREQ (висит на PB1).

Лучше сначала дождитесь готовности декодера - ждите высокого уровня на DREQ, а уже потом передавайте данные.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 19:37
Рейтинг@Mail.ru


Страница сгенерированна за 0.01361 секунд с 7
ELECTRONIX ©2004-2016