Easyelectronics.ru

Электроника для всех
Текущее время: 24 апр 2018, 15:51

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



    • JLCPCB - Платы прототипов всего за 2$ c бесплатной доставкой (при первом заказе)
    • 10 PCBs за $2 для 2 слоев, $15 для 4 слойной, $74 для 6 слойной платы.
    • Крупнейший китайский производитель прототипных плат. 290000+ клиентов & 8000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин радиодеталей.

Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Обработчик прерываний срабатывает только первый раз
СообщениеДобавлено: 25 дек 2017, 17:19 
Только пришел

Зарегистрирован: 25 дек 2017, 15:56
Сообщения: 5
Работаю с ST-Link на базе STM8S003K3. Проблема в том, что МК не обрабатывает второе и больше прерывание от получения байта по UART. Можно что-то получить только после того, как что-то отправишь назад, то есть добавляя в код хотя бы UART_DR = ‘\r’, всё сразу начинает работать. А без этого он прочтёт один раз и откажется снова читать, пока мы хоть что-то не отправим назад.

То есть если раскомментировать комментарий в обработчике, он начнёт копить буфер. Если нет, то примет данные один раз, и больше прерывание не случится.

Код:
ISR(UART1_interrupt, UART1_R_RXNE_vector) // Прерывание по UART
{
  data[cnt] = UART1_DR;

     
//  while(!UART1_SR_TXE);
// 
//  UART1_DR = '\r';

  ++cnt;
}


В main вот это

Код:
int main()
{       

  CLK_CKDIVR=0x00; //делитель частоты

  CLK_PCKENR1 |= 1 << 3;  //  Включаем тактирование на модуль UART в stm8s003k3

  PD_DDR_bit.DDR5 = 1; // TX
  PD_DDR_bit.DDR6 = 0; // RX
 
  UART1_CR1_bit.M     = 0;  // Фрейм состоит из 8 бит
  UART1_CR1_bit.PCEN  = 0;  // PCEN: Parity control enable (без четности (все биты фрейма - данные))
  UART1_CR3_bit.STOP  = 0;  // 1 стоп бит
 
  UART1_BRR2  = 0x03;       // Важно: BRR2 устанавливается перед BRR1
  UART1_BRR1  = 0x68;       // 9600 kbps на 16 MHz / Вычисляется по таблице и формуле  в даташите
  UART1_CR2_bit.TEN   = 1;  // Разрешаем передачу
  UART1_CR2_bit.REN   = 1;  // Разрешаем приём
   
  UART1_CR2_bit.RIEN = 1;        // Прерывание по имению чего-либо в приемном регистре
  asm("RIM");

  while(1);

}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обработчик прерываний срабатывает только первый раз
СообщениеДобавлено: 25 дек 2017, 18:46 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 4883
В обработчике RXNE надо сбросить бит RXNE


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обработчик прерываний срабатывает только первый раз
СообщениеДобавлено: 25 дек 2017, 23:06 
Только пришел

Зарегистрирован: 25 дек 2017, 15:56
Сообщения: 5
axill писал(а):
В обработчике RXNE надо сбросить бит RXNE


Он сбрасывается автоматически. Я сбрасывал и принудительно - не помогает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обработчик прерываний срабатывает только первый раз
СообщениеДобавлено: 25 дек 2017, 23:22 
Старожил

Зарегистрирован: 11 сен 2012, 11:19
Сообщения: 4684
RXNE сбрасывается не автоматически а вычиткой DATA регистра . В добавок забрасывается записью нуля , но только в Uart2 и Uart3.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обработчик прерываний срабатывает только первый раз
СообщениеДобавлено: 25 дек 2017, 23:34 
Только пришел

Зарегистрирован: 25 дек 2017, 15:56
Сообщения: 5
dosikus_2 писал(а):
RXNE сбрасывается не автоматически а вычиткой DATA регистра . В добавок забрасывается записью нуля , но только в Uart2 и Uart3.


Это и подразумевается. У меня в обработчике есть чтение DR регистра. То есть всё сбрасывается. И в окне Watch я флаги проверял. Всё ещё не работает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обработчик прерываний срабатывает только первый раз
СообщениеДобавлено: 26 дек 2017, 10:33 
Старожил
Аватара пользователя

Зарегистрирован: 13 май 2010, 01:32
Сообщения: 838
Откуда: Ижевск
поменяй проц

_________________
Attiny13aПо20р.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обработчик прерываний срабатывает только первый раз
СообщениеДобавлено: 26 дек 2017, 12:41 
Только пришел

Зарегистрирован: 25 дек 2017, 15:56
Сообщения: 5
selevo писал(а):
поменяй проц


На самом деле, поменять надо было только терминал. Забавно.

Всем спасибо!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обработчик прерываний срабатывает только первый раз
СообщениеДобавлено: 26 дек 2017, 12:52 
Старожил

Зарегистрирован: 11 сен 2012, 11:19
Сообщения: 4684
Вот здесь подробней. Снова что ли гадость от Br@y ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обработчик прерываний срабатывает только первый раз
СообщениеДобавлено: 26 дек 2017, 18:00 
Только пришел

Зарегистрирован: 25 дек 2017, 15:56
Сообщения: 5
dosikus_2 писал(а):
Вот здесь подробней. Снова что ли гадость от Br@y ?

Да не. Вообще, левое какое-то.
Изображение


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

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


Кто сейчас на конференции

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


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

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

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB