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

 
 
> Прерывания USART., Правильно ли я делаю?
wizzzi
сообщение Nov 8 2012, 12:44
Сообщение #1





Группа: Новичок
Сообщений: 6
Регистрация: 29-10-12
Пользователь №: 74 137



Правильно ли сделано прерывание при приеме символа через USART? Нужны ваши советы для улучшения программы. МК ATSAM3S.
Код
#include "board.h"

/*Настройка Pin.*/
const Pin pins[] = { BOARD_PIN_USART_RXD,
                     BOARD_PIN_USART_TXD,
                     PIN_USART1_SCK,
                     };
/* Считывание символа */
uint16_t USART_Read(Usart *usart)
{
  while (!(usart->US_CSR & US_CSR_RXRDY) == 1) {
}
  return usart->US_RHR;
}

/* обработчик прерываний */
void USART1_IrqHandler(void)
{
    uint32_t status;

    /*  получение состояния */
    status = BOARD_USART_BASE->US_CSR;

    /* если это прерывание при приеме символа, то обрабатываем его */
    if (status & US_CSR_RXRDY)
    {
      USART_Read(BOARD_USART_BASE);
    }
}

static void _ConfigureUsart(uint32_t freq)
{
    uint32_t mode = US_MR_USART_MODE_NORMAL | US_MR_USCLKS_MCK
                    | US_MR_CHMODE_NORMAL | US_MR_CLKO
                    | US_MR_SYNC | US_MR_MSBF
                    | US_MR_CHRL_8_BIT | US_MR_NBSTOP_1_BIT| US_MR_PAR_NO;

    /* Enable the peripheral clock in the PMC */
    PMC_EnablePeripheral( BOARD_ID_USART );

    USART_Configure( BOARD_USART_BASE, mode, freq, BOARD_MCK );
    
    /* включает устройство прерываний */
    NVIC_EnableIRQ( USART1_IRQn );
    
    /* разрешение прерывания при приеме символа */
    BOARD_USART_BASE->US_IER = US_IER_RXRDY;

    /* Enable receiver & transmitter */
    USART_SetTransmitterEnabled( BOARD_USART_BASE, 1 );
    USART_SetReceiverEnabled( BOARD_USART_BASE, 1 );
}

extern int main( void )
{
     /*  Configure pins */
    PIO_Configure( pins, PIO_LISTSIZE( pins ) );

     /* конфигурация USART; Baudrate 115200 */
    _ConfigureUsart(115200);

    while ( 1 )
    {
      USART1_IrqHandler();
    }
}


Сообщение отредактировал wizzzi - Nov 8 2012, 12:45
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 18:46
Рейтинг@Mail.ru


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