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

 
 
> I2S Slave Прием - хелп!, Глючит
Allregia
сообщение Mar 4 2013, 16:26
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Работал с I2S-мастером, что прием что передача в 16 битах - никаких проблем небыло.
Сейчас пробую прием слейвом 24-2 бита, не могу понять где глюки.

I2S3 - мастер-передатчик, с него подаю прямо на I2S2 - слейв-приемник.
Передаю одно и то-же число в каждом канале, 32 бита, 48кгц., передатик тактируется внешним клоком.
Контролирую осциллографом шину - там все идеально, числа соответствуют.
Приемник считывает в 2 переменые - и там числа не совпадают с переданными.
Причем клик на ресет - и там уже другие числа.

Инициализация приемника такая:
CODE

void InitI2S2(void){ // slave receiver

I2S_InitTypeDef I2S2_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
u32 d;

RCC_I2SCLKConfig(RCC_I2S2CLKSource_Ext);
/* Enable the I2S peripheral clock */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);

// GPIO
GPIO_PinAFConfig(GPIOB,GPIO_PinSource12, GPIO_AF_SPI2); // WCLK
GPIO_PinAFConfig(GPIOB,GPIO_PinSource13, GPIO_AF_SPI2); // BCLK
GPIO_PinAFConfig(GPIOB,GPIO_PinSource15, GPIO_AF_SPI2); // SDATA

GPIO_StructInit(&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_15; // WCLK, BCLK, SDATA
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;

GPIO_Init(GPIOB, &GPIO_InitStructure);

//------------------------------------------------------------------------
I2S_StructInit(&I2S2_InitStructure);
I2S2_InitStructure.I2S_AudioFreq =I2S_AudioFreq_Default;
I2S2_InitStructure.I2S_Standard = I2S_Standard_MSB;
I2S2_InitStructure.I2S_DataFormat = I2S_DataFormat_32b;
I2S2_InitStructure.I2S_CPOL = I2S_CPOL_Low;
I2S2_InitStructure.I2S_Mode = I2S_Mode_SlaveRx;
I2S2_InitStructure.I2S_MCLKOutput = I2S_MCLKOutput_Disable;

I2S_Init(SPI2, &I2S2_InitStructure);
// -------------- interrupt:
NVIC_InitStructure.NVIC_IRQChannel = SPI2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = I2SInputPriority;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = I2SInputSubPriority;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

while( (GPIOB->IDR & GPIO_Pin_12) 0= 0 ); // wait for WCLK=1
while( (GPIOB->IDR & GPIO_Pin_12) != 0 );// wait for WCLK=0

d=(uint32_t)SPI3->DR; // to clear RXNE bit if was
d=(uint32_t)SPI3->SR; // to clear flags, if were

SPI_I2S_ITConfig(SPI2,SPI_I2S_IT_RXNE,ENABLE); // enable interrupt

I2S_Cmd(SPI2, ENABLE); // enable I2S2
}


прием по прерыванию делаю так:
Код
volatile u16 LDataRcvL, LDataRcvH, RDataRcvL, RDataRcvH; // сюда считываю
    
void SPI2_IRQHandler(void){
     static u32 chan, sequence;
    
        chan = (SPI2->SR & I2S_FLAG_CHSIDE);               // read CHSIDE = 0 for LEFT, 1 for RIGHT
        InpData=SPI2->DR;//SPI_I2S_ReceiveData(SPI2);   //  read reveived data
        sequence <<= 1;              // bit1 = old
        sequence &= 0x2;             // leave only bit1 = old chan value
        if (chan)  sequence |=1;   //  bit0 = new chan value
        //---------------------------------------------------------
        switch (sequence){
             case 0:  LDataRcvL = InpData; break;    // Left Low
             case 2:  LDataRcvH = InpData; break;    // Left High
             case 1:  RDataRcvH = InpData; break;   //  Right High
             case 3:  RDataRcvL = InpData; break;   //  Right Low,  End Of 2 channel receiving
       }
  }


Помогите пожалуйста, понять в чем дело. Второй день бьюсь, что я делаю не так?
Чувствую что где-то какая-то детская ошибка, понять бы где...

Сообщение отредактировал IgorKossak - Mar 6 2013, 07:30
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Allregia
сообщение Mar 4 2013, 19:28
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Кстати, я еше не пойму важно ли в каком порядке считывать статус (SR) и данные (DR) ?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Allregia   I2S Slave Прием - хелп!   Mar 4 2013, 16:26
- - drum1987   в прерывании sequence изначально чему равно? если ...   Mar 4 2013, 17:14
|- - Allregia   Цитата(drum1987 @ Mar 4 2013, 19:14) в пр...   Mar 4 2013, 18:37
- - drum1987   сори не заметил строку sequence |=1;   Mar 4 2013, 19:07
- - drum1987   Попробуйте в прерывании еще проверять флаг RXNE......   Mar 5 2013, 05:17
- - Allregia   Попробую, хотя - другие источники преывания коме R...   Mar 5 2013, 06:10
- - Allregia   Что-то страннно, сделал перекомпиляцию всей програ...   Mar 5 2013, 21:31
- - Allregia   Пришлось в конце прерывания поставить __ISB(); с...   Mar 6 2013, 14:29
|- - aaarrr   Цитата(Allregia @ Mar 6 2013, 18:29) с ни...   Mar 6 2013, 14:58
|- - Allregia   Цитата(aaarrr @ Mar 6 2013, 16:58) И охот...   Mar 6 2013, 22:47
|- - aaarrr   Цитата(Allregia @ Mar 7 2013, 02:47) И эт...   Mar 6 2013, 23:11
|- - Allregia   Цитата(aaarrr @ Mar 7 2013, 01:11) Нет, п...   Mar 7 2013, 06:01
- - Allregia   Что-то у меня не получается I2S3 Master in DMA зап...   Mar 7 2013, 09:45
- - Allregia   Но обнаружил другую проблему - случайно проинитил ...   Mar 7 2013, 11:25
- - Allregia   В общем, сделал я и передачу и прием по DMA. Проце...   Mar 9 2013, 17:13
|- - aaarrr   Цитата(Allregia @ Mar 9 2013, 21:13) На 4...   Mar 9 2013, 19:28
|- - Allregia   Цитата(aaarrr @ Mar 9 2013, 21:28) Ну, мо...   Mar 9 2013, 22:46
|- - Uuftc   Цитата(Allregia @ Mar 10 2013, 02:46) В д...   Mar 12 2013, 01:46
|- - Allregia   Цитата(Uuftc @ Mar 12 2013, 03:46) Там на...   Mar 12 2013, 08:53
- - Allregia   Только что звонил приятель, который параллельно со...   Mar 10 2013, 14:11


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

 


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


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