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

 
 
> USART - Прерывание раньше времени?
Anub
сообщение Aug 4 2008, 02:42
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 47
Регистрация: 26-05-08
Пользователь №: 37 825



Код
bit sf=0;

Код
interrupt [USART_RXC] void usart_rx_isr(void)
{
char status,data;
status=UCSRA;
data=UDR;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
   {
   rx_buffer[rx_wr_index]=data;
   if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
   if (++rx_counter == RX_BUFFER_SIZE)
      {
      rx_counter=0;
      rx_buffer_overflow=1;
      };
   };
  sf=1;
}

Код
void check(void)
{  
     if (sf!=0)
       {
         char c;
         c=getchar();
           if (c!="")
               {
                 PORTA=0x07;
               } else {
                 PORTA=0x0B;
               }
         }
}

При запуске я получаю результат проверки условия в функции check, т. е. sf==1, и по идее было вызвано прерывание по приему символа, это как так, у меня нога RXD в воздухе весит...

Сообщение отредактировал Anub - Aug 4 2008, 02:42
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SysRq
сообщение Aug 4 2008, 15:29
Сообщение #2


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



А std* это по-вашему что? Стандартная библиотека! Вот я и говорю, что функцию создает визард, она не стандартная, и как она там связана с приемным буфером проверять смысла нет, там все работает.

Вот вам код искомый, как его генерит визард (но для второго USART'а ATMega128, потому и единичка везде):
Цитата
// Get a character from the USART1 Receiver buffer
#pragma used+
char getchar1(void)
{
char data;
while (rx_counter1==0);
data=rx_buffer1[rx_rd_index1];
if (++rx_rd_index1 == RX_BUFFER_SIZE1) rx_rd_index1=0;
#asm("cli")
--rx_counter1;
#asm("sei")
return data;
}
#pragma used-


И вообще, вопрос у автора не про это. Опять оффтопика полкило ;(
Go to the top of the page
 
+Quote Post
=GM=
сообщение Aug 4 2008, 16:03
Сообщение #3


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



То есть, по-вашему, если функция находится в стандартной библиотеке, то это не стандартная и не библиотечная функция? А какая тогда?

С самим кодом вроде бы понятно (getchar() имею в виду), но зачем автор писал своё прерывание, когда можно было бы использовать getchar(), а визард сам бы подключил п/п обработки прерывания? И что такое визард cvavr, по-вашему?

Цитата(SysRq @ Aug 4 2008, 14:29) *
И вообще, вопрос у автора не про это. Опять оффтопика полкило

Ну так, с вас и началось, к себе претензии и предъявляйте. А вопрос автора вроде бы разрешился...


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Anub   USART - Прерывание раньше времени?   Aug 4 2008, 02:42
- - haker_fox   Цитата(Anub @ Aug 4 2008, 11:42) При запу...   Aug 4 2008, 03:20
|- - defunct   Цитата(haker_fox @ Aug 4 2008, 06:20) if ...   Aug 4 2008, 10:37
|- - 777777   Цитата(defunct @ Aug 4 2008, 14:37) ...   Aug 4 2008, 11:34
|- - defunct   Цитата(777777 @ Aug 4 2008, 14:34) if (c ...   Aug 4 2008, 13:16
- - =GM=   Цитата(Anub @ Aug 4 2008, 01:42) При запу...   Aug 4 2008, 13:16
- - SysRq   Обьявить sf как volatile, RXD завести куда следует...   Aug 4 2008, 14:37
|- - =GM=   Цитата(SysRq @ Aug 4 2008, 13:37) Остальн...   Aug 4 2008, 15:14
- - WHALE   Цитата(=GM= @ Aug 4 2008, 20:03) То есть,...   Aug 5 2008, 11:39
- - =GM=   Цитата(WHALE @ Aug 5 2008, 10:39) а getch...   Aug 5 2008, 11:53
- - SysRq   Цитата(=GM= @ Aug 5 2008, 15:53) Если бы ...   Aug 5 2008, 12:27
- - =GM=   Цитата(SysRq @ Aug 5 2008, 11:27) А он та...   Aug 5 2008, 12:33
- - SysRq   Цитата(=GM= @ Aug 5 2008, 16:33) Что, и о...   Aug 5 2008, 15:15
- - =GM=   Цитата(SysRq @ Aug 5 2008, 14:15) Нет, эт...   Aug 5 2008, 16:02
- - SysRq   Цитата(=GM= @ Aug 5 2008, 20:02) Ну как ж...   Aug 5 2008, 17:23
- - =GM=   Ну и кто тут флеймит? Модераторы, нельзя ли убрат...   Aug 5 2008, 19:28


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

 


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


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