Очередная багофича HAL
Наткнулся на новый косяк библиотеки HAL в функции HAL_I2S_Transmit. Есть у нее параметр uint16_t Size, который удваивается в случае работы с данными 24 или 32 бита
Проблема в том, что переменные TxXferSize и TxXferCount имеют тип uint16_t. И если на вход HAL_I2S_Transmit передать размер 0x8000 и более, то после сдвига влево результат превращается в тыкву.
// stm32f4xx_hal_i2s.c line 537
if((tmp1 == I2S_DATAFORMAT_24B) || (tmp1 == I2S_DATAFORMAT_32B))
{
hi2s->TxXferSize = (Size << 1U);
hi2s->TxXferCount = (Size << 1U);
}
else
{
hi2s->TxXferSize = Size;
hi2s->TxXferCount = Size;
}
Проблема в том, что переменные TxXferSize и TxXferCount имеют тип uint16_t. И если на вход HAL_I2S_Transmit передать размер 0x8000 и более, то после сдвига влево результат превращается в тыкву.
// stm32f4xx_hal_i2s.h line 110
typedef struct __I2S_HandleTypeDef
{
SPI_TypeDef *Instance; /*!< I2S registers base address */
I2S_InitTypeDef Init; /*!< I2S communication parameters */
uint16_t *pTxBuffPtr; /*!< Pointer to I2S Tx transfer buffer */
__IO uint16_t TxXferSize; /*!< I2S Tx transfer size */
__IO uint16_t TxXferCount; /*!< I2S Tx transfer Counter */
хорошая звуковая карта (192/24) за выходные
После тюнинга плеера остались разные микросхемы, остался трупик старого плеера (умер своей смертью после 3х лет работы).
Решил из того что есть собрать хорошую звуковую карту. fiio E10 на сходной элементной базе превосходит все бытовые карты (включая ASUS Xonar Essence ). Собственно его схему и берем за основу.

Читать дальше
Решил из того что есть собрать хорошую звуковую карту. fiio E10 на сходной элементной базе превосходит все бытовые карты (включая ASUS Xonar Essence ). Собственно его схему и берем за основу.

Читать дальше
I2S в FPGA на Verilog

Сначала хотел описать регистры конфигурации кодека WM8731, но потом решил начать с описания интерфейса I2S, потому что описание регистров это, можно считать, практически перевод датащита. В следующей статье напишу о регистрах конфигурации.
Читать дальше
- +5
- 19 января 2013, 13:43
- Karsakbayev
- 18