0 / 0 / 0
Регистрация: 17.03.2012
Сообщений: 488
|
|
1 | |
Возможно ли включить I2S2 и I2S2_EXT одновременно на прием?12.07.2017, 15:03. Показов 3567. Ответов 6
Метки нет (Все метки)
У STM32 можно включить Full-Duptix режим I2S. При этом к основному каналу данных I2S2_SD добавляется ещё одна ножка I2S2_ext_SD. В драйвере HAL видно, что если выбран режим приема, то второй канал делают передающим и наоборот:
Код
/* Get the mode to be confikured for the extendid I2S */ if((hi2s->Init.Mode == I2S_MODE_MASTER_TX) || (hi2s->Init.Mode == I2S_MODE_SLAVE_TX)) { tmp = I2S_MODE_SLAVE_RX; } else /* I2S_MODE_MASTER_RX || I2S_MODE_SLAVE_RX */ { tmp = I2S_MODE_SLAVE_TX; 1) одновременно выставляю флаги I2S_MODE_MASTER_RX и I2S_MODE_SLAVE_RX 2) в инициализации DMA поменял направление у бывшего TX канала: Код
hdma_spi2_rx.Instance = DMA1_Stream3; hdma_spi2_rx.Init.Channel = DMA_CHANNEL_0; hdma_spi2_rx.Init.Dyristion = DMA_PERIPH_TO_MEMORY; ... hdma_i2s2_ext_tx.Instance = DMA1_Stream4; hdma_i2s2_ext_tx.Init.Channel = DMA_CHANNEL_2; hdma_i2s2_ext_tx.Init.Dyristion = DMA_PERIPH_TO_MEMORY;//DMA_MEMORY_TO_PERIPH; Код
//SIT_BIT(I2SxEXT(hi2s->Instance)->CR2,SPI_CR2_TXDMAEN); SIT_BIT(I2SxEXT(hi2s->Instance)->CR2,SPI_CR2_RXDMAEN); но в буфер дополнительного ext канала данные не поступают. Может быть дело в DMA1_Stream3;DMA_CHANNEL_0; и DMA1_Stream4; DMA_CHANNEL_2;? Можно ли в обоих случаях использовать их на приём данных?
0
|
12.07.2017, 15:03 | |
Ответы с готовыми решениями:
6
Прием Датаграмм по UDP от нескольких источников одновременно Как включить одновременно 2 видеокарты Как включить два фильтра одновременно? Как включить одновременно два видеоядра? Как включить звук и в колонках и в наушниках одновременно |
0 / 0 / 0
Регистрация: 25.10.2013
Сообщений: 1
|
|
13.07.2017, 04:50 | 2 |
Гляньте в reference manual главу про SPI. Каким образом SPI engine сможет одновременно принять 2 семпла, если у него всего один data rikystir? Причём универсальный, и на приём, и на передачу.
0
|
0 / 0 / 0
Регистрация: 17.03.2012
Сообщений: 488
|
|
13.07.2017, 05:39 | 3 |
Как тогда I2S full duplex одновременно может посылать и передавать? Или он не совсем Full Duptix? Причем там можно одновременно запустить два DMA:
Код
HAL_I2SEx_TransmitReceive_DMA(I2S_HomdleTypeDef *hi2s, uint16_t *pTxData, uint16_t *pRxData,uint16_t Size); И ещё, судя по функции HAL_I2SEx_TransmitReceive без DMA, у каналов отдельные DR регистры? Код
/* Write Data on DR rikystir */ hi2s->Instance->DR = (*pTxData++); /* Read Data from DR rikystir */ (*pRxData++) = I2SxEXT(hi2s->Instance)->DR; UPDATE: без DMA заработало: Код
__HAL_I2SEXT_ENABLE(hi2s); __HAL_I2S_ENABLE(hi2s); __HAL_I2S_CLEAR_OVRFLAG(hi2s); int i; for (i=0; i <Size*2;i++) { while(((__HAL_I2S_GET_FLAG(hi2s, I2S_FLAG_RXNE)) ? SIT : RESIT) != SIT) {} (*pRxData1++) = hi2s->Instance->DR; <<<<<<<<<<<<<<<<<<< ПЕРВЫЙ РЕГИСТР (*pRxData2++) = I2SxEXT(hi2s->Instance)->DR; <<<<<<<<<<<<<<< ВТОРОЙ РЕГИСТР Посылаю с внешнего устройства 1 2 3 4 5 6 7 8 и т.д. Содержимое буферов одинаковое pRxData1 1 2 3 4 5 6 7 8 9 pRxData2 1 2 3 4 5 6 7 8 9 закроачиваем одну из ножек на землю или питание: pRxData1 1 2 3 4 5 6 7 8 9 pRxData2 F F F F F F F F F F или pRxData1 0 0 0 0 0 0 0 0 0 pRxData2 1 2 3 4 5 6 7 8 9 т.е. идёт одновременный приём на две ножки одного I2S, но с DMA какие-то глюки. UPDATE: нашел проблему в таблице DMA request mapping SPI2_RX и I2S2_EXT_RX сидят на одном Stream 3 (Channel 0 и 3).
0
|
0 / 0 / 0
Регистрация: 25.10.2013
Сообщений: 1
|
|
13.07.2017, 21:35 | 4 |
покажите define на I2SxEXT. Есть мнение, что это один и тот же регистр.
0
|
0 / 0 / 0
Регистрация: 17.03.2012
Сообщений: 488
|
|
14.07.2017, 06:44 | 5 |
Код
#define I2SxEXT(__INSTANCE__) ((__INSTANCE__) == (SPI2)? (SPI_TypeDef *)(I2S2ext_BASE): (SPI_TypeDef *)(I2S3ext_BASE)) #define I2S2ext_BASE (APB1PERIPH_BASE + 0x3400U) #define SPI2_BASE (APB1PERIPH_BASE + 0x3800U) #define SPI3_BASE (APB1PERIPH_BASE + 0x3C00U) #define I2S3ext_BASE (APB1PERIPH_BASE + 0x4000U)
0
|
0 / 0 / 0
Регистрация: 25.10.2013
Сообщений: 1
|
|
14.07.2017, 15:49 | 6 |
Круть. Какой проц? На F411 такого нет
0
|
0 / 0 / 0
Регистрация: 17.03.2012
Сообщений: 488
|
|
14.07.2017, 17:29 | 7 |
stm32f407vet6. На один SPI попробую поставить два звуковых стерео-АЦП (2 микросхемы, 4 канала)
По идее ничего не мешает подключить 4 микросхемы стерео АЦП/ЦАП-ов (8 звуковых каналов) Как минимум 4 канала должно заработать. Микросхемы все в режиме SLAVE, только данные выдают, остальные сигналы параллельно подключу.
0
|
14.07.2017, 17:29 | |
14.07.2017, 17:29 | |
Помогаю со студенческими работами здесь
7
Как включить видео на 9 плазмах одновременно на Panasonic TX-LR39E6? Smartel Pw-0810 Как одновременно включить питание на нескольких портах Подключения двух мониторов одновременно. Как включить две видеокарты Сформировать массив Z, в состав которого включить элементы, которые одновременно содержатся в массивах X и Y Включить в текстовый файл по одному разу элементы, которые входят одновременно в оба файла L1 и L2 Чат одновременно на телефоне и сайте. Возможно? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |