Перейти к содержанию
    

stm32h723 I2S регистр приема всегда пуст

Доброго времени.

Пытаюсь настроить I2S в режиме master rx. Источник данных - микрофон. На шине все присутствует, CK, WS ,SD микрофон данные отправляет. Прерывание по получению данных срабатывает, но регистр приема всегда пуст. Пробовал через DMA, результат то же. Данная конфигурация нормально работает на stm32f446. Так же пробовал настроить в режиме master tx и отправлять случайные данные - все нормально данные на шине появляются, прерывания срабатывают.  Пробовал менять настройки режима GPIO на mode_input (по умолчанию предлагает alternate push pull) результата не дало. Куда еще посмотреть ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

26 minutes ago, kyrex said:

но регистр приема всегда пуст.

Добрый день!

А физически данные на линии приёма есть?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

54 минуты назад, kyrex сказал:

Прерывание по получению данных срабатывает, но регистр приема всегда пуст.

В этой фразе 2 противоречащих друг другу события.

Если срабатывает прерывание по приему, т.е. в регистре статуса установлен бит RXNE (или как он там), то DR по определению не пуст.

Значит, контроллер I2S исправен (с точки зрения инициализации), копайте в сторону настройки ног.

Может, тактирование GPIO-модулей не настроено у Rx-линии. Смотрите прямиком из-под отладчика.

Еще про свап пинов SDI/SDO не забудьте, бит IOSWP в CFG2.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

14 минут назад, Arlleex сказал:

В этой фразе 2 противоречащих друг другу события.

Если срабатывает прерывание по приему, т.е. в регистре статуса установлен бит RXNE (или как он там), то DR по определению не пуст.

Нет никакого противоречия, чтоб сработало прерывание по приему, достаточно чтоб прошло необходимое количество клоков на CK. При этом что было на линии RX не важно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Только что, deni сказал:

Нет никакого противоречия, чтоб сработало прерывание по приему, достаточно чтоб прошло необходимое количество клоков на CK. При этом что было на линии RX не важно.

А я о чем? Перечитайте еще раз. Противоречие есть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

18 минут назад, Arlleex сказал:

А я о чем? Перечитайте еще раз. Противоречие есть.

В чем противоречие то? Прерывание есть, данных в регистре нет. К такой ситуации скорее всего приводит неверно настроенный пин, что собственно у вас далее и написано.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 minutes ago, deni said:

Прерывание есть, данных в регистре нет

Как их нет? Нули разве что. Но это тоже данные. В таких случаях выручает логический анализатор.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 минут назад, deni сказал:

В чем противоречие то? Прерывание есть, данных в регистре нет.

6 минут назад, haker_fox сказал:

Как их нет? Нули разве что. Но это тоже данные.

Именно...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 minutes ago, Arlleex said:

Именно...

Всё ж я за логический анализатор. Хотя бы осциллограф. Сразу развеивает все сомнения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если отключить  внешнее устройство (микрофон), то прерывания все равно срабатывают, а буфер при этом пуст, получается контроллер i2s генерирует их по тактовым импульсам согласно размеру принимаемого слова.

IOSWAP решил проблему. CubeMX не правильно пишет конфигурацию, при использовании master receive предлагает ногу SDO вместо SDI.  SWAP он тоже не прописывает, хотя в меню он присутствует,   пришлось вручную процедуру инициализации править.

 

ВСЕМ СПАСИБО !

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 часов назад, kyrex сказал:

CubeMX не правильно пишет конфигурацию... пришлось вручную процедуру инициализации править.

150979409218321534.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, kyrex said:

получается контроллер i2s генерирует их по тактовым импульсам согласно размеру принимаемого слова.

Вы бы почитали, как работает SPI/I2S))) Тогда это не было бы открытием) По-другому быть и не может.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...