Всем привет. Читаю данные из SPI флэш через USART с использованием DMA. Один канал DMA пишет 1024 байта во флэш, второй одновременно принимает 1024 байта и сохраняет в буфер. Когда все 1024 байта отправлены и получены DMA передает контроллеру запросы прерываний TX и RX и вызываются их обработчики. Читаю где-то по 100 килобайт за секунду со скоростью 4 млн бод.
Проблема в том, что при запуске прошивки через отладчик через какое-то время возникает ситуация, когда на приеме последний 1024-й байт посылки куда-то теряется и перестает вызываться обработчик RX прерывания. Причем обработчик TX прерывания вызывается стабильно. Что вижу в отладчике: 1. Счетчик DMA переданных байт равен 0, а прочитанных 1. То есть по DMA передано 1024 байта, а прочитано только 1023. DMA ждет последний байт посылки и так как его нет - нет и прерывания. 2. Флаги ошибок равны 0 3. В регистре чтения USART лежит последний байт посылки (0x89). То есть последний (1024-й) байт посылки похоже таки пришел в контроллер. Но счетчик DMA почему-то не обнулился и как следствие DMA не запросил RX прерывание контроллеру.
Самое интересное: такая истуация возникает только при запуске прошивки через отладчик. Может возникнуть в любой момент: через несколько секунд или позже (но, как правило, работает не больше 20 минут). А когда запускаю девайс без отладчика - все нормально работает по несколько часов (самое долгий тест 16 с чем-то часов). Я в недоумении. Это косяк в моем коде, косяк в отладчике или косяк контроллера? У кого-нибудь возникали подобные ситуации? В чем может быть проблема?
spaum33, многие флаги чистятся чтением, в том числе и отладчиком...
Поясните, пожалуйста, к чему вы клоните. Если допустить, что флаги ошибок были очищены чтением или отладчиком, то при установке оных DMA в любом случае должен выдать запрос на прерывание RX. Но прерывания как раз таки и нет и обработчик не запускается. А флаги я проверяю именно в обработчике. Опять же, без отладчика, в таком случае, тоже ведь должен быть сбой. Тгда получается, отладчик чистит какой-то другой флаг, который, например, инициирует запрос DMA на чтение? Но тогда непонятно почему это просиходит именно на последнем байте
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 26
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения