Как стать автором
Обновить

Запуск I2S трансивера на Artery

Уровень сложностиПростой
Время на прочтение16 мин
Количество просмотров3.9K
Всего голосов 10: ↑7 и ↓3+8
Комментарии14

Комментарии 14

О коллега по Artery. В планах тоже есть запуск i2s с DMA. Так что статья в тему. Сейчас запустил Ethernet на ней с freertos стеком

Если вы испускаете звук с частотой 48kHz, то прерывания будут происходить с частотой 96kHz.

вот тут есть смысл ДМА прикрутить чтобы понизить частоту прерываний, чтобы сэмплы звука в буфер ДМА пачками копировать, а не по одному в регистры I2S юнита. Ждем продолжения!

Где-то чуть сложнее где-то чуть проще, но в целом это очень обыкновенная и упорная работа.

в этом предложении я бы заменил слово обыкновенная на "необыкновенно муторная", может даже нудная, успехов!

DMA ещё позволит активировать полный дуплекс. На прерываниях только полудуплекс.

я бы заменил слово обыкновенная на "необыкновенно муторная", может даже нудная, успехов!

При правильной организации работ никакой нудности не должно быть

1--Когда есть UART-CLI , то ситуация с отладкой заметно улучшается и в разработке появляется азарт

2--Для каждого регистра можно определить си-шное битовое поле, и вам не придется использовать ни одного оператора побитового сдвига и эти нечитаемые маски. С битовыми полями и объединениями код драйвера получится лаконичным и наглядным.

3--Код HAL очень легко пишется по методике TDD.

Когда пишешь HAL, обычно находишь огромное количество опечаток в datasheet(ах)

В случае artery (да и не только) полезно иметь раскрытым рядом RM

на какой-нибудь stm32f1 и/или f4 -- очень многое просто совпадает

на регистровом уровне, и ляпы в документации cтановятся очевидны.

Тут можно полистать историю коммитов и получить некоторое

представление о сходстве/различии с stm32:

https://github.com/beefdeadbeef/libopencm3/commits/at32f4/

вот тут есть смысл ДМА прикрутить чтобы понизить частоту прерываний, чтобы сэмплы звука в буфер ДМА пачками копировать, а не по одному в регистры I2S юнита. Ждем продолжения!

Вот, пожалуйста, Запуск I2S Трансивера на Artery [часть 2] (DMA FSM, Pipeline)

Стоит отметить, что в Artery MCU каждый отдельный I2S может быть либо передатчиком, либо приёмником. Если же мы хотим сделать полнодуплексную трансляцию, то надо настроить синхронную работу двух отдельных I2S трансиверов (I2S2 и I2S2EXT).

Я на стм32 делал воспроизведение wav файла из флешки через дма. Алу вообще отдыхает. Кинул блок данных когда половина воспроизвелась первую половинку данных меняем на свежую через прерывание DMA half complete. Помню что тогда намучился c последовательностью байт. Вот не помню уже в чем нюанс был. Кажись какой байт раньше толкать младший или старший

Вообще писать нормальный hal должны специальные организации.

По стандарту.

Чтобы у всех микроконтроллеров была одинаковая сигнатура функций типа i2s_write()

чем дальше от железа тем хуже понимание процессов в нем происходящих. использование hal подобно списанию кода из методички. Для начинающих хорошо, когда работает сразу, но если что то идет не так то приходиться углубляться и ловить открытия чудные. или наоборот - не хватает функционала для раскрытия всех возможностей железа - и "готовые" функции допиливаются

Углубляться прийдется. ПО ЛЮБОМУ если это больше чем мигать светодиодом

Artery, говорите ? Их есть у меня:

https://github.com/beefdeadbeef/f4uac -- началось как usb'шная звуковая карта, сейчас это, xм, усилок ? В комплекте допиленная libopencm3 для at32f40x/f42x.

https://github.com/beefdeadbeef/ecmit -- работоспособная болванка с сетью -- libopencm3, lwip, bugurtos

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории