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

 
 
> Трабл с USART1 в Mega64, Не работают прерывания !!!
srg_co
сообщение Aug 15 2006, 07:59
Сообщение #1


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

Группа: Свой
Сообщений: 131
Регистрация: 22-03-05
Из: Краснодар
Пользователь №: 3 600



Проект написан в CodeWizardAVR V1.24.8d Professional,
Инициализация портов USART:

// USART0 initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART0 Receiver: On
// USART0 Transmitter: On
// USART0 Mode: Asynchronous
// USART0 Baud rate: 4800
UCSR0A=0x00;
UCSR0B=0xD8;
UCSR0C=0x06;
UBRR0H=0x00;
UBRR0L=0x5F;

// USART1 initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART1 Receiver: On
// USART1 Transmitter: On
// USART1 Mode: Asynchronous
// USART1 Baud rate: 4800
UCSR1A=0x00;
UCSR1B=0xD8;
UCSR1C=0x06;
UBRR1H=0x00;
UBRR1L=0x5F;

USART0 - работает без проблем
USART1 - не отрабатывают прерывания: usart1_rx_isr, usart1_tx_isr

Проверял через AVRStudio+JTAGICEmkII, регистры проиницализированы нормально.

Попробовал часть кода перенести в IAR 4.12A, все работает !!!

Может кто-то сталкивался с подобными глюками help.gif

Как побороться, проект большой, не хотелось бы переписывать под IAR !
Go to the top of the page
 
+Quote Post
4 страниц V  < 1 2 3 4 >  
Start new topic
Ответов (15 - 29)
WHALE
сообщение Aug 16 2006, 08:33
Сообщение #16


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



Во блин,иногда они возвращаются help.gif Чур меня blink.gif
Щас пойдут ссылки на сайт с 3 буквами,где давно решены все проблемы человечества. santa2.gif
Изыди,нечистый. smile3009.gif


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
srg_co
сообщение Aug 16 2006, 09:51
Сообщение #17


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

Группа: Свой
Сообщений: 131
Регистрация: 22-03-05
Из: Краснодар
Пользователь №: 3 600



Цитата(WHALE @ Aug 16 2006, 12:33) *
Во блин,иногда они возвращаются help.gif Чур меня blink.gif
Щас пойдут ссылки на сайт с 3 буквами,где давно решены все проблемы человечества. santa2.gif
Изыди,нечистый. smile3009.gif


Это Вы про что ??

VMLAB/PROTEUS ?
Go to the top of the page
 
+Quote Post
WHALE
сообщение Aug 16 2006, 11:25
Сообщение #18


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



Это я про господина Shurmas,вы не в курсе про происходившее здесь изгнание духов.
ну да бог с ним.
srg_co как дела с USART1?


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
srg_co
сообщение Aug 16 2006, 11:47
Сообщение #19


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

Группа: Свой
Сообщений: 131
Регистрация: 22-03-05
Из: Краснодар
Пользователь №: 3 600



Цитата(WHALE @ Aug 16 2006, 15:25) *
Это я про господина Shurmas,вы не в курсе про происходившее здесь изгнание духов.
ну да бог с ним.
srg_co как дела с USART1?


Попробую поработать с USART_TX_EMP.

По приему то стандартно, но не мычит ведь, ввобще не принимает ни одного байта.
Go to the top of the page
 
+Quote Post
WHALE
сообщение Aug 16 2006, 12:15
Сообщение #20


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



так еще и прием не работает?не,че-то в консерватории не-то.Приведите текст приемного модуля.


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
srg_co
сообщение Aug 16 2006, 12:22
Сообщение #21


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

Группа: Свой
Сообщений: 131
Регистрация: 22-03-05
Из: Краснодар
Пользователь №: 3 600



Цитата(WHALE @ Aug 16 2006, 16:15) *
так еще и прием не работает?не,че-то в консерватории не-то.Приведите текст приемного модуля.


