Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Прерывания USART.
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
wizzzi
Правильно ли сделано прерывание при приеме символа через 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();
    }
}
Genadi Zawidowski
Обработчик прерываний за Вас вызовет аппаратура. Пример проекта под Ваш процессор тут.
spectral1989
вам нужно с самых основ устройства контроллера начать. выяснить что такое прерывание, стек, блоки периферии, как все это работает и т.д.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.