d71 0 11 мая, 2007 Опубликовано 11 мая, 2007 · Жалоба само прерывание ловлю, ногой дрыгаю, а вот при попытке сделать передачу байта, который поймал, всё виснет и больше уже ниодной ногой не дергает. -- думаю что поглядев на реализацию пойму где застрял. поделитесь а? (iar) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Igor26 0 11 мая, 2007 Опубликовано 11 мая, 2007 · Жалоба Покажи код инициализации UART и обработчика прерывания RXC. И как ты передаешь принатый байт? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 11 мая, 2007 Опубликовано 11 мая, 2007 (изменено) · Жалоба Да, неплохо было б код посмотреть. А на счёт отправки - получения - в прицепленном файле посмотрите - там вырезанный кусок моей проги - там как раз в прерывании по РХ инициируется пердача. камень - мега 168-я... ////////////////// Функции типа PUT_HEAD или PUT_TAIL - просто ложат в Work.tbuffer[чё то там] нужный байт откуда то. do_str.bb[чё то там] - просто статусный байты для манагера - если они устанавливаются или сбрасываются - то систаймер чё то там делает. wCRC - рассчитанная црц для пакета. структура - Name1 - типа юнион 2-х байт и интегера. ////////////////// А так вроде всё понятно должно быть.. ------------------ да забыл - это в ГЦЦ USART_example.txt Изменено 11 мая, 2007 пользователем Kuzmi4 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DogPawlowa 0 11 мая, 2007 Опубликовано 11 мая, 2007 · Жалоба само прерывание ловлю, ногой дрыгаю, а вот при попытке сделать передачу байта, который поймал, всё виснет и больше уже ниодной ногой не дергает. -- думаю что поглядев на реализацию пойму где застрял. поделитесь а? (iar) Только прием и заталкивание пакета фиксированного пакета с известными первым и последним байтами в линейный буфер. #pragma vector = USART_RXC_vect __interrupt void USART_receive(void) { uchar b = UDR; uart0.rx_flag=1; uart0.rx_char=b; { if (uart0.rx_head == uart0.rx_buf) { if (!(b == uart0.start_rx_char)) return; } *uart0.rx_head = b; uart0.rx_head ++; if (uart0.rx_head >= uart0.rx_buf+uart0.packet_size) uart0.rx_status=Uart0Received; if (b == uart0.end_rx_char) uart0.rx_status=Uart0Received; } } А старт отправки у меня отдельно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться