rt_hw_serial_isr(serial, RT_SERIAL_EVENT_TX_DONE); } /* Clear Transmission complete interrupt flag ( ISR Register ) */ UART_INSTANCE_CLEAR_FUNCTION(&(uart->handle), UART_FLAG_TC); } else { if (__HAL_UART_GET_FLAG(&(uart->handle), UART_FLAG_ORE) != RESET) { LOG_E("(%s) ...
serial = &uart->serial; RT_ASSERT(serial != RT_NULL); level = rt_hw_interrupt_disable(); trans_total_index = __HAL_DMA_GET_COUNTER(&(uart->dma_tx.handle)); rt_hw_interrupt_enable(level); if (trans_total_index) return; rt_hw_serial_isr(serial, RT_SERIAL_EVENT_TX_DMADONE); }...
Copy 这段代码是uart_isr 的一部分专门处理接收中断触发的数据,作用很简单,如果读数据寄存器不为空,且RXNE为中断使能状态,则调用rt_hw_serial_isr触发读数据操作,关于该函数的响应事件类型如下: #defineRT_SERIAL_EVENT_RX_IND0x01/* 接收一个字节数据*/#defineRT_SERIAL_EVENT_TX_DONE0x02/* 一个字节数据发送...
rt_hw_serial_isr(&data->serial,RT_SERIAL_EVENT_TX_DONE); rt_event_send(&data->tx_event, CDC_TX_HAS_SPACE); } 代码部分省略简化 vcom_tx_thread_entry 主要做了几件事: 1)查询tx_ringbuffer是否有数据,无数据继续查询 2)发现数据,发送USB IO写入请求,向Host数据 3)如ep_out一样,会进入_data_...
STM32 里面 驱动根本就没调用, RT_SERIAL_EVENT_TX_DONE 。所以stm32 驱动还是不完善的 Contributor Author Linjieqiang commented Dec 2, 2020 嗯 所以暂时这个还是一个 todo 的状态. mysterywolf added the proposal label Feb 25, 2021 Ryan-CW-Code mentioned this issue Oct 29, 2024 [drivers][seri...
{structrt_device parent;conststructrt_uart_ops *ops;structserial_configure config;void*serial_rx;void*serial_tx; }; typedefstructrt_serial_device rt_serial_t; /** * uart operators*/structrt_uart_ops { rt_err_t (*configure)(structrt_serial_device *serial,structserial_configure *cfg); ...
void *serial_rx; // 串口接收缓存 void *serial_tx; // 串口发送缓存 #ifdef RT_SERIAL_USING_DMA // 串口收发缓存和 DMA 使用的二级缓存分开 rt_size_t dma_idx_rx; rt_uint8_t serial_dma_rx[RT_SERIAL_DMA_BUFSZ]; // DMA 接收缓存 ...
}//wait Tx emptywhile(!(uart->uart_device->ustat &RT_SERIAL_EVENT_TX_DONE)); uart->uart_device->utxh = (*ptr &0xFF);++ptr;--size; } }//返回写入成功的字节数return(rt_uint32_t)ptr -(rt_uint32_t)buffer; }//设备控制操作//还未实现staticrt_err_t uart_control(rt_device_t ...
(serial->config.bufsz - (rx_fifo->get_index - rx_fifo->put_index)); 1161 rt_hw_interrupt_enable(level); 1162 1163 serial->parent.rx_indicate(&serial->parent, rx_length); 1164 } 1165 break; 1166 } 1167 case RT_SERIAL_EVENT_TX_DONE: 1168 { "components/drivers/serial/serial.c" ...
RT_SERIAL_EVENT_TX_DMADONE串口发送 DMA 中断。这个应该保证 DMA 发送完本次 DMA 缓存中的所有数据,也就是对于 stm32 芯片是 DMA 计数达到 0。 使用注意 RT_SERIAL_FIFO_BUFSZRT_SERIAL_DMA_BUFSZ两个的定义和实际是否合适,小数据量通信可以定义小点儿,数据量大的情况适当调整这两个值。