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

 
 
> Чтение АЦП через I2S на lpc17xx, читаются одни нули!
kostyan
сообщение May 12 2012, 10:23
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 121
Регистрация: 8-11-05
Пользователь №: 10 577



Народ, спецы по I2S, подскажите как жить!

Пытаюсь сделать чтение из АЦП по I2S на LPC1788. Всякие настройки уже покрутил - в итоге есть "правильная" картинка на логическом анализаторе: все три сигнала есть SCK, WS, SD. Вродебы и код написан правильно - попадаю в прерывание. Но читаются почемуто одни только нули! Хотя на осцилограмме сигнал не нулевой и для "правого" и для "левого" канала. Даже чтение через ДМА вроде как прикрутил - в прерывание от окончания чтения попадаю, но опять же одни нули. Настраивал один только приемник, может с передатчиком чегото надо покрутить еще?

Вот код инициализации:

CODE

I2S_Init(LPC_I2S);

I2S_CFG_Type I2S_ConfigStruct;
I2S_ConfigStruct.wordwidth = I2S_WORDWIDTH_8;
I2S_ConfigStruct.mono = I2S_MONO;
I2S_ConfigStruct.stop = I2S_STOP_DISABLE;
I2S_ConfigStruct.reset = I2S_STOP_DISABLE;
I2S_ConfigStruct.ws_sel = I2S_MASTER_MODE;//I2S_MASTER_MODE;
I2S_ConfigStruct.mute = I2S_MUTE_DISABLE;
I2S_ConfigStruct.ws_halfperiod = 0;//32;//24 * 4;
I2S_Config(LPC_I2S, I2S_RX_MODE, &I2S_ConfigStruct);

I2S_MODEConf_Type I2S_ClkConfig;
I2S_ClkConfig.clksel = I2S_CLKSEL_FRDCLK;
I2S_ClkConfig.fpin = I2S_4PIN_DISABLE;
I2S_ClkConfig.mcena = I2S_MCLK_DISABLE;
I2S_ModeConfig(LPC_I2S, &I2S_ClkConfig, I2S_RX_MODE);

I2S_FreqConfig(LPC_I2S, SCLK_FREQUENCY_2560, I2S_RX_MODE);

I2S_Stop(LPC_I2S, I2S_RX_MODE);

IRQ_ConfigureIT(I2S_IRQn, 2);
IRQ_EnableIT(I2S_IRQn);

I2S_IRQConfig(LPC_I2S, I2S_RX_MODE, 1);
I2S_IRQCmd(LPC_I2S, I2S_RX_MODE, ENABLE);
I2S_Start(LPC_I2S);


Вот код прерывания (не ДМА, его пока отключил):
CODE

uint32_t RXLevel = 0;

//Check RX interrupt
if(LPC_I2S->STATE & 0x01)
{
RXLevel = I2S_GetLevel(LPC_I2S, I2S_RX_MODE);
if ((RXLevel != 0) && !I2SRXDone )
{
while ( RXLevel > 0 )
{
if (I2SReadLength == BUFFER_SIZE)
{
//Stop RX
//I2S_Stop(LPC_I2S, I2S_RX_MODE);
// Disable RX
//I2S_IRQCmd(LPC_I2S, I2S_RX_MODE, DISABLE);
I2SRXDone = 0;
I2SReadLength = 0;
break;
}
else
{
dummy = LPC_I2S->RXFIFO;
if (dummy != 0)
{
asm("nop");
}
I2SRXBuffer[I2SReadLength++] = dummy;
}
RXLevel--;
}
}
}
Go to the top of the page
 
+Quote Post



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

 


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


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