• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

JL SoC

andrey24

New member
Здравствуйте. Принесли на ремонт наушники Perfeo sharm. Не работал один канал. Решил перепаять чип с модулей. Но безуспешно. Впаял старый чип, но он не запустился. Позже заметил, что один вывод оторвался под гнездом на наушники. Возможно при демонтаже что-то повредил или коротнул (был подключен АКБ).
Маркировка чипа AS20BP02720-25F4. Подскажите пожалуйста с какого устройства можно заменить данный чип? Или может кто подскажет в чем может быть причина незапуска. Сопротивление килоомы по питанию. Напряжение 3.3.в есть. Кз не нашел
 

Вложения

priradio585

New member
На Кварце что происходит,генерация есть? И напряжение там какое?
А то что чипы по маркировки одинаковые,это не чего не значит,прошивки в них могут быть разные.
Кто нибудь знает как слить с чипа прошивку?
Для экспериментов.
 

Alcest

Member
Как отключить микрофонный вход на PA0? Совсем, чтобы микрофонный вход не был подключен к этой ноге чипа.

Мне нужно подать сигнал на DAC_AMUX0_L (вывод 14 AC6925A). При активации этого входа появляется рокот в наушниках. В файле sdk_cfg.h отмечено, что нельзя производить запись одновременно с linein и mic. Наверное из-за этого рокочет.

microphone_close(); и ladc_ch_close(LADC_MIC_CHANNEL); пробовал, не помогает. Микрофонный вход не отключается, звук с него воспроизводится в наушниках, рокочущий звук не пропадает.

Как оключить mic?
 

Alcest

Member
Вставил microphone_close(); в другое место в своем коде, звук с микрофонного входа отключился... вместе с входом AMUX0_L... Что за дела?
 

nikolz

Well-known member
Ищу даташит чипа DY1703A и все о нем.
Кто знает его, отзовитесь.
 

Alcest

Member
Не было печали, но понадобились внешние прерывания... Как здесь настраиваются и обрабатываются прерывания с портов ввода-вывода? Мне бы примерчик попроще, впроде нажали кнопку - зажегся светодиод.
 

Alcest

Member
Разобрался немного, научился получать прерывания от портов. Как оказалось, нужно в регистре wakeup con0 включить реакцию нужного порта на события, а нужный порт должен быть настроен как вход. Теперь еще понять бы, как определить какой из портов вызвал прерывание?
 

Alcest

Member
А они не говорили, что RM на чип урезан до неприличия? Наверное не читали.
 

Alcest

Member
Ну вот же, AC6925A с FM радио. AC6925C без радио. А чтение и воспроизведение музыки с флешки они почти все умеют.
 

Alcest

Member
Обнаружил одну неприятную особенность. Из циклов while() и for() программа в прерывание от порта не хочет уходить от слова совсем. Заволатилил все что было можно, оптимизацию компилятора отключил, но результат все тот же - бесконечно крутится в цикле, не заходя в обработчик прерывания где прописано условие для завершения цикла.

Должен заметить, что такая же фигня у меня была с PIC16, STM8 и STM32. Если прога попала в цикл, то на аппаратные прерывания от входов уже не реагировала.
 

CodeNameHawk

Moderator
Команда форума
Должен заметить, что такая же фигня у меня была с PIC16, STM8 и STM32. Если прога попала в цикл, то на аппаратные прерывания от входов уже не реагировала.
Чудеса.
Чудо обычно бывает или в неправильной конфигурации железа, или оптимизации, нп. volatile забыли.
Из циклов while() и for() программа в прерывание от порта не хочет уходить от слова совсем.
Если так подумать, то в программе всегда есть хотя бы один цикл и по вашей писанине получается прерывания от порта вообще не работают.
 
Последнее редактирование:

Alcest

Member
или оптимизации, нп. volatile забыли
Ну так:
Заволатилил все что было можно, оптимизацию компилятора отключил
Грешу на приоритетность прерываний, но у прерываний PORT как будто по умолчанию самый высокий приоритет IP0.
К тому же в PIC16 приоритеты не выставляются вообще никак кроме как ручками в обработчике прерываний. Но тем не менее и с PIC16 у меня была такая же ерунда, что прога заходила в цикл и никак не попадала из нее в обработчик прерываний.

Попробовал вместо задержки использовать условие if, по которому выполняющийся по прерыванию код просто игнорируется до возникновения события прерывания. Прога крутится в главном цикле пропуская часть кода, который выполняется только по изменению условия. Тут все нормально. Дело все же в циклах while и for. По-видимому, есть в них что-то особенное, чего я не знаю. Или они проц грузят до такой степени, что он на прерывания не успевает реагировать. Но я даже задержки пробовал делать в теле while и for, не помогло...
 

Alcest

Member
Решив, что компилятор все же где-то и что-то оптимизирует, сделал цикл while со счетчиком, в котором переменная из его условия увеличивается с каждой итерацией, и по достижению некоторого значения цикл завершается. Чтобы не было переменных которые компилятор может счесть бесполезными. Ту же переменную решил обнулять в обработчике прерываний, чтобы досрочно выходить из цикла. Ну так цикл по счетчику завершается, а в обработчик прерывания все равно программа не переходит.
 

Alcest

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

то в программе всегда есть хотя бы один цикл
И даже не один. Вот тут подумалось - а нет ли ограничений на вложенность циклов?

P. S. не у меня одного такие косяки. Гуглил-яндексил, и вижу что с такой фигней многие сталкивались. И решения так и не нашли.
 

CodeNameHawk

Moderator
Команда форума
Еще раз повторю, обычно программа крутится в цикле while и ясное дело прерывания работают.
 
Сверху Снизу