stm32_dma_config(serial, ctrl_arg); #endif stm32_dma_config() 的内容主要是完成 DMA 的配置 static void stm32_dma_config(struct rt_serial_device *serial, rt_ubase_t flag) { struct rt_serial_rx_fifo *rx_fifo; DMA_HandleTypeDef *DMA_Handle; struct dma_config *dma_config; struct stm32...
serial->serial_rx = rx_fifo;/* configure fifo address and length to low level device */serial->ops->control(serial, RT_DEVICE_CTRL_CONFIG, (void *) RT_DEVICE_FLAG_DMA_RX); } dev->open_flag |= RT_DEVICE_FLAG_DMA_RX; } #endif/* RT_SERIAL_USING_DMA */... #ifdef RT_SERIAL_U...
int (*getc)(struct rt_serial_device *serial); // 启动发送,多数是开启串口外设发送寄存器空中断 void (*start_tx)(struct rt_serial_device *serial); // 结束发送,多数是关闭串口外设发送寄存器空中断 void (*stop_tx)(struct rt_serial_device *serial); #ifdef RT_SERIAL_USING_DMA // 判断 DMA ...
UART设备的操作方法实现后需要注册设备到操作系统,注册UART设备的接口是rt_err_t rt_hw_serial_register(struct rt_serial_device serial,const char name,rt_uint32_t flag, void *data)。 UART设备中断处理 增加DMA模式 增加UART设备DMA模式,需要首先对每个UART的DMA进行配置,接着进行DMA初始化和中断处理,最后完...
uart->dma_rx.last_index = 0; #endif hal_uart_init(&uart->handle); return RT_EOK; } static rt_err_t ab32_control(struct rt_serial_device *serial, int cmd, void *arg) { struct ab32_uart *uart; #ifdef RT_SERIAL_USING_DMA ...
stm32_control(serial, RT_DEVICE_CTRL_SET_INT, (void *)tx_flag); return size; } 最后我们再来看看最驱动代码中,占据大量代码行数的中断处理(回调)函数 我们先来分析DMA的中断回调函数 #if defined(RT_SERIAL_USING_DMA) && defined(BSP_UART1_RX_USING_DMA)voidUART1_DMA_RX_IRQHandler(void){/* en...
serial 的 control 操作 设计成 不能设置中断,即缺少 RT_DEVICE_CTRL_SET_INT 和 RT_DEVICE_CTRL_CLR_INT 操作, 这样可以避免误设置; 同时也是由于串口接收已经设计成三选一方式:中断、DMA、轮询; 说一下DMA,因为这也是我们最常用的串口数据接收处理方式; ...
12 depends on BSP_USING_UART2 && RT_SERIAL_USING_DMA 13 default n 14 endif 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 2.2 下载软件包 接下来我们就可以下载软件包了,右键打开 env 工具。 输入menuconfig 进入Hardware Drivers打开两个串口: ...
重新定义 rt_serial_device 定义:struct rt_serial_device { struct rt_device parent; const struct rt_uart_ops *ops; struct serial_configure config; void *serial_rx; // 串口接收缓存 void *serial_tx; // 串口发送缓存 #ifdef RT_SERIAL_USING_DMA // 串口收发缓存和 DMA 使用的二级缓存分开 rt_...
drivers/serial.c中增加RT_SERIAL_USING_DMA选项; drivers/spi框架中增加QSPI的支持; SFUD中增加QSPI的支持(以stm32的QSPI外设为蓝本);SFUD升级到1.1.0版本; 优化spi_msd中的spi take/release调用代码; 修正rt_rbb_blk_alloc中对blk_size的判断; 修正usb stack中,_get_descriptor函数对FS USB的判断; 修正driver...