0

我使用 ATSAMD21 微控制器作为从机,它通过 UART 连接到主 MCU(ESP32)。操作系统 - 适用于 ATSAMD21 - FreeRTOS (IDE- MPLAB) 和适用于 ESP32 (FreeRTOS)。

我在 SAMD21 控制器中的应用之一是以连续方式在“while”循环中读取和写入。对于前-

while(1)
{
    memset(ch,0,2);
    SERCOM3_USART_Read(ch,2); 
    SERCOM3_USART_Write(th,2);
}

注意 - 这里的 'ch' 和 'th' 是 char[]。我在这里面临的问题 - 在阅读时不应等待中断,而应执行下一条指令,即“写入”。但在这里它等待主控制器(ESP32)向 SAMD21 发送任何字符,然后它执行下一个“写入”操作并再次等待下一条消息被读取。

我已经在驱动层改变了一些东西——

https://drive.google.com/file/d/1rNHuQp0irYJdlRmpt5qk-6NeG3qgAWmx/view?usp=sharing

在这里,我将第 370 行从 -

while((SERCOM3_REGS->USART_INT.SERCOM_INTFLAG & SERCOM_USART_INT_INTFLAG_RXC_Msk) == 0U)
{
     /* Do nothing */
}

至-

if((SERCOM3_REGS->USART_INT.SERCOM_INTFLAG & SERCOM_USART_INT_INTFLAG_RXC_Msk) == 0U)
{
     /* Do nothing */
}

这样我的问题就解决了,但我一次只能获取一个字节的数据。如果我发送超过 1 个字节,则它正在获取一系列最后的数据。

在这种情况下,如何以连续方式运行我的功能以通过 UART 进行读写。

4

0 回答 0