interrupt [USART1_RXC] void usart1_rx_isr( void ) {

char ch;

PORTD.4 = ~PORTD.4;
ch = UDR1;
BuffStep[RecvStp] = ch;
RecvStp++;
//переполение буфера
if ( RecvStp > BUFFSIZE-1 ) {
RecvStp = 0;
memset( BuffStep, 0x00, BUFFSIZE );
return;
}
//строка принята, выведем ее
if ( ch == CRLF ) {
PutStrCom( BuffStep );
}
}

void PutStrCom( char *str ) {

strcpy( BuffSend, str );
strcat( BuffSend, CrLf );
ic = 0;
ls = strlen( BuffSend );
UDR0 = BuffSend[ic];

К PORTD.4 подключен светодиодик, при приеме должен мигать, не мигает.
Go to the top of the page
 
+Quote Post
WHALE
сообщение Aug 16 2006, 13:36
Сообщение #22


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



можно несколько замечаний?
BuffStep[RecvStp] = ch;
RecvStp++;
можно обьединить BuffStep[RecvStp++] = ch;
PORTD.4 = ~PORTD.4;-по моему,так работать не будет
я делал по другому
bit morg;
morg ^= 1;PORTD.4 =morg;
а что за команда return из прерывания?В CV она не нужна,все делается автоматом по закрытии скобок
обработчика.
Да,а что вы принимаете?Там точно есть посылки и протокол совпадает с установленным вами?


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
srg_co
сообщение Aug 17 2006, 06:01
Сообщение #23


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

Группа: Свой
Сообщений: 131
Регистрация: 22-03-05
Из: Краснодар
Пользователь №: 3 600



Цитата(WHALE @ Aug 16 2006, 17:36) *
можно несколько замечаний?
BuffStep[RecvStp] = ch;
RecvStp++;
можно обьединить BuffStep[RecvStp++] = ch;
PORTD.4 = ~PORTD.4;-по моему,так работать не будет
я делал по другому
bit morg;
morg ^= 1;PORTD.4 =morg;
а что за команда return из прерывания?В CV она не нужна,все делается автоматом по закрытии скобок
обработчика.
Да,а что вы принимаете?Там точно есть посылки и протокол совпадает с установленным вами?


PORTD.4 = ~PORTD.4; - это работает в CVAVR

return - что бы пропустить выполнение следующего кода.

Посылки и протокол совпадает полностью.



Цитата(WHALE @ Aug 16 2006, 10:41) *
нет,по приему все стандартно через interrupt [USART1_RXC] void usart1_rx_isr(void)
Попробуй,переделывается пара строчек кода-разреши прерывания по очистке буфера TX и поменяй
вектор обработчика.


Попробовал, без измененей, отправляет один байт и усе.
Go to the top of the page
 
+Quote Post
WHALE
сообщение Aug 17 2006, 06:30
Сообщение #24


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



попробуй тогда действительно в симуляторе каком-нибудь-avr-studio,vmlab,proteus.
у тебя что-то не-то во внешних программных модулях.


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
srg_co
сообщение Aug 17 2006, 06:38
Сообщение #25


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

Группа: Свой
Сообщений: 131
Регистрация: 22-03-05
Из: Краснодар
Пользователь №: 3 600



Цитата(WHALE @ Aug 17 2006, 10:30) *
попробуй тогда действительно в симуляторе каком-нибудь-avr-studio,vmlab,proteus.
у тебя что-то не-то во внешних программных модулях.

Пробовал в avr-studio+jtagicemk2, криминала не нашел, биты в конфигурации порта установлены правильно.
Go to the top of the page
 
+Quote Post
pokos
сообщение Aug 17 2006, 06:57
Сообщение #26


Местный
***

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



Похоже, застревает оно в прерывании, выйти не могёт.

Сообщение отредактировал pokos - Aug 17 2006, 07:01
Go to the top of the page
 
+Quote Post
aesok
сообщение Aug 17 2006, 07:01
Сообщение #27


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(srg_co @ Aug 16 2006, 16:22) *
Цитата(WHALE @ Aug 16 2006, 16:15) *

так еще и прием не работает?не,че-то в консерватории не-то.Приведите текст приемного модуля.


interrupt [USART1_RXC] void usart1_rx_isr( void ) {

char ch;

.....
//строка принята, выведем ее
if ( ch == CRLF ) {
PutStrCom( BuffStep );
}
}




Вы и не сможете вывести более 1 смвола с помощю PutStrCom, вы же находитесь а обработчике прерывания, и прерывыния запрещенны.

Анатолий.
Go to the top of the page
 
+Quote Post
Shurmas
сообщение Aug 17 2006, 07:37
Сообщение #28


Местный
***

Группа: Новичок
Сообщений: 232
Регистрация: 24-06-06
Пользователь №: 18 332



Цитата(srg_co @ Aug 17 2006, 10:01) *
PORTD.4 = ~PORTD.4; - это работает в CVAVR


~PORTD.4; так тоже работает в CVAVR
Go to the top of the page
 
+Quote Post
srg_co
сообщение Aug 17 2006, 08:27
Сообщение #29


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

Группа: Свой
Сообщений: 131
Регистрация: 22-03-05
Из: Краснодар
Пользователь №: 3 600



Цитата(Shurmas @ Aug 17 2006, 11:37) *
Цитата(srg_co @ Aug 17 2006, 10:01) *

PORTD.4 = ~PORTD.4; - это работает в CVAVR


~PORTD.4; так тоже работает в CVAVR


Нет, не будет.

Цитата(aesok @ Aug 17 2006, 11:01) *
Цитата(srg_co @ Aug 16 2006, 16:22) *

Цитата(WHALE @ Aug 16 2006, 16:15) *

так еще и прием не работает?не,че-то в консерватории не-то.Приведите текст приемного модуля.


interrupt [USART1_RXC] void usart1_rx_isr( void ) {

char ch;

.....
//строка принята, выведем ее
if ( ch == CRLF ) {
PutStrCom( BuffStep );
}
}




Вы и не сможете вывести более 1 смвола с помощю PutStrCom, вы же находитесь а обработчике прерывания, и прерывыния запрещенны.

Анатолий.


Вот PutStrCom:

void PutStrCom( char *str ) {

strcpy( BuffSend, str );
strcat( BuffSend, CrLf );
ic = 0;
ls = strlen( BuffSend );
UDR0 = BuffSend[ic];
}

Она как раз и вывод один символ в другой порт, а продолжает выводить уже прерывание USART0
Go to the top of the page
 
+Quote Post
WHALE
сообщение Aug 17 2006, 08:46
Сообщение #30


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



Цитата(aesok @ Aug 17 2006, 11:01) *
Цитата(srg_co @ Aug 16 2006, 16:22) *

Цитата(WHALE @ Aug 16 2006, 16:15) *

так еще и прием не работает?не,че-то в консерватории не-то.Приведите текст приемного модуля.


interrupt [USART1_RXC] void usart1_rx_isr( void ) {

char ch;

.....
//строка принята, выведем ее
if ( ch == CRLF ) {
PutStrCom( BuffStep );
}
}




Вы и не сможете вывести более 1 смвола с помощю PutStrCom, вы же находитесь а обработчике прерывания, и прерывыния запрещенны.

Анатолий.

При чем тут прерывание,он фукцию вызывает из обработчика,что конвенцией не запрещено,хоть и не
желательно.
Насчет return-по моему лучше будет else if ( ch == CRLF ) {
и насчет проверки в симуляторе-то что регистры проинициализрованы правильно,понятно,но что происх
одит в обработчиках?Отключите глаз,попробуйте в софтовом эмуляторе студии поставить галочку в
usart1->ucsra->rxc.
вы попадете вобработчик,и посмотрите,что там происходит


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post

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

 


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


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