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

 
 
> опять USART на 16 меге, прерывание по приёму
*SERG
сообщение Jan 29 2006, 08:11
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 274
Регистрация: 10-08-05
Из: Екатеринбург
Пользователь №: 7 517



Регистры настроил так:

UCSRA=0x00;
UCSRB=0B11011000;
UCSRC=0B10000110;
UBRRH=0x00;
UBRRL=0x65;

подпрограммы прерывания

interrupt [USART_RXC] void usart_rx_isr(void)
{

prinat_ussap=UDR;
est_dannie=1;
zapis_end=0;

}


// USART Transmitter interrupt service routine
interrupt [USART_TXC] void usart_tx_isr(void)
{
#asm
nop;
#endasm
}

Пишу в CVAVR.

Проблемма в том, что когда приходит первый байт, прерывание не происходит, а вот когда уже второй байт пришёл, то происходит прерывание, переменной "prinat_ussap" присваивается значение первого байта blink.gif
А теоретически при приходе первого байта доложно происходить прерывание. Регистр UCSRB, больше не трогаю, все прерывания разрешаю в самом начале, больше не запрещаю.
Где собака порылась??? smile.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
*SERG
сообщение Jan 30 2006, 02:54
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 274
Регистрация: 10-08-05
Из: Екатеринбург
Пользователь №: 7 517



1. Кварц встроенный, 16МГц
2. 9600
3. все прерывания разрешаю в самом начале, больше не запрещаю.
т.е. бит установлен
4. посмотрю
5. в даташите вроде пример не по прерываниям а всё время проверяется бит (может ошибаюсь)

Да и проблемма то не в этом, прием и передача идёт чётко.
Не понятно почему при приходе первого байта не возникает прерывания???

Да я б сам не против такой конструкции, только CVAVR не хочет так понимать
Go to the top of the page
 
+Quote Post
Dominikanez
сообщение Jan 30 2006, 06:42
Сообщение #3





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



Цитата(*SERG @ Jan 30 2006, 08:54) *
1. Кварц встроенный, 16МГц
2. 9600

0x67 - вот более близкое значение UBBR для 9600 @ 16Mhz

Цитата(*SERG @ Jan 30 2006, 08:54) *
3. все прерывания разрешаю в самом начале, больше не запрещаю.
т.е. бит установлен

перед разрешением прерываний попробуй очистить флаг RXC в регистре UCSRA,
это можно сделать записав в этот бит единицу:
UCSRA|=(1<<RXC); или UCSRA|=0x80;
если не поможет, то также, перед разрешением прерывания, попробуй прочитать содержимое UDR:

unsigned char temp;
temp=UDR;
Go to the top of the page
 
+Quote Post



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

 


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


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