Async Usart IO_READ всегда null SAMD20J16 - PullRequest
       52

Async Usart IO_READ всегда null SAMD20J16

0 голосов
/ 27 декабря 2018

Совершенно новичок в программной среде Atmel, обычно используют устройства MPLab / PIC, но для моего проекта мне нужно было создать маршрутизатор UART, способный соединять 6 устройств UART вместе, поэтому я выбрал микросхему SAMD20J16.До сих пор iv'e настраивал драйверы, используя ATMEL start с драйверами USART HAL_ASYNC для всех модулей USART.

Я получил устройство для записи во все 6 модулей USART и получил прерывание чтения для запуска, но я не могу прочитать из буфера usart.Сейчас я сократил его до минимального возможного кода, чтобы попытаться выяснить, почему он не работает, это, вероятно, простой упущение с моей стороны, но я искал в Интернете 2 дня и всю документацию, которую я могу найти, используяДрайверы HAL_ASYNC в ASF4 в лучшем случае ненадежны.

#include <atmel_start.h>



int main(void)
{
    int nRead=0;
    uint8_t rxPData;

    /* Initializes MCU, drivers and middleware */
    atmel_start_init();

    //DECLARE UART STRUCTURTES
    struct io_descriptor *uartD1;
    usart_async_get_io_descriptor(&USART_0, &uartD1);
    usart_async_enable(&USART_0);

    struct io_descriptor *uartP;
    usart_async_get_io_descriptor(&USART_1, &uartP);
    usart_async_enable(&USART_1);


    struct io_descriptor *uartD3;
    usart_async_get_io_descriptor(&USART_2, &uartD3);
    usart_async_enable(&USART_2);

    struct io_descriptor *uartD4;
    usart_async_get_io_descriptor(&USART_3, &uartD4);
    usart_async_enable(&USART_3);

    struct io_descriptor *uartS;
    usart_async_get_io_descriptor(&USART_4, &uartS);
    usart_async_enable(&USART_4);

    struct io_descriptor *uartD2;io_write(uartP, (uint8_t *) "UART P\r\n", 8);
    usart_async_get_io_descriptor(&USART_5, &uartD2);
    usart_async_enable(&USART_5);

    void uartP_callback(const struct usart_async_descriptor *const io_descriptor){
        if(usart_async_is_rx_not_empty(uartP)){
                io_write(uartP, (uint8_t *) "TEST P\r\n", 8);


                    nRead=io_read(uartP,&rxPData,6);

                    io_write(uartP,&rxPData,nRead);
        }



    }

    usart_async_register_callback(&USART_1, USART_ASYNC_RXC_CB, uartP_callback);

    while (1) {


    }     
}

Прямо сейчас наблюдаемое поведение происходит каждый раз, когда я отправляю пакет UART, он запускает прерывание, передает IF rx_buffer_is_not_empty и отправляет обратно "TEST P \ r \ n".Я добавил эту строку кода после некоторого тестирования, чтобы посмотреть, сработало ли прерывание.

Тем не менее, независимо от того, какой размер ввода я ему отправляю, он никогда не передает обратно какие-либо данные, которые были ему отправлены.

Сейчас я просто пытаюсь проверить, могу ли я получать и передавать по всем портам usart, окончательный код не будет передавать внутри входящих прерываний.

...