Например TDA7294

Форум РадиоКот • Просмотр темы - Зацикливается прерывание USART_RXC_vect
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 16, 2024 20:35:37

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Зацикливается прерывание USART_RXC_vect
СообщениеДобавлено: Пн мар 29, 2021 18:49:38 
Прорезались зубы

Зарегистрирован: Чт май 23, 2013 18:31:58
Сообщений: 201
Рейтинг сообщения: 0
Подскажите по какой причине, при отправке одного байта в контроллер, в ответ начинают приходить бесконечное кол-во данных? Вроде как функцтя прерывантя дожна сработать один раз. Отправляю одно двоеточие(:) в аски.

Код:

#include <avr/io.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <util/delay.h>
#include <avr/interrupt.h>

#define F_CPU 8000000UL

#define REDE_PORT PORTD
#define REDE_PIN PD2
#define TRANSMIT    REDE_PORT|=1<<REDE_PIN;
#define RECIEVE    REDE_PORT&=~(1<<REDE_PIN);

void USART_Init( unsigned int ubrr)//Инициализация модуля USART
{
   /* Задаем скорость работы USART */
   UBRRH = (unsigned char)(ubrr>>8);
   UBRRL = (unsigned char)ubrr;
   /* Разрешаем прием и передачу по USART */
   UCSRB=(1<<RXEN)|( 1<<TXEN);
   UCSRB |= (1<<RXCIE);
   UCSRC |= (1 << URSEL)|
   (1 << UCSZ1)|(1 << UCSZ0);
}

void USARTTransmitChar(char c) {
  while(!( UCSRA & (1<<UDRE)));
  UDR = c;
}

ISR(USART_RXC_vect )
{
   TRANSMIT
   USARTTransmitChar('H');
   RECIEVE
   _delay_ms(100);
}

int main(void)
{
   sei();
   USART_Init(51);
   while (1){}
}




На картинке пришедшие данные


Вложения:
Screenshot_2021-03-29_21-52-12.png [82.67 KiB]
Скачиваний: 85
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Зацикливается прерывание USART_RXC_vect
СообщениеДобавлено: Пн мар 29, 2021 19:20:17 
Родился

Зарегистрирован: Пн мар 01, 2021 09:01:13
Сообщений: 15
Рейтинг сообщения: 0
Попробуйте отключить прерывание при вхождении в USART_RXC_vect. Потом снова включить перед выходом из обработки прерывания.

Добавлено after 4 minutes 49 seconds:
В USARTTransmitChar сделайте ожидание окончании передачи перед выходом из функции.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Зацикливается прерывание USART_RXC_vect
СообщениеДобавлено: Вт мар 30, 2021 11:59:02 
Это не хвост, это антенна
Аватар пользователя

Карма: 8
Рейтинг сообщений: 193
Зарегистрирован: Чт июн 10, 2010 20:11:19
Сообщений: 1441
Рейтинг сообщения: 0
Не увидел в вашем прерывании чтения UDR, по которому контроллер понимает что байт прочитан и снимает флаг прерывания. Ну или можете попытаться сами снять флаг, но это сложнее.
Цитата:
Попробуйте отключить прерывание при вхождении в USART_RXC_vect. Потом снова включить перед выходом из обработки прерывания.
Без крайней нужды так делать не стоит. При входе в прерывание глобальные прерывания автоматически запрещаются, потом перед самым выходом вы их вручную разрешаете, но остается небольшой зазор, когда прерывание уже разрешено, но еще не завершилось, то есть не освободило стек. И если в этот момент возникнет еще одно, а потом еще... В общем, срыв стека так и выглядит.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Зацикливается прерывание USART_RXC_vect
СообщениеДобавлено: Вт мар 30, 2021 13:07:11 
Прорезались зубы

Зарегистрирован: Чт май 23, 2013 18:31:58
Сообщений: 201
Рейтинг сообщения: 0
Не увидел в вашем прерывании чтения UDR, по которому контроллер понимает что байт прочитан и снимает флаг прерывания.

Огромное спасибо. Добавил чтение UDR. Все заработало. Бессонная ночь подошла к концу.


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 26


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y