RT_ASSERT(rx_fifo != RT_NULL); rt_ringbuffer_putchar(&(rx_fifo->rb), UART_GET_RDR(&uart->handle, stm32_uart_get_mask(uart->handle.Init.WordLength, uart->handle.Init.Parity))); rt_hw_serial_isr(serial, RT_SERIAL_EVENT_RX_IND); } /* If the Transmit data register is empty an...
struct rt_serial_rx_fifo *rx_fifo; DMA_HandleTypeDef *DMA_Handle; struct dma_config *dma_config; struct stm32_uart *uart; RT_ASSERT(serial != RT_NULL); RT_ASSERT(flag == RT_DEVICE_FLAG_DMA_TX || flag == RT_DEVICE_FLAG_DMA_RX); uart = rt_container_of(serial, struct stm32_uar...
RT_ASSERT(serial != RT_NULL); rx_fifo = (struct rt_serial_fifo*) serial->serial_rx; RT_ASSERT(rx_fifo != RT_NULL); /* disable interrupt */ level = rt_hw_interrupt_disable(); len = _serial_fifo_calc_data_len(rx_fifo); if ((len == 0) && // non-blocking io mode (serial...
分配serial 的 ringbuffer 大小的代码如下: structrt_serial_rx_fifo*rx_fifo;rx_fifo = (structrt_serial_rx_fifo*) rt_malloc (sizeof(structrt_serial_rx_fifo) + serial->config.bufsz); RT_ASSERT(rx_fifo != RT_NULL); rx_fifo->buffer = (rt_uint8_t*) (rx_fifo +1); rt_memset(rx_f...
{caseRT_SERIAL_EVENT_RX_IND: {intch = -1; rt_base_t level;structrt_serial_rx_fifo*rx_fifo; rx_fifo= (structrt_serial_rx_fifo*)serial->serial_rx; RT_ASSERT(rx_fifo!=RT_NULL);/*interrupt mode receive*/RT_ASSERT(serial->parent.open_flag &RT_DEVICE_FLAG_INT_RX);while(1) ...
这样启用DMA接收时的缓冲区rx_fifo->buffer就是环形的。需要有个变量去记录上次读取结束的地方,如下:u...
rt_inline int _serial_int_rx(struct rt_serial_device *serial, rt_uint8_t *data, int length) { int size; struct rt_serial_rx_fifo* rx_fifo; RT_ASSERT(serial != RT_NULL); size = length; rx_fifo = (struct rt_serial_rx_fifo*) serial->serial_rx; ...
/create RX mailbox/ rt_mb_init(&spi_mb, "UWB_mb", &spi_mb_pool[0], sizeof(spi_mb_pool) / 4, RT_IPC_FLAG_FIFO); 为CS引脚绑定中断函数 rt_pin_attach_irq(4, PIN_IRQ_MODE_FALLING, (void ()(void *))spi_cs_isr, RT_NULL); ...
RT_ASSERT(sem != RT_NULL); // 断言 RT_ASSERT(rt_object_get_type(&sem->parent.parent) ==...
但是串口rx_fifo不管多大会存在溢出,由于官方库在数据溢出时,向中间件层推送了数据,导致应用层接收的...