串口接收使用方式问题

发布于 2020-07-27 23:10:12

请问在rt_hw_serial_register函数中,若RT_DEVICE_FLAG_INT_RX和RT_DEVICE_FLAG_DMA_RX均选中,到底是用哪种串口接收方式?中断接收还是DMA接收?谢谢!

查看更多

关注者
0
被浏览
165
whj467467222
whj467467222 2020-07-28
static rt_size_t rt_serial_read(struct rt_device *dev,
                                rt_off_t          pos,
                                void             *buffer,
                                rt_size_t         size)
{
    struct rt_serial_device *serial;

    RT_ASSERT(dev != RT_NULL);
    if (size == 0) return 0;

    serial = (struct rt_serial_device *)dev;

    if (dev->open_flag & RT_DEVICE_FLAG_INT_RX)
    {
        return _serial_int_rx(serial, (rt_uint8_t *)buffer, size);
    }
#ifdef RT_SERIAL_USING_DMA
    else if (dev->open_flag & RT_DEVICE_FLAG_DMA_RX)
    {
        return _serial_dma_rx(serial, (rt_uint8_t *)buffer, size);
    }
#endif /* RT_SERIAL_USING_DMA */    

    return _serial_poll_rx(serial, (rt_uint8_t *)buffer, size);
}

看一下这个代码你应该就明白了。
flags的判断是有优先级的,中断 -> DMA -> 轮询。

如果我的回答解决了你的问题,记得点个采纳哦

1 个回答

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友