Не могу отправлять и получать данные от моего собственного usart - SAM4SD16C - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь использовать USART 0 на процессоре SAM4SD16C.Я получил помощь, чтобы начать с этого сайта: SAM4S Xplained USART

Вот код, который я использую (который компилируется):

#define COM_Handler             USART0_Handler

#define USART_SERIAL                 USART0
#define USART_SERIAL_ID              ID_USART0  
#define USART_SERIAL_BAUDRATE        115200
#define USART_SERIAL_CHAR_LENGTH     US_MR_CHRL_8_BIT
#define USART_SERIAL_PARITY          US_MR_PAR_NO
#define USART_SERIAL_STOP_BIT        US_MR_NBSTOP_1_BIT

#define PINS_USART0_PIO      PIOA
#define PINS_USART0_ID       ID_USART0
#define PINS_USART0_TYPE     PIO_PERIPH_A
#define PINS_USART0_ATTR     PIO_DEFAULT
#define PINS_USART0_MASK     (PIO_PA5A_RXD0| PIO_PA6A_TXD0)


uint32_t received_byte;
uint32_t dw_status ;

int main(void)
{
    sysclk_init();
    board_init();
    sysclk_enable_peripheral_clock(USART_SERIAL_ID);
    pio_configure(PINS_USART0_PIO, PINS_USART0_TYPE, PINS_USART0_MASK, PINS_USART0_ATTR);

    const sam_usart_opt_t usart_console_settings = {
        USART_SERIAL_BAUDRATE,
        USART_SERIAL_CHAR_LENGTH,
        USART_SERIAL_PARITY,
        USART_SERIAL_STOP_BIT,
        US_MR_CHMODE_NORMAL
    };

    usart_init_rs485(USART_SERIAL, &usart_console_settings, sysclk_get_peripheral_hz());
    usart_enable_tx(USART_SERIAL);
    usart_enable_rx(USART_SERIAL);
    usart_enable_interrupt(USART_SERIAL, US_IER_RXRDY);
    NVIC_EnableIRQ(USART0_IRQn);

    while (1) 
    {

        while(US_CSR_TXRDY != 0 );
        do
        {
            usart_write(USART_SERIAL, 1);
        }while(US_CSR_RXRDY==0);
        /*dw_status = usart_get_status(USART_SERIAL);
        if(dw_status & US_CSR_RXRDY){
            usart_read(USART_SERIAL, &received_byte);
        }*/

    }
}

Когда я отлаживаюпрограмма, она остается в цикле while (US_CSR_TXRDY! = 0) ... Я написал эту строку, потому что я видел где-то в библиотеке asf, что я должен проверить, готов ли TX к отправке перед отправкой чего-либо .. Как только это будетрешено, я попытаюсь получить на той же плате то, что я передаю, соединяя RX и TX вместе.Я только начинаю работать над этим процессором, и я не очень знаком с ним ...

Спасибо за вашу помощь

1 Ответ

0 голосов
/ 28 сентября 2018

US_CSR_TXRDY - это константа, поэтому while(US_CSR_TXRDY != 0 ) - это бесконечный цикл.Я думаю, что это должно быть while( (USART0->US_CSR & US_CSR_TXRDY) != 0 ).

...