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

 
 
> Прерывания UART на STM8S, Не втыкаю как с прерываниями работать
den1s
сообщение Oct 22 2012, 09:34
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 17-03-11
Пользователь №: 63 677



здравствуйте, только начал осваивать STM8, да еще взялся использовать их родную библиотеку. Но пока как-то понимание приходит неспеша. Вопрос собственно в организации прерываний - нужно на прерываниях замутить прием/передачу по UART2 через буфер (очередь).

функция отправки символа проверяет свободен ли передатчик и пустой ли сейчас буфер (очередь) и если это так то отправляет байт, иначе кладет его в буфер (очередь)
Код
__monitor void UART_PutChar(uint8_t sym)
{
  if((UART2_GetFlagStatus(UART2_FLAG_TXE) == SET) && (txCount == 0))
    UART2_SendData8(sym);
  else
  {
    if (txCount < SIZE_BUF)
    {
      uartTxBuf[txBufTail] = sym;
      txCount++;
      txBufTail++;
      txBufTail = txBufTail % SIZE_BUF;
    }
  }
}

обработчик прерывания проверяет есть ли символы в буфере (очереде) и если они есть отправляет очередной символ
Код
INTERRUPT_HANDLER(UART2_TX_IRQHandler, 20)
{
   if (txCount > 0)
   {
     UART2_SendData8(uartTxBuf[txBufHead]);
     txCount--;
     txBufHead++;
     if (txBufHead == SIZE_BUF)
       txBufHead = 0;
   }
}

никак не могу разобраться как снимать флаг прерывания (как я понял, сам он не скидывается как у атмела) ну или что там нужно с ним сделать, ибо после разрешения прерываний сваливаюсь в обработчик.

Инициализацию делаю так:
Код
void UART_init(void)
{
  UART2_DeInit();
  UART2_Init((uint32_t)UART_SPEED, UART2_WORDLENGTH_8D, UART2_STOPBITS_1, UART2_PARITY_NO,
              UART2_SYNCMODE_CLOCK_DISABLE, UART2_MODE_TXRX_ENABLE);
  UART2_ITConfig(UART2_IT_TC, ENABLE);
  UART2_ITConfig(UART2_IT_RXNE_OR, ENABLE);
  UART2_Cmd(ENABLE);
  enableInterrupts();
}

извиняйте за ламерство, но как-то тяжко мне дается это дело)


--------------------
"Одной мотивации недостаточно: если у вас есть идиот и вы его мотивировали, то в результате вы получите мотивированного идиота." - Джим Рон
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 27th June 2025 - 16:20
Рейтинг@Mail.ru


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