Jump to content

    

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

Добрый день всем.

Имеется у меня плата stm32f4-Discovery. Делаю всякие мелкие проекты по реализации имеющихся в проце возможностей (SPI, USART, USB-CDC, USB-HID, LCD, EXT). Использую ОС ChibiOS и среду ChibiStudio.

Сейчас пытаюсь реализовать вывод звука на разъем для наушников.

Проект веду следующим путем: данные для воспроизведения гоню с помощью ДМА на встроенный в проце ЦАП, далее с ноги РА4 аналоговый сигнал должен проходить через звуковой драйвер-микросхему CS43L22, и уже с выхода этой микросхемы на наушники.

В-общем, на данный момент я на ноге РА4 имею звуковой поток. По схеме вывод РА4 с проца подключен к входам AIN1A,AIN1B микросхемы CS43L22. Но на выходе этой микросхемы ничего нет.

Для реализации моей задумки микросхему CS43L22 по интерфейсу I2C нужно перевести в режим Analog Passthrough, при котором аналоговые данные со входа идут на выход, т.е. транслируется. Но при этом можно управлять громкостью (уровнем) выводимого звука.

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

В инете натыкался на процедуры инициализации для режима воспроизведения цифрового потока, подаваемого по I2S. Но мне этот режим не нужен.

 

Кто-нибудь может что-нибудь подсказать по данному вопросу, даже без привязки к ОС, просто алгоритм (рабочий) инициализации этой микросхемы CS43L22?

 

Заранее благодарю за ответы.

Share this post


Link to post
Share on other sites
В инете натыкался на процедуры инициализации для режима воспроизведения цифрового потока, подаваемого по I2S. Но мне этот режим не нужен.

Насколько я понял для работы кодек использует частоту, подаваемую на MCLK.

Поэтому без I2S удет сложно. Как вариант, попробуйте подать на MCLK (PC7) меандр, частотой 12.8МГц.

Share this post


Link to post
Share on other sites

Получилось запустить работу этой микросхемы, была проблема с выдачей частоты на РС7.

Но частота эта довольно маленькая получается - 350кГц. Выше поднять не получается, проект не апускается.

Делаю так: таймер использую третий, настроил на частоту 42МГц, настроил выход на Toggle, АRR делаю 60, вывод настроил как высокоскоростной. В таком исполнении работает.

Как только делаю ARR 50 и меньше, проект вываливается на первом же прерывании от таймера.

 

Не знаю пока, как победить. В доке о таком ограничении, да и вообще об ограничении на таймеры, ничего не нашел.

 

Но если бы поднять частоту, то звук получше бы стал.

 

Подскажите кто-нибудь как выдать на ногу бОльшую частоту.

Share this post


Link to post
Share on other sites

зачем вам вообще прерывание?

на Pc7 нет выхода ШИМ?

скважность 50% и всех делов

Share this post


Link to post
Share on other sites

Да.нет. я прерывание не использую. Я настроил таймер чтобы он сразу на ногу выводил свой сигнал. Задействовал режим Toggle в регистре управления таймером.

Share this post


Link to post
Share on other sites

тогда не очень понятно что имеется ввиду

Как только делаю ARR 50 и меньше, проект вываливается на первом же прерывании от таймера.

 

по идее с таймером 42 МГц вы можете иметь частоту под 21 МГц.

сброс по достижению 1 регистра

значение регистра в 1

и вперед, как это может не работать?

Share this post


Link to post
Share on other sites

Да в том-то и дело, что из документации ясно, что это должно работать, как Вы и говорите - счет до 1 и сброс, т.е. делитель частоты на два.

Но почему-то не работает.

Может проблема связана с Осью. ChibiOS имеет в себе драйвера для периферии (hal), и проект я делал используя их. Я ChibiOS недавно использую, может и я где-то что-то не увидел. А может лучше все на регистрах сделать.

Share this post


Link to post
Share on other sites

В-общем, используя настройку таймера через регистры, добился генерации тактовой на MCLK высокой частоты.

Звуковой драйвер работает, транслирует сигнал с ЦАПа на выход наушников.

 

Теперь проблема другого плана.

Я в проекте еще не дошел до работы с SD-картой. Поэтому для вывода звука нашел в инете некий массив (около 360 слов), в котором расположены отсчеты звука, некая мелодия. Настроив таймер управления ДМА, выдающего эти отсчеты в ЦАП, на определенную частоту, слышу эти самые отсчеты. И складывается ощущение, что чего-то не хватает, звук какой-то недоделанный. Меняя частоту работы ДМА изменяется только тональность всей мелодии в целом.

Нашел еще несколько массивов звуков. Эффект или такой же, или еще хуже.

 

По задаче мне нужно сделать вывод какой-нибудь музыки или речи (в конце-концов это будет определенная фраза), но чтобы звучание было более-менее правдоподобным. При этом мне не нужно воспроизведение mp3-файлов, это должен быть некий зашитый/статичный массив отсчетов.

Может проблема в том, что при моей реализации нужен массив в определенном формате.

 

Можете посоветовать, в каком направлении покопать.

 

З.Ы.: с обработкой звуковых файлов пока дело не имел и с кодеками не знаком, поэтому решил пойти таким вот путем вывода звука через встроенный ЦАП без всякой обработки.

Share this post


Link to post
Share on other sites
Можете посоветовать, в каком направлении покопать.

В каком формате массив данных? Битность? Знаковость?

Share this post


Link to post
Share on other sites
В-общем, используя настройку таймера через регистры, добился генерации тактовой на MCLK высокой частоты.

Звуковой драйвер работает, транслирует сигнал с ЦАПа на выход наушников.

 

Расскажите как Вам удалось настроить кодек с управлением MCLK по таймеру?

Вы режимы I2S изменяли? Режим мастера остается? С разрешенным MCLK_Output?

 

Какая у вас частота проца, какая на шине с таймерами? Какой прескаллер и период на таймере? Какое значение в pulse для шим?

 

У меня нет осциллографа - все делаю вслепую. Вот и спрашиваю всех подряд.

 

Настроил шим на таймере3 на ноге pc7 (channel2) , все что получаю - это писк на выходе кодека через минуту-две после включения таймера.

Edited by Dmitry2017

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this