реклама на сайте
подробности

 
 
> Выловить глюк с помощью JTAG ICE MKii, проконсультируйте варианты нахождения глюков в программе
Склихасовский
сообщение Jun 17 2008, 09:48
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 77
Регистрация: 29-11-06
Пользователь №: 22 912



Ребят, уже 5 е сутки башкой об стену бьюсь...
немогу заставить нормально работать RS485 сетку...
--------
вообщем попорядку...
кристалл MEGA 64 AI
задействовано 2 уарт
USART0 - реализация протокола WAKE (master)
USART1 - реализация протокола ModBUS (slave)
собственно основная проблема c сетью на WAKE:
структура сети 1 мастер куча слейв...
на данный момент идет опрос только одного подчиненного.
непонятно по каким причинам программа вываливается в тайм аут
время "сбрыкивания" от 2 х сек до минуты
(но полюбому сбрыкивает)
(тайм аут выбран от 10 до 200 мС [100]) скорость сети 19200
сначала думал слейв не отвечает...
подцепил ко входам USART0 лог анализатор...
он показывает что во время возникновения тайм аута слейв всетаки ответил
и ответил корректно..
линия переключения RX-TX на драйвере 485 все ОК
сделал контроль регистр - рассовал вовсе точки.
и такое впечатление что на момент глюка приемник не принимает ни одного байта
почему? посылка идет 10-15 байт..
вот и не могу отследить где косяк
прерывания RXCIE, TXCIE и RXEN TXEN - всё включено постоянно...
осваиваю MKII недавно, может там есть какая нибудь функция которая поможет?

Сообщение отредактировал Склихасовский - Jun 17 2008, 09:52
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
mdmitry
сообщение Jun 17 2008, 10:17
Сообщение #2


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



А зачем всегда прерывание по передаче стоит?
У меня
UCSR1B = _BV(RXCIE1) | _BV(RXEN1) | _BV(TXEN1);
в инициализации.

Сам использую кольцевой буфер. При записи в него активизируется прерывание, после опустошения - блокируется.
Еще вопрос: а нет конфликта по прерываниям, то есть их не много сыплется одновременно?

Попробуйте поставить точку прерывания в то место, где таймаут и запустите на выполнение. Можно наставить несколько аналогичных ловушек. У себя так программные ляпы отлавливал.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 17 2008, 13:52
Сообщение #3


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(mdmitry @ Jun 17 2008, 13:17) *
А зачем всегда прерывание по передаче стоит?

А зачем его дергать?
TXC вызывается только когда символ полностью отправлен и по факту вызова прерывания сбрасывается.

Цитата
так и сделано что в момент передачи приемник вообще отключается
а в момент приема - передатчик выкл

Зачем это сделано?
Уберите вкл/откл приемника передатчика, держите их всегда включенными. Пролеты с включением/отключением добавляют повода для глюкавости. Управляйте только направлением драйвера и все должно быть Ок.

Цитата
насчет конфликта по прерыванию
не исключено...

Как уже посоветовали - сделайте обработчики максимально возможно быстрыми.
Не анализируйте пакет в обработчике, зерно обработчика UART'a - байты. Rx должен вытянуть байт и куда-то его положить, просигналить что есть новые данные. Больше Rx обработчик ничего делать не должен.
Аналогично TXC обработчик должен взять байт и положить его в UART. Сменить направление драйвера на прием если брать больше нечего.

(не разрешайте прерываний в обработчиках прерываний).
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Склихасовский   Выловить глюк с помощью JTAG ICE MKii   Jun 17 2008, 09:48
- - Склихасовский   Да все это так... все верно так и сделано что в мо...   Jun 17 2008, 10:27
- - SasaVitebsk   Может не переключается с передачи на приём? Поэтом...   Jun 17 2008, 13:08
- - Склихасовский   спасибо за советы... Прерывания никогда не разреша...   Jun 17 2008, 15:03
|- - defunct   Цитата(Склихасовский @ Jun 17 2008, 18:03...   Jun 17 2008, 16:05
||- - Склихасовский   Цитата(defunct @ Jun 17 2008, 20:05) Брек...   Jun 18 2008, 07:21
||- - mdmitry   Цитата(Склихасовский @ Jun 18 2008, 11:21...   Jun 18 2008, 07:33
|- - mse   Цитата(Склихасовский @ Jun 17 2008, 19:03...   Jun 18 2008, 05:29
- - Склихасовский   А почему нет? вакой я обслуживаю свои датчики с то...   Jun 18 2008, 07:43
- - SasaVitebsk   На вид (точно сказать не могу) очень малое время м...   Jun 18 2008, 10:37
- - Склихасовский   Цитата(SasaVitebsk @ Jun 18 2008, 14:37) ...   Jun 18 2008, 10:51
- - SasaVitebsk   Боже а TWI здесь каким боком? Если по прерывани...   Jun 19 2008, 18:45
- - Fusion   Цитата.org UDRE1addr ;= 0x004e; USAR...   Jun 19 2008, 19:30
- - Склихасовский   да не вектора правильно расположены.. это просто в...   Jun 20 2008, 06:44
- - SasaVitebsk   Цитата(Склихасовский @ Jun 20 2008, 09:44...   Jun 20 2008, 09:35


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 00:42
Рейтинг@Mail.ru


Страница сгенерированна за 0.01402 секунд с 7
ELECTRONIX ©2004-2016