|
USART - Прерывание раньше времени? |
|
|
|
Aug 4 2008, 02:42
|
Участник

Группа: Новичок
Сообщений: 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
|
|
|
|
|
 |
Ответов
|
Aug 4 2008, 15:29
|

Чайник, 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- И вообще, вопрос у автора не про это. Опять оффтопика полкило ;(
|
|
|
|
|
Aug 4 2008, 16:03
|

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

|
То есть, по-вашему, если функция находится в стандартной библиотеке, то это не стандартная и не библиотечная функция? А какая тогда? С самим кодом вроде бы понятно (getchar() имею в виду), но зачем автор писал своё прерывание, когда можно было бы использовать getchar(), а визард сам бы подключил п/п обработки прерывания? И что такое визард cvavr, по-вашему? Цитата(SysRq @ Aug 4 2008, 14:29)  И вообще, вопрос у автора не про это. Опять оффтопика полкило Ну так, с вас и началось, к себе претензии и предъявляйте. А вопрос автора вроде бы разрешился...
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|