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

 
 
4 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Трабл с 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
bgc
сообщение Aug 15 2006, 08:05
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 313
Регистрация: 30-07-06
Из: Москва
Пользователь №: 19 188



Ну это скорее всего классиaческая тема про фуз бит совместимости с Mega103 - с завода чипы приходят с установленным битом совместимости - второй UART не работате...

Надо просто перевернуть этот бит при прошвке


--------------------
Окружающий мир - не иссякающий источник сюрпризов!
Go to the top of the page
 
+Quote Post
srg_co
сообщение Aug 15 2006, 09:02
Сообщение #3


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

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



Цитата(bgc @ Aug 15 2006, 12:05) *
Ну это скорее всего классиaческая тема про фуз бит совместимости с Mega103 - с завода чипы приходят с установленным битом совместимости - второй UART не работате...

Надо просто перевернуть этот бит при прошвке


Бит не установлен, компиляторы разные, процесор один, фузы устанавливались один раз.
Go to the top of the page
 
+Quote Post
WHALE
сообщение Aug 15 2006, 09:29
Сообщение #4


Знающий
****

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



а работаете через putchar-getchar?Если да,то они для каждого usart свои-putchar0-getchar0 и putchar1-getchar1.Если нет,правильно указан вектор обработчиков USART1?


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


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

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



Цитата(WHALE @ Aug 15 2006, 13:29) *
а работаете через putchar-getchar?Если да,то они для каждого usart свои-putchar0-getchar0 и putchar1-getchar1.Если нет,правильно указан вектор обработчиков USART1?


Вот таблица векторов:

00003c 940c 00f1 JMP _usart1_rx_isr
00003e 940c 0000 JMP 0x00
000040 940c 0114 JMP _usart1_tx_isr
000042 940c 0000 JMP 0x00
000044 940c 0000 JMP 0x00

putchar - getchar - не пользуюсь вообще, пишу свои

//***********************************************
interrupt [USART1_TXC] void usart1_tx_isr( void ) {

char ch;

ch = NextCharStep();
if ( ch )
UDR1 = ch;
;
}

//***********************************************
char NextCharStep( void ) {

if ( ic2 < ls2 ) {
ic2++;
return Test[ic2];
}
else return 0;
}
Go to the top of the page
 
+Quote Post
WHALE
сообщение Aug 15 2006, 10:43
Сообщение #6


Знающий
****

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



Вроде все правильно cranky.gif Попробуй в обработчике поставить сh=0x55 и посмотри осцилом-есть посылка?


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


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

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



Цитата(WHALE @ Aug 15 2006, 14:43) *
Вроде все правильно cranky.gif Попробуй в обработчике поставить сh=0x55 и посмотри осцилом-есть посылка?

В том то и прикол, первая посылка проходит, должно отработать прерывание и послать следущий байт, а оно не отрабатыват !?!?!?
Go to the top of the page
 
+Quote Post
WHALE
сообщение Aug 15 2006, 12:17
Сообщение #8


Знающий
****

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



дык может у тебя NextCharStep() ноль присылает?


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


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

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



Цитата(WHALE @ Aug 15 2006, 16:17) *
дык может у тебя NextCharStep() ноль присылает?

Под IARом то работает.
Go to the top of the page
 
+Quote Post
WHALE
сообщение Aug 15 2006, 15:32
Сообщение #10


Знающий
****

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



Щас поднял старый проект на меге128 с 2usart и вспомнил,что тоже была какая-то трабла с usart1/
Попробуй через прерывание по очистке буфера передачи-у меня такая конструкция работает
interrupt [32] void USART_TX_EMP(void)
{
}


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


кекс
******

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



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


Перенесите весь код в IAR и забудьте про CV как про страшный сон, и все будет работать.

IAR + JtagIce MkII - самодостаточное сочетание.
Go to the top of the page
 
+Quote Post
bodja74
сообщение Aug 15 2006, 21:24
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



Да не IAR нужно учить а ассемблер и знать разницу между командой rjmp и jmp.
jmp это абсолютный переход и занимает 4 байта
rjmp это относительный и занимает 2 байта

компиллер вполне логично выдал адресацию в словах ,тотя по факту в таблице указывается в байтах,
и АВРстудийный компиллер тож адрессацию в листинге дает в байтах,зато результат компиляции в словах.Короче тут черт голову попутает со всем этим.Ставте в таблице rjmp ,а то растянули ее в два раза и помните что в таблице всегда должна быть команда rjmp или reti и все.
Go to the top of the page
 
+Quote Post
srg_co
сообщение Aug 16 2006, 06:34
Сообщение #13


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

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



Цитата(WHALE @ Aug 15 2006, 19:32) *
Щас поднял старый проект на меге128 с 2usart и вспомнил,что тоже была какая-то трабла с usart1/
Попробуй через прерывание по очистке буфера передачи-у меня такая конструкция работает
interrupt [32] void USART_TX_EMP(void)
{
}


А как быть с приемником, там тоже не работает прерывание ?

Цитата(defunct @ Aug 16 2006, 00:25) *
Цитата
Попробовал часть кода перенести в IAR 4.12A, все работает !!!


Перенесите весь код в IAR и забудьте про CV как про страшный сон, и все будет работать.

IAR + JtagIce MkII - самодостаточное сочетание.


Ну очень много переделывать придется sad.gif
Go to the top of the page
 
+Quote Post
WHALE
сообщение Aug 16 2006, 06:41
Сообщение #14


Знающий
****

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



нет,по приему все стандартно через interrupt [USART1_RXC] void usart1_rx_isr(void)
Попробуй,переделывается пара строчек кода-разреши прерывания по очистке буфера TX и поменяй
вектор обработчика.


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


Местный
***

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



Цитата(bodja74 @ Aug 16 2006, 01:24) *
компиллер вполне логично выдал адресацию в словах ,тотя по факту в таблице указывается в байтах,
и АВРстудийный компиллер тож адрессацию в листинге дает в байтах,зато результат компиляции в словах.

Короче тут черт голову попутает со всем этим.


Но как происходят переходы прекрасно видно в симуляторе VMLAB
или PROTEUS и ошибку сразу видно.
Go to the top of the page
 
+Quote Post

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

 


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


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