|
Непонятный глюк с Atxmega64A3U, Зависает часть периферии |
|
|
|
Mar 14 2013, 16:40
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Привет всем!
Есть устройство в котором задействовано множество периферии. На PORTD бит 5 является выходом. Используется как стробирующий выход. Пассивное состояние - 0. Управляется программой. На PORTE задействовано два USART - USARTE0 (для связи с периферийным устройством) и USARTE1 (как отладочный порт для вывода на РС сообщений).
Программа работает следующим образом 1. Инициализируется вся периферия (порты ввода-вывода, USART, таймеры и т.п.) 2. Далее подается строб на PORTD5.
Ситуация следующая: 1. Если питание подано в первый раз то после перехода строба из 0 в 1 вся периферия вешается! Т.е. оба USART не работают и еще часть периферии так же не работает. Программа может зависнуть.
2. Если сбросить процессор не снимая питания, то все работает как задумано.
Отрезал провода от USARTE0, от PORTD5 - ничего не помогло! Начал разбираться с программой. Оказалось, что если я не разрешаю приемник USARTE1, т. е. в регистре CTRLB не устанавливаю бит RXEN то при первой подаче питания все работает как положено. Далее установил, что если после того, как программа сгенерирует строб, разрешить приемник, то тоже все работает замечательно.
Два дня ломаю голову, чтобы это могло быть? Есть какие нибудь идеи?
--------------------
|
|
|
|
|
 |
Ответов
|
Mar 15 2013, 10:50
|

Гуру
     
Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106

|
Цитата(prottoss @ Mar 15 2013, 13:17)  Состояние PORTD5 не анализируется, ибо это выход. А что, выход нельзя анализировать? Цитата(prottoss @ Mar 15 2013, 13:17)  До обработчкив программа не доходит. Почему? Прерывания запрещены? Цитата(prottoss @ Mar 15 2013, 13:17)  Объясняю еще раз. Оставлена только инициализация периферии и пустой цикл. Все. Нет никакой программы, ни каких переменных. Ничего. Если нет ничего то как Вы знаете что все либо работает либо не работает?
|
|
|
|
|
Mar 15 2013, 12:26
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(zombi @ Mar 15 2013, 16:50)  А что, выход нельзя анализировать? Можно но не нужно. Я его анализирую с помощью осциллографа. Цитата(zombi @ Mar 15 2013, 16:50)  Почему? Прерывания запрещены? Нет не запрещены. А какие должны возникать прерывания если программа еще не дошла до основного цикла? Цитата(zombi @ Mar 15 2013, 16:50)  Если нет ничего то как Вы знаете что все либо работает либо не работает? В основном цикле есть моргалка светодиодом. задержка пол-секунды, инвертирование состояния светодиода и т.д. Так вот я вижу, что если светодиод моргает, значит программа не висит. Если зависла, то светодиод не моргает. Кстати, анализировал программу в симуляторе AVRStudio - ни каких глюков не выявил.
--------------------
|
|
|
|
Сообщений в этой теме
prottoss Непонятный глюк с Atxmega64A3U Mar 14 2013, 16:40 kovigor Цитата(prottoss @ Mar 14 2013, 19:40) Два... Mar 14 2013, 17:01 prottoss Цитата(kovigor @ Mar 14 2013, 23:01) -Как... Mar 14 2013, 17:27 maksimp Вероятно ошибка в программе и аппаратные эффекты н... Mar 14 2013, 18:42 prottoss Да в том то и дело, что нет ни каких переменных и ... Mar 15 2013, 04:55 bob1 Если выставить до строба( PORTD.PIN5CTRL=PORT_ISC_... Mar 15 2013, 06:13     zombi Цитата(prottoss @ Mar 15 2013, 16:26) Нет... Mar 15 2013, 23:47 prottoss С глюком разобрался.
Прав был уважаемый zombi - мо... Mar 16 2013, 13:26 mempfis_ Цитата(prottoss @ Mar 16 2013, 16:26) С г... Mar 16 2013, 15:56  prottoss Цитата(mempfis_ @ Mar 16 2013, 21:56) Сов... Mar 16 2013, 16:10   ARV Цитата(prottoss @ Mar 16 2013, 20:10) Сог... Mar 16 2013, 17:25 ILYAUL ЦитатаСтроб (скорее всего из-за разводки печатной ... Mar 16 2013, 18:31
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|