Перейти к содержанию

PIC24F сбои UART-ов при переключении режима DOZE

Не сталкивался ли кто с таким эффектом, что при применении режима 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 ничего не нашел...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Еще какое-то время убил, попробовал добавить керамики по питанию ПИКа: было 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, на более новых не проверял...

Поделиться сообщением


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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Это специальный режим энергосбережения у PIC24, когда периферия работает на постоянной высокой частоте, а частоту CPU можно кратно снижать (1/2, 1/4 и т.д.) переключая один бит.
Синхронизация при этом не нарушается.
Вся документация это одна страничка в мануале и две странички в аппликейшене, на которые и купился. Расписано все красиво и точно для моего случая.

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

з.ы. сегодня несколько часов гонял последний статический вариант режима - ни одного сбоя.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация