Baser 3 21 января, 2018 Опубликовано 21 января, 2018 · Жалоба Не сталкивался ли кто с таким эффектом, что при применении режима DOZE с динамическом переключении частоты CPU, начинают глючить UART-ы на прием. Т.е. при включении бита ROI (CLKDIV): Recover on Interrupt bit, который автоматически увеличивает частоту CPU при вхождении в прерывание, или при ручном вкл/выкл бита DOZEN (CLKDIV): Doze Enable bit, который меняет частоту CPU там, где хочется обработать функцию побыстрее. Сбои выглядят так, что случайным образом при приеме взводятся биты ошибок приема Frame Err и Overrun Err При этом софт бракует принятый пакет и обмен рушится. Немного подробностей: PIC24F32KA304 работал на кварце 7.3728 МГц Два UART-а на 115.2 кбит/с, загрузка не слишком большая, несколько пакетов в секунду. Такой вариант выпускался несколько лет сотнями, проблем не было. Решил я ускорить обработку, запустил PLL x 4. На этой частоте работает периферия. CPU можно включать на кратной пониженной частоте. Так вот, при статическом режиме, когда я не переключаю на ходу делители, все работает стабильно: Fosc=7.3728 МГц, PLL x 4, CPU 1:1 или 1:2 или 1:4 Как только начинаю динамически переключать тактирование CPU 1:1/1:2 или 1:1/1:4 - работа UART-ов рушиться. Причем все остальное вроде работает, средние токи потребления PIC24F32KA304 соответствуют выставляемым делителям. Такое впечатление, что из-за скачков потребления самопроизвольно взводятся флаги ошибок. В Errate ничего не нашел... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 3 23 января, 2018 Опубликовано 23 января, 2018 · Жалоба Еще какое-то время убил, попробовал добавить керамики по питанию ПИКа: было 0.22мк х 2 шт. возле ножек. Припаял сверху еще по 1мк х 2 шт. Ничего не изменилось. Причем у меня для отладки на оба УАРТа возле ПИКа припаяны диодные ИЛИ, которые через MAX3232 идут на две терминальные проги на ПК, для логирования обмена. Так вот в логах битых пакетов не наблюдается. При выключении бита ROI (CLKDIV) и исключительно программном дергании бита DOZEN, при PLL x 4, CPU 1:2 вроде все работало. А при попытке также сделать при PLL x 4, CPU 1:4 стало глючить так, что совсем не понял что происходит. Плюнул на все это и сделал статический вариант PLL x 4, CPU 1:2 без переключения DOZEN. Сбоев не наблюдается! з.ы. на испытуемой плате стоит PIC24F32KA304 первой ревизии А4, на более новых не проверял... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amiller 2 24 января, 2018 Опубликовано 24 января, 2018 · Жалоба Я бы не рассчитывал на чудеса с самопроизвольной установкой бит по помехам. А поискал бы в документации особенности данного переключения частоты. Чисто теоретически могу предполагать, что если изменение тактирования происходит в середине приема байта, то не исключено появление ошибок. Если это так, то нужна или взаимная синхронизация процессов или корректная отработка ошибочных состояний. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 3 24 января, 2018 Опубликовано 24 января, 2018 · Жалоба Это специальный режим энергосбережения у PIC24, когда периферия работает на постоянной высокой частоте, а частоту CPU можно кратно снижать (1/2, 1/4 и т.д.) переключая один бит. Синхронизация при этом не нарушается. Вся документация это одна страничка в мануале и две странички в аппликейшене, на которые и купился. Расписано все красиво и точно для моего случая. Только глючит, когда включаешь режим автоперехода на высокую частоту при возникновении прерывания. з.ы. сегодня несколько часов гонял последний статический вариант режима - ни одного сбоя. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться