Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: PIC24F сбои UART-ов при переключении режима DOZE
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
Baser
Не сталкивался ли кто с таким эффектом, что при применении режима 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
Еще какое-то время убил, попробовал добавить керамики по питанию ПИКа: было 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
Я бы не рассчитывал на чудеса с самопроизвольной установкой бит по помехам.
А поискал бы в документации особенности данного переключения частоты.
Чисто теоретически могу предполагать, что если изменение тактирования происходит в середине приема байта, то не исключено появление ошибок.
Если это так, то нужна или взаимная синхронизация процессов или корректная отработка ошибочных состояний.
Baser
Это специальный режим энергосбережения у PIC24, когда периферия работает на постоянной высокой частоте, а частоту CPU можно кратно снижать (1/2, 1/4 и т.д.) переключая один бит.
Синхронизация при этом не нарушается.
Вся документация это одна страничка в мануале и две странички в аппликейшене, на которые и купился. Расписано все красиво и точно для моего случая.

Только глючит, когда включаешь режим автоперехода на высокую частоту при возникновении прерывания.

з.ы. сегодня несколько часов гонял последний статический вариант режима - ни одного сбоя.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.