pic头文件(c pair头文件)

pic头文件(c pair头文件)nbsp 串口 DMA 驱动实现分析 nbsp 1 1 nbsp DMA 控制器基本原理 DMA 控制器用于实现各类存储介质间的数据搬移 存储介质包括内存以及各类外设的寄存器空间 基本的工作原理是 配置好 DMA 控制器后 通过软件或 DMA 请求线的方式启动 DMA 传输 搬移数据时 独自控制系统总线 不需要 CPU 干预 DMA 在完成数据搬移完成后

大家好,我是讯享网,很高兴认识大家。



 

串口DMA驱动实现分析

 

1.1 DMA控制器基本原理

  DMA控制器用于实现各类存储介质间的数据搬移,存储介质包括内存以及各类外设的寄存器空间;

  基本的工作原理是,配置好DMA控制器后,通过软件或DMA请求线的方式启动DMA传输,搬移数据时,独自控制系统总线,不需要CPU干预;

  DMA在完成数据搬移完成后,通过中断等方式通知CPU;

  DMA控制器能请求和释放总线控制权;能给出访问内存所需的地址信息;能够自动修改地址指针;能够设定和修改传送的字节数;

  能够向存储器和外设发出相应的读/写控制信号

1.2 Itop4412串口DMA驱动实现分析

cubemx 配置DMA串口通信代码_描述符
讯享网

  如上图所示,itop4412开发板使用的DMA控制器是PL330,PL330包括3个独立的中断控制器,其中DMA_mem用于内存间的数据搬移,DMA_peri1和DMA_peri2用于内存与外设间的数据搬移;

  PL330控制器的驱动在内核中已经实现,对应驱动文件driversdmapl330.c,外设驱动只需要调用内核DMA子系统提供的DMA接口,就可以使用pl330.c提供的DMA功能;

  如下,是itop4412串口驱动的dts节点,在dts节点中指定串口使用DMA_peri1控制器的第17和18通道

1.2.1 初始化部分

  串口驱动初始化过程,申请了两个DMA通道,一个用于数据包接收,一个用于数据包发送,并配置了DMA通道的参数;

  对于数据包接收通道,传输方向是外设到内存,数据宽度是1个字节,源地址是串口的数据接收寄存器S3C2410_URXH,burst设为cache的大小16字节,然后申请一片内存作为接收buffer,

  使用dma_map_single函数获取内存对应的总线地址;

  对于数据包发送通道,传输方向是内存到外设,数据宽度是1个字节,目的地址是串口的数据发送寄存器S3C2410_UTXH,burst设为cache的大小16字节,发送buffer就是tty层的xmit;

1.2.2 数据包发送

  启动一次DMA发送数据包,需要设置两个部分:串口和DMA发送通道;

  串口部分需要通过寄存器配置DMA发送模式;

  DMA发送通道部分,需要在发送通道中申请发包描述符,申请描述符时还需要传入发送的字节数以及源地址,并且注册一个传输完成时的回调函数,然后,将描述符提交给DMA控制器驱动,

并且启动该描述符描述的传输;

  DMA传输完成后,DMA控制器驱动会调用回调函数通知我们,在回调函数中可以通过接口获取传输结果

 停止DMA发送的接口

1.2.3 数据包接收

  DMA收包是将数据从串口的数据寄存器搬移到内存,DMA的启动配置和DMA发包的配置大体上一致,也是需要配置串口和DMA接收通道两个部分;

  串口部分需要通过寄存器配置寄存器使串口工作于DMA Rx Mode;

  DMA接收通道需要申请一个收包描述符,申请描述符时需要传入收包内存的总线地址和本次需要搬移的数据长度,并且注册一个传输完成时的回调函数,然后将描述符提交给DMA控制器驱动并启动该描述符的传输;

 

小讯
上一篇 2025-06-05 13:39
下一篇 2025-04-30 07:48

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/200177.html