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

 
 
> Выловить глюк с помощью 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
Ответов
Склихасовский
сообщение Jun 17 2008, 15:03
Сообщение #2


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

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



спасибо за советы...
Прерывания никогда не разрешаю в прерываниях..
переключение передача прием тоже смотрел анализатором (цифровой осцилограф) все ок
обработчик максимально короткий (+ на ASM пишу).
Но с ещё большей уверенностью могу сказать что RX не генерит прерывание
завел контрольный регистр и прописал его сразу после команды чтения UDR
далее присваиваю ему значение скажем $DD сразу после оканчания передачи фрема в сеть.
и стою на бреак поинте...
после вываливания в тайм аут вижу как был $DD так и остался $dd
регистры UCSRb - без изменений...
ещё раз повторюсь осцилограф стоит на ногах (RX) - (TX) - (bus_rx-tx)...
все ок...
все посылает все отвечает...
Завтра тупо отключу все процедуры...

Сообщение отредактировал Склихасовский - Jun 17 2008, 15:05
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 17 2008, 16:05
Сообщение #3


кекс
******

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



Цитата(Склихасовский @ Jun 17 2008, 18:03) *
далее присваиваю ему значение скажем $DD сразу после оканчания передачи фрема в сеть.
и стою на бреак поинте...

Брекпоинт можно поставить непосредственно в обработчике RX.

Цитата
после вываливания в тайм аут вижу как был $DD так и остался $dd
регистры UCSRb - без изменений...
ещё раз повторюсь осцилограф стоит на ногах (RX) - (TX) - (bus_rx-tx)...

Приемник не выключали?
Не пишется ли в регистр управления этого UART'a из другого обработчика?
(проверьте не ошиблись ли банально с вектором прерывания, или с именами регистров).
Может дело в тайм-ауте - сильно короткий?

Проблема постоянная или возникает иногда?
Если проблема возникает иногда - попробуйте выделить событие-причину:
после какого события это происходит, напр. прием пакета другим каналом, n-й тик таймера, n-й пакет, n-й длины пакет и т.п.
Go to the top of the page
 
+Quote Post
Склихасовский
сообщение Jun 18 2008, 07:21
Сообщение #4


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

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



Цитата(defunct @ Jun 17 2008, 20:05) *
Брекпоинт можно поставить непосредственно в обработчике RX.
Приемник не выключали?
Не пишется ли в регистр управления этого UART'a из другого обработчика?
(проверьте не ошиблись ли банально с вектором прерывания, или с именами регистров).
Может дело в тайм-ауте - сильно короткий?

Проблема постоянная или возникает иногда?
Если проблема возникает иногда - попробуйте выделить событие-причину:
после какого события это происходит, напр. прием пакета другим каналом, n-й тик таймера, n-й пакет, n-й длины пакет и т.п.


Приемник постоянно включен.
брекпоинт на обработчик - бессмыслено во первых нарушу динамику процесса, а во вторых постоянно будет вываливаться при "нормальном" приеме фрейма..
проблема постоянная хотя вылезает в достаточно короткое время(2 сек до 2 минут) и всегда!!
анализ события пока ни чего не дал.. очень хаотично возникает глюк
физика подключения все ок (на случай помехи то се - этого ничего нет)
даю картинки сего...
на левой показал что на RX идет фрейм без ошибок
на правой тайм аут беды ... принято без ошибок более 400 фремов

что касается времени самих прерываний...
RX int - меньше 60 тактов
TX - меньше 51 такта
(16 mHz clock)

распределение векторов:
Код
.cseg
                            ; Initialize interrupt vectors
.org 0x00
           jmp            START
.org    OC2addr                ;= 0x0012
        RJMP        timer2_process
.org    OC1Aaddr            ;= 0x0018; Timer/Counter1 Compare Match A
        rjmp        Modbus_idle
.org    OC0addr                ;= 0x001e; Timer/Counter0 Compare Match
        rjmp        lcd_trans
;---
.org    URXC0addr            ;= 0x0024; USART0, Rx Complete
        rjmp        uartrx
.org    UDRE0addr            ;  0x0026; USART0 Data Register Empty
        reti
.org    UTXC0addr            ;= 0x0028; USART0, Tx Complete
        rjmp        uarttx                        
;---
.org    URXC1addr            ;= 0x003c; USART1, Rx Complete
        rjmp        RX_MODBUS
.org    UDRE1addr            ;= 0x004e; USART1, Tx Complete
        rjmp        TX_MODBUS
.org    UTXC1addr            ;= 0x0040; USART1, Tx Complete
        rjmp        END_FRAME_MODBUS
.org    TWIaddr                ;= 0x0042; 2-wire Serial Interface
        RJMP        TWI_COMPLETE


да малостьввел в заблуждение..
скорость wake не 19200 а 50000
скорость модбас 19200

Сообщение отредактировал Склихасовский - Jun 18 2008, 07:24
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Склихасовский   Выловить глюк с помощью JTAG ICE MKii   Jun 17 2008, 09:48
- - mdmitry   А зачем всегда прерывание по передаче стоит? У мен...   Jun 17 2008, 10:17
|- - defunct   Цитата(mdmitry @ Jun 17 2008, 13:17) А за...   Jun 17 2008, 13:52
- - Склихасовский   Да все это так... все верно так и сделано что в мо...   Jun 17 2008, 10:27
- - SasaVitebsk   Может не переключается с передачи на приём? Поэтом...   Jun 17 2008, 13:08
||- - 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 Текстовая версия Сейчас: 19th July 2025 - 18:04
Рейтинг@Mail.ru


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