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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> отладка UART
-=A.N.G.E.R=-
сообщение Dec 5 2006, 11:19
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 5-12-06
Пользователь №: 23 140



Нужна помощь!
Не могу отладить кусок проги для AT90S8515 по работе с UART
Пишу на C в AtmanAVR
Суть: МК должен принимать по UART код и сравнивать его со списком кодов, при совпадении с кодом из списка выполнять соотв. коду действия.
Что делаю: в пошаговом режиме симуляции (пробовал и AtmanAVR и AVRStudio) после перехода в режим ожидания кода от UART руками загоняю нужный код в UDR, ставлю флаг RXC - происходит прерывание, в обработчике читаю UDR в переменную
Вижу: флаг RXC сбрасывается, что говорит об успешном чтении, однако, переменная, в которую считываю UDR ,что бы в ней не было, сбрасывается в 0х00.
Вся голову сломал, что может быть?
Go to the top of the page
 
+Quote Post
kamedi_clab
сообщение Dec 5 2006, 11:48
Сообщение #2


Местный
***

Группа: Новичок
Сообщений: 239
Регистрация: 5-10-06
Пользователь №: 21 004



используйте VMLAB или PROTEUS - это настоящие симуляторы а не обрубки. например vmlab на .nm.ru
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Dec 5 2006, 12:03
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(-=A.N.G.E.R=- @ Dec 5 2006, 11:19) *
Вижу: флаг RXC сбрасывается, что говорит об успешном чтении, однако, переменная, в которую считываю UDR ,что бы в ней не было, сбрасывается в 0х00.

Объявлена правильно?


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
-=A.N.G.E.R=-
сообщение Dec 5 2006, 12:07
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 5-12-06
Пользователь №: 23 140



Цитата
Объявлена правильно?

да, конечно же, что я только не пробовал и extern, и volatile и просто char , int все одно - сбрасывается в ноли при чтении UDR - такое ощущение, что руками позволено менять только UDR на передачу, что у меня и происходит, а как чтение смоделировать - ума не приложу...

Цитата(kamedi_clab @ Dec 5 2006, 11:48) *
используйте VMLAB или PROTEUS - это настоящие симуляторы а не обрубки. например vmlab на .nm.ru

пробовал я VMLAB, мельком правда, сложен он в настройке и не все работает, в частности, моя прога там не сработала - похоже, не те данные передает, что я задаю, либо не въехал, как их гнать
а вот PROTEUS никак не могу найти для скачивания - только форумы и отзывы, буду примного благодарен за ссылку на сей продукт

Сообщение отредактировал -=A.N.G.E.R=- - Dec 5 2006, 12:13
Go to the top of the page
 
+Quote Post
ahulap
сообщение Dec 5 2006, 12:16
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 22-06-06
Из: Kharkiv, UA
Пользователь №: 18 284



У меня при отладке в AVR studio UDR сбрасывается в 0 после выполнения любой инструкции. Так что заношу туда значение непосредственно перед считыванием UDR.
Go to the top of the page
 
+Quote Post
-=A.N.G.E.R=-
сообщение Dec 5 2006, 12:19
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 5-12-06
Пользователь №: 23 140



Цитата(ahulap @ Dec 5 2006, 12:16) *
У меня при отладке в AVR studio UDR сбрасывается в 0 после выполнения любой инструкции. Так что заношу туда значение непосредственно перед считыванием UDR.

пробовал и это, сбрасывается в ноль в момент любой операции и в переменную сохраняется 0
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Dec 5 2006, 12:20
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(-=A.N.G.E.R=- @ Dec 5 2006, 12:07) *
Цитата

Объявлена правильно?

да, конечно же, что я только не пробовал и extern, и volatile и просто char , int все одно - сбрасывается в ноли при чтении UDR - такое ощущение, что руками позволено менять только UDR на передачу, что у меня и происходит, а как чтение смоделировать - ума не приложу...

Где объявлена? Внутри - снаружи прерывания? Если внутри, static пробовали?
В какой момент сбрасывается? Стек не затирает?


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
-=A.N.G.E.R=-
сообщение Dec 5 2006, 12:34
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 5-12-06
Пользователь №: 23 140



Цитата(Dog Pawlowa @ Dec 5 2006, 12:20) *
Где объявлена? Внутри - снаружи прерывания? Если внутри, static пробовали?
В какой момент сбрасывается? Стек не затирает?

объявление делал в начале файла работы с UART - особенность Atmanavr в том, что она делает несколько файлов для каждого периферийного у-ва
делал и statik, все равно происходит сброс переменной в момент сохранения в нее UDR
Go to the top of the page
 
+Quote Post
defunct
сообщение Dec 5 2006, 21:12
Сообщение #9


кекс
******

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



Проверяйте в железе.
Go to the top of the page
 
+Quote Post
MichaelU
сообщение Dec 6 2006, 09:10
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 1-02-06
Пользователь №: 13 867



При входе в прерывание по приему данных при отладке UDR вроде обнуляется - поэтому при отладке нужно заносить в него данные уже после входа в прерывание.
И еще если будет что нибудь вроде:

if UDR=='a' //вот здесь UDR уже обнулится
{
mydata[asd]=UDR; //будут нули
...
}
else if ...

Нужно:
_TmpChar=UDR;
if _TmpChar=='a'
{
mydata[asd]=_TmpChar;
...
}
else if ...

Сообщение отредактировал MichaelU - Dec 6 2006, 09:13
Go to the top of the page
 
+Quote Post
-=A.N.G.E.R=-
сообщение Dec 6 2006, 12:04
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 5-12-06
Пользователь №: 23 140



Цитата(MichaelU @ Dec 6 2006, 09:10) *
При входе в прерывание по приему данных при отладке UDR вроде обнуляется - поэтому при отладке нужно заносить в него данные уже после входа в прерывание.
И еще если будет что нибудь вроде:

if UDR=='a' //вот здесь UDR уже обнулится
{
mydata[asd]=UDR; //будут нули
...
}
else if ...

Нужно:
_TmpChar=UDR;
if _TmpChar=='a'
{
mydata[asd]=_TmpChar;
...
}
else if ...


Да, я это пробовал, UDR обнуляется в момент начала выполнения команды чтение, т.е. как только читаю UDR ( x=UDR ) UDR уже обнулился и в x заносятся нули.
Я склоняюсь к мысли, что это косяк в отладчике. Попробую ввести временную отладочную переменную и изменять ее руками, а не UDR.
Go to the top of the page
 
+Quote Post
okela
сообщение Dec 6 2006, 13:55
Сообщение #12


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

Группа: Свой
Сообщений: 165
Регистрация: 11-01-05
Из: Украина, г. Одесса
Пользователь №: 1 896



Цитата(-=A.N.G.E.R=- @ Dec 5 2006, 13:07) *
пробовал я VMLAB, мельком правда, сложен он в настройке и не все работает, в частности, моя прога там не сработала - похоже, не те данные передает, что я задаю, либо не въехал, как их гнать
а вот PROTEUS никак не могу найти для скачивания - только форумы и отзывы, буду примного благодарен за ссылку на сей продукт


http://kazus.ru/programs/viewdownload/kz_0/cid_7.html

Там куча версий Proteus, последняя 6.9
Go to the top of the page
 
+Quote Post
okela
сообщение Dec 6 2006, 14:29
Сообщение #13


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

Группа: Свой
Сообщений: 165
Регистрация: 11-01-05
Из: Украина, г. Одесса
Пользователь №: 1 896



А в принципе, IMHO, такой способ проверки (с симулятором AVRStudio) не есть корректный.
Регистр UDR физически состоит из двух регистров на одном адресе : один на запись (Тх) , а другой на чтение (Rx) . И ваша запись в UDR соответствует попытке отправить байта на передачу.
А в регистре приема информация появится только посля физического приема данных по линии RxD.
Go to the top of the page
 
+Quote Post
-=A.N.G.E.R=-
сообщение Dec 6 2006, 15:48
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 5-12-06
Пользователь №: 23 140



Цитата(okela @ Dec 6 2006, 14:29) *
А в принципе, IMHO, такой способ проверки (с симулятором AVRStudio) не есть корректный.
Регистр UDR физически состоит из двух регистров на одном адресе : один на запись (Тх) , а другой на чтение (Rx) . И ваша запись в UDR соответствует попытке отправить байта на передачу.
А в регистре приема информация появится только посля физического приема данных по линии RxD.

Эт все так, вот только как на уровне программной отладки проверить работоспособность приема?
Буду мичить протеус, может так получится.

Всем, откликнувшимся, огромное спасибо за ответы и поддержку!
Go to the top of the page
 
+Quote Post
okela
сообщение Dec 6 2006, 16:01
Сообщение #15


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

Группа: Свой
Сообщений: 165
Регистрация: 11-01-05
Из: Украина, г. Одесса
Пользователь №: 1 896



Цитата(-=A.N.G.E.R=- @ Dec 6 2006, 16:48) *
Цитата(okela @ Dec 6 2006, 14:29) *

А в принципе, IMHO, такой способ проверки (с симулятором AVRStudio) не есть корректный.
Регистр UDR физически состоит из двух регистров на одном адресе : один на запись (Тх) , а другой на чтение (Rx) . И ваша запись в UDR соответствует попытке отправить байта на передачу.
А в регистре приема информация появится только посля физического приема данных по линии RxD.

Эт все так, вот только как на уровне программной отладки проверить работоспособность приема?
Буду мичить протеус, может так получится.

Всем, откликнувшимся, огромное спасибо за ответы и поддержку!


Получится без проблем , сам не раз пробовал...
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 11th July 2025 - 07:32
Рейтинг@Mail.ru


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