CN106155960A - 基于gpio握手和edma的uart串口通信方法 - Google Patents

基于gpio握手和edma的uart串口通信方法 Download PDF

Info

Publication number
CN106155960A
CN106155960A CN201610509014.5A CN201610509014A CN106155960A CN 106155960 A CN106155960 A CN 106155960A CN 201610509014 A CN201610509014 A CN 201610509014A CN 106155960 A CN106155960 A CN 106155960A
Authority
CN
China
Prior art keywords
edma
uart
packet
data
gpio
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201610509014.5A
Other languages
English (en)
Other versions
CN106155960B (zh
Inventor
刘玉珠
窦小龙
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Guangzhou Huiruisitong Technology Co Ltd
Original Assignee
Guangzhou Huiruisitong Information Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Guangzhou Huiruisitong Information Technology Co Ltd filed Critical Guangzhou Huiruisitong Information Technology Co Ltd
Priority to CN201610509014.5A priority Critical patent/CN106155960B/zh
Publication of CN106155960A publication Critical patent/CN106155960A/zh
Application granted granted Critical
Publication of CN106155960B publication Critical patent/CN106155960B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/382Information transfer, e.g. on bus using universal interface adapter
    • G06F13/385Information transfer, e.g. on bus using universal interface adapter for adaptation of a particular data processing system to different peripheral devices

Abstract

本发明公开的基于GPIO握手和EDMA的UART串口通信方法,通过利用EDMA功能来自动完成UART收发FIFO到外部数据缓冲区之间的数据搬移,而无需CPU频繁介入;同时通过GPIO握手信号来通知接收端进行数据包的接收,并能快速的区分接收数据包的边界和自动更新下一个接收包的地址;这样就极大的提升了使用UART串口的通信效率、减少UART收发数据包时频繁地去打断CPU的处理,能提高CPU资源的利用率。同时该方案通过使用GPIO信号与对端设备进行约定,在一定程度上提升了对端设备使用UART接收的便利性,从而在整个系统层面上提升了使用UART串口通信的工作效率。

Description

基于GPIO握手和EDMA的UART串口通信方法
技术领域
本发明涉及串口通信领域,特别涉及基于GPIO握手和EDMA的UART串口通信方法。
背景技术
UART是Universal Asynchronous Receiver/Transmitter的缩写,即通用异步接收发送,当其作为DSP的发送侧时,能将DSP待发送的并行数据转换成串行数据并发送到DSP的外围设备,当其作为DSP的接收侧时,能将DSP外围设备发送过来的串行数据转换成并行数据并接收。由于UART硬件连接简单,通信协议便于实现,在嵌入式系统和工业控制系统中大量使用。但是传统的串口协议有两个缺陷存在:
1、每次只收发一个数据符号(5~8data bit),如果对每个数据符号都要CPU介入处理,效率非常低。
2、在使用串口来进行突发的数据包传输时,串口通信协议本身没有规定如何划分数据包的边界,需要自行实现数据包的分界。
对于第一个缺陷的解决,主要是通过增加数据缓冲区和DMA机制来减少CPU的介入频率。专利200410100137.0就介绍了这样的一种处理方法。但是该专利对于第二个缺陷并没有给出解决方案。同时该专利通过使用虚拟端口和虚拟FIFO控制器来实现收发包的缓存。这种方法的缺陷在于:
1、限制了使用该技术的DSP设备必须存在一个虚拟端口和一个虚拟FIFO控制器。
2、限制了缓存FIFO必须位于外围组件地址中,而不能灵活的使用DSP的L2、DDR等内存位置。
发明内容
本发明的目的在于克服现有技术的缺点与不足,提供基于GPIO握手和EDMA的UART串口通信方法。
本发明的目的通过以下的技术方案实现:
基于GPIO握手和EDMA的UART串口通信方法,包含以下步骤:
S1、指定一块收发数据的缓存;
S2、当使用UART进行数据发送时,利用EDMA将待发送的数据搬移到UART的发送FIFO中,然后由UART发送给对端芯片;
S3、EDMA完成数据搬移后,会产生一个中断,在中断服务程序中启动一个T毫秒的定时器;在定时器中断服务程序中通过一个标志位来告知发送端继续发送新的数据包,当数据包已经发送完毕时通知对端芯片;
S4、当使用UART进行数据接收时,接收侧在UART初始化过程中配置第一个数据包的接收地址给EDMA,当UART开始进行数据接收时,一旦接收FIFO接收到的数据超过设定的阈值后,UART会产生一个EDMA事件用来通知EDMA,EDMA会自动将接收FIFO中的数据搬移到配置好的接收缓存中;双方约定,当对端设备发送完一个数据包后,对端设备会拉高GPIO N管脚,这时候GPIO N管脚产生一个上升沿事件,通过配置该GPIO N管脚的上升沿事件映射为EDMA事件,该事件会等当前的数据包接收完毕后自动更新EDMA的接收参数,自动配置好下一个数据包的接收地址;然后在EDMA更新完下一个数据包的接收参数后,会在中断服务程序中通过Post一个信号量来通知UART驱动软件对一个完整的数据包进行接收处理。
至此,完成了UART串口数据收发的全过程。
步骤S1中,所述缓存的的缓存地址空间包括DSP芯片内的L2地址、DDR地址、其他能被EDMA访问到的外设地址。
步骤S2中,所述定时器的时长由发送链路上的物理延时决定。
步骤S3中,所述当数据包已经发送完毕时通知对端芯片,是通过拉高GPIO M管脚来完成的。这样方便接收端处理。
所述UART,其初始化配置具体如下:
(1)初始化UART寄存器,进行一些最基本的初始化配置;
(2)申请一个信号量用于UART接收时通知CPU取数;
(3)申请两个GPIO管脚资源,两个GPIO管脚分别为GPIO M管脚、GPIO N管脚,GPIO管脚具备两种功能:当设置其作为输入管脚时,可以读取其相关寄存器获取到当前该管脚的电平状态,当设置其作为输出管脚时,可以设置其相关寄存器来拉高或者拉低该管脚的电平状态;GPIO M管脚用于发送流程,在发送完一个数据包后设置其为高电平状态用于通知接收端芯片,这样就需要配置GPIO M管脚为输出管脚,GPIO N管脚用于接收流程,配置其在上升沿时触发事件,故需要配置该管脚为输入管脚,由对端芯片发送完一个完整的数据包后拉高其管脚,是GPIO产生一个事件给EDMA;
(4)配置与UART电性相连的EDMA通道X,用于将待发送的数据搬移到UART发送FIFO,并注册该EDMA通道相对应的中断服务程序,用于发送数据搬移完成后的中断处理;后续每次进入该中断服务程序会启动一个T毫秒长度的定时器,T值由发送FIFO到接收端链路上的物理延时决定;该定时主要用于保证发送FIFO的数据完全发送到接收端;同时在定时器达到计数时间后会触发一个定时中断来通知发送侧CPU该数据包已经完成发送,释放CPU资源。并在该中断服务程序中拉高GPIO M管脚为高电平,通知接收端一个完整的包发送完毕;
(5)配置UART电性相连的EDMA通道Y,用于将UART接收FIFO中的数据搬移到CPU预先设置好的接收缓冲区中,同时在该步骤中配置好第一个接收数据包的首地址;
(6)配置GPIO N管脚电性相连的EDMA通道Z,同时将下一个数据包接收段的目的地址提前配置好,并注册该EDMA通道相对应的中断服务程序,用于将下一个数据包的地址更新到EDMA通道Y,同时根据通道Y中的EDMA接收参数获取到当前数据包的长度信息;
(7)初始化接收缓冲区的读写指针为该缓冲区的起始位置,写指针用于硬件接收到一个数据包后指示下一个可用来接收包的缓冲区位置,由EDMA通道Z的中断服务程序维护;读指针用于CPU高层软件读取一个待接收的包,读取完毕后更新到下一个等待读取的数据包位置;通过软硬件分别维护读写指针,能避免数据包的读取错误,并且根据当前的软件使用场景,可以合理的增加或者减少缓冲区的大小,提供更好的数据存储服务;
(8)使能EDMA通道X、EDMA通道Y、EDMA通道Z,使其处于工作状态,从而完成整个初始化的配置。
步骤S2中,所述使用UART进行数据发送,具体为:
(1)CPU应用程序作为数据发送的源头,首先配置好发送EDMA通道X的发送参数,源地址为待发送的数据缓冲区,目的地址为UART发送FIFO;
(2)手动触发EDMA通道X进行搬移:EDMA每次搬移N Byte数据到发送FIFO后,UART将发送FIFO中的数据依次发往对端芯片,当FIFO为空后会自动触发EDMA通道X进行下一个NByte数据的搬移,直到当前配置好一个数据包的所有数据搬移完毕;
(3)当前数据包的所有数据搬移完毕后EDMA通道X会产生一个完成中断,调用事先注册的中断服务程序;该中断服务程序会启动一个T毫秒长度的定时器,T值由发送FIFO到接收端的物理链路延时决定;该定时主要用于保证发送FIFO的数据完全发送到接收端;
(4)在定时器达到T毫秒后会触发一个定时中断来通知发送侧CPU该数据包已经完成发送,并在该中断服务程序中拉高GPIO M管脚为高电平,通知接收端一个完整的数据包发送完毕。方便接收端对接收包的划分处理;
整个UART数据发送流程中,CPU完成第一步后,后续的操作由各外设模块配合中断自动完成整个数据包的发送以及通知功能,无需CPU进行过多的干涉,操作简单,节省CPU资源。
步骤S4中,所述使用UART进行数据接收,具体为:
(1)对端芯片开始发送数据包,UART硬件开始接收数据,当UART接收FIFO中的数据长度超过指定的阈值后,会产生一个事件通知EDMA通道Y来进行数据的搬移,EDMA通道Y会将接收FIFO中的数据搬移到接收缓冲区,并等待下一次事件的产生;
(2)如果接收包的长度大于设定值,重复步骤(1)至接收包的长度小于设定值;当对端芯片发送完一个数据包的数据后,设置GPIO N管脚状态为高电平,这时会产生一个EDMA事件从而触发GPIO N管脚对应的EDMA通道Z进行EDMA通道Y接收数据包参数的更新,如果当前的数据包还未接收完毕,则会等待当前数据包接收完毕后才会将下一个数据包的接收参数更新到通道Y;
(3)当接收参数更新完毕后,会产生一个完成中断,在中断服务程序中通过查询接收通道Y的EDMA接收长度参数(该参数在前面的搬移时要注意避免被覆盖)来获取当前已经接收包的长度信息并更新该长度信息为下一个数据包的待接收初始状态,然后更新接收缓冲区的写指针,同时将该写指针对应的下一个数据包的指针更新到EDMA通道Z的相应位置;
(4)将初始化配置中申请的信号量进行POST操作,用于通知CPU进行新的数据包接收;
(5)CPU在Pend中等待第四步释放的信号量,当收到Post信号量后,得知有一个新的数据包等待接收,接收完后更新接收缓冲区的读指针到下一个待接收包的位置。
整个接收过程中,CPU只需要在Pend中等待信号量的释放,从而获取到当前待接收的完整数据包,而不需要CPU再去判断是否一个完整的包接收完毕,流程操作简单,无需CPU过度干涉,并极大提升了UART的通信效率,并节省了CPU的资源。
本发明的实现需要用到3个EDMA通道、分别绑定到UART串口发送、UART串口接收、GPIO管脚N,本文对这3个EDMA通道分别命名EDMA通道X、EDMA通道Y、EDMA通道Z以示区分,这样通过配置EDMA的参数就能自动实现相关的搬移功能。同时也需要使用到2个GPIO管脚,分别命名GPIO M管脚、GPIO N管脚。GPIO M管脚用于UART发送流程,用来通知对端芯片一个完整的包已经发送完毕。GPIO N管脚用于UART接收流程,接收对端发来的数据发送完成信号,DSP能通过该信号来完成一次接收包的分割。还需要使用一个信号量,信号量可以用来对一块共享的资源进行互斥操作、也能完成消息的通知。在UART初始化的过程中申请一个信号量,在接收数据的时候通过Pend信号量来等待接收中断服务程序中Post信号量,当驱动软件等到一个信号量后就可以进行相关处理。
本发明与现有技术相比,具有如下优点和有益效果:
1、本发明通过使用EDMA进行数据搬移,减少了UART串口收发数据时需要CPU频繁介入的问题,并通过GPIO握手来实现接收包的自动分割和收发包状态通知功能,提高了UART串口通信的效率,减低了CPU资源的消耗。
2、EDMA是Enhanced Direct Memory Access的缩写,即增强型直接存储访问,能够完成数据快速搬移,工作过程无需CPU介入。GPIO是General Purpose Input Output的缩写,即通用目的输入输出,一般的DSP设备中GPIO有多个管脚,每个管脚可以设置其作为输入管脚还是输出管脚,当作为输入管脚时,能够通过查询相应管脚的状态寄存器来知道改管脚的电平状态,当作为输出管脚时,能通过写寄存器来配置其为高电平还是低电平,GPIO管脚还能产生DSP核中断和EDMA事件,用于完成相应的功能。本发明提供了一种基于GPIO握手和EDMA的串口通信办法,解决了传统串口协议中的缺陷a与缺陷b所阐述的问题,并解决了专利200410100137.0所存在的缺陷a/b所描述的问题,充分利用DSP内部的外设资源,提高了串口通信的效率,降低了对CPU资源的消耗。
3、本发明充分利用DSP上EDMA、GPIO资源来配合UART进行收发数据通信,通过利用EDMA功能来自动完成UART收发FIFO到外部数据缓冲区之间的数据搬移,而无需CPU频繁介入。同时通过GPIO握手信号来通知接收端进行数据包的接收,并能快速的区分接收数据包的边界和自动更新下一个接收包的地址。这样就极大的提升了使用UART串口的通信效率、减少UART收发数据包时频繁地去打断CPU的处理,能提高CPU资源的利用率。同时该方案通过使用GPIO信号与对端设备进行约定,在一定程度上提升了对端设备使用UART接收的便利性,从而在整个系统层面上提升了使用UART串口通信的工作效率。
附图说明
图1为UART初始化配置的流程图。
图2为整个数据交互的流程图。
具体实施方式
下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不限于此。
基于GPIO握手和EDMA的UART串口通信方法,包含以下步骤:
S1、指定一块收发数据的缓存;
所述缓存的的缓存地址空间包括DSP芯片内的L2地址、DDR地址、其他能被EDMA访问到的外设地址;
S2、当使用UART进行数据发送时,利用EDMA将待发送的数据搬移到UART的发送FIFO中,然后由UART发送给对端芯片;
所述定时器的时长由发送链路上的物理延时决定;
如图2,所述使用UART进行数据发送,具体为:
(1)CPU应用程序作为数据发送的源头,首先配置好发送EDMA通道X的发送参数,源地址为待发送的数据缓冲区,目的地址为UART发送FIFO;
(2)手动触发EDMA通道X进行搬移:EDMA每次搬移N Byte数据到发送FIFO后,UART将发送FIFO中的数据依次发往对端芯片,当FIFO为空后会自动触发EDMA通道X进行下一个NByte数据的搬移,直到当前配置好一个数据包的所有数据搬移完毕;
(3)当前数据包的所有数据搬移完毕后EDMA通道X会产生一个完成中断,调用事先注册的中断服务程序;该中断服务程序会启动一个T毫秒长度的定时器,T值由发送FIFO到接收端的物理链路延时决定;该定时主要用于保证发送FIFO的数据完全发送到接收端;
(4)在定时器达到T毫秒后会触发一个定时中断来通知发送侧CPU该数据包已经完成发送,并在该中断服务程序中拉高GPIO M管脚为高电平,通知接收端一个完整的数据包发送完毕。方便接收端对接收包的划分处理;
整个UART数据发送流程中,CPU完成第一步后,后续的操作由各外设模块配合中断自动完成整个数据包的发送以及通知功能,无需CPU进行过多的干涉,操作简单,节省CPU资源。
S3、EDMA完成数据搬移后,会产生一个中断,在中断服务程序中启动一个T毫秒的定时器;在定时器中断服务程序中通过一个标志位来告知发送端继续发送新的数据包,当数据包已经发送完毕时通知对端芯片;
所述当数据包已经发送完毕时通知对端芯片,是通过拉高GPIO M管脚来完成的;这样方便接收端处理;
S4、当使用UART进行数据接收时,接收侧在UART初始化过程中配置第一个数据包的接收地址给EDMA,当UART开始进行数据接收时,一旦接收FIFO接收到的数据超过设定的阈值后,UART会产生一个EDMA事件用来通知EDMA,EDMA会自动将接收FIFO中的数据搬移到配置好的接收缓存中;双方约定,当对端设备发送完一个数据包后,对端设备会拉高GPIO N管脚,这时候GPIO N管脚产生一个上升沿事件,通过配置该GPIO N管脚的上升沿事件映射为EDMA事件,该事件会等当前的数据包接收完毕后自动更新EDMA的接收参数,自动配置好下一个数据包的接收地址;然后在EDMA更新完下一个数据包的接收参数后,会在中断服务程序中通过Post一个信号量来通知UART驱动软件对一个完整的数据包进行接收处理。
如图2,所述使用UART进行数据接收,具体为:
(1)对端芯片开始发送数据包,UART硬件开始接收数据,当UART接收FIFO中的数据长度超过指定的阈值后,会产生一个事件通知EDMA通道Y来进行数据的搬移,EDMA通道Y会将接收FIFO中的数据搬移到接收缓冲区,并等待下一次事件的产生;
(2)如果接收包的长度大于设定值,重复步骤(1)至接收包的长度小于设定值;当对端芯片发送完一个数据包的数据后,设置GPIO N管脚状态为高电平,这时会产生一个EDMA事件从而触发GPIO N管脚对应的EDMA通道Z进行EDMA通道Y接收数据包参数的更新,如果当前的数据包还未接收完毕,则会等待当前数据包接收完毕后才会将下一个数据包的接收参数更新到通道Y;
(3)当接收参数更新完毕后,会产生一个完成中断,在中断服务程序中通过查询接收通道Y的EDMA接收长度参数(该参数在前面的搬移时要注意避免被覆盖)来获取当前已经接收包的长度信息并更新该长度信息为下一个数据包的待接收初始状态,然后更新接收缓冲区的写指针,同时将该写指针对应的下一个数据包的指针更新到EDMA通道Z的相应位置;
(4)将初始化配置中申请的信号量进行POST操作,用于通知CPU进行新的数据包接收;
(5)CPU在Pend中等待第四步释放的信号量,当收到Post信号量后,得知有一个新的数据包等待接收,接收完后更新接收缓冲区的读指针到下一个待接收包的位置;
整个接收过程中,CPU只需要在Pend中等待信号量的释放,从而获取到当前待接收的完整数据包,而不需要CPU再去判断是否一个完整的包接收完毕,流程操作简单,无需CPU过度干涉,并极大提升了UART的通信效率,并节省了CPU的资源。
至此,完成了UART串口数据收发的全过程。
图1描述了使用UART串口初始化的主要资源配置情况,如图1,所述UART,其初始化配置具体如下:
(1)初始化UART寄存器,进行一些最基本的初始化配置;
(2)申请一个信号量用于UART接收时通知CPU取数;
(3)申请两个GPIO管脚资源,两个GPIO管脚分别为GPIO M管脚、GPIO N管脚,GPIO管脚具备两种功能:当设置其作为输入管脚时,可以读取其相关寄存器获取到当前该管脚的电平状态,当设置其作为输出管脚时,可以设置其相关寄存器来拉高或者拉低该管脚的电平状态;GPIO M管脚用于发送流程,在发送完一个数据包后设置其为高电平状态用于通知接收端芯片,这样就需要配置GPIO M管脚为输出管脚,GPIO N管脚用于接收流程,配置其在上升沿时触发事件,故需要配置该管脚为输入管脚,由对端芯片发送完一个完整的数据包后拉高其管脚,是GPIO产生一个事件给EDMA;
(4)配置与UART电性相连的EDMA通道X,用于将待发送的数据搬移到UART发送FIFO,并注册该EDMA通道相对应的中断服务程序,用于发送数据搬移完成后的中断处理;后续每次进入该中断服务程序会启动一个T毫秒长度的定时器,T值由发送FIFO到接收端链路上的物理延时决定;该定时主要用于保证发送FIFO的数据完全发送到接收端;同时在定时器达到计数时间后会触发一个定时中断来通知发送侧CPU该数据包已经完成发送,释放CPU资源。并在该中断服务程序中拉高GPIO M管脚为高电平,通知接收端一个完整的包发送完毕;
(5)配置UART电性相连的EDMA通道Y,用于将UART接收FIFO中的数据搬移到CPU预先设置好的接收缓冲区中,同时在该步骤中配置好第一个接收数据包的首地址;
(6)配置GPIO N管脚电性相连的EDMA通道Z,同时将下一个数据包接收段的目的地址提前配置好,并注册该EDMA通道相对应的中断服务程序,用于将下一个数据包的地址更新到EDMA通道Y,同时根据通道Y中的EDMA接收参数获取到当前数据包的长度信息;
(7)初始化接收缓冲区的读写指针为该缓冲区的起始位置,写指针用于硬件接收到一个数据包后指示下一个可用来接收包的缓冲区位置,由EDMA通道Z的中断服务程序维护;读指针用于CPU高层软件读取一个待接收的包,读取完毕后更新到下一个等待读取的数据包位置;通过软硬件分别维护读写指针,能避免数据包的读取错误,并且根据当前的软件使用场景,可以合理的增加或者减少缓冲区的大小,提供更好的数据存储服务;
(8)使能EDMA通道X、EDMA通道Y、EDMA通道Z,使其处于工作状态,从而完成整个初始化的配置。
上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。

Claims (7)

1.基于GPIO握手和EDMA的UART串口通信方法,其特征在于,包含以下步骤:
S1、指定一块收发数据的缓存;
S2、当使用UART进行数据发送时,利用EDMA将待发送的数据搬移到UART的发送FIFO中,然后由UART发送给对端芯片;
S3、EDMA完成数据搬移后,会产生一个中断,在中断服务程序中启动一个T毫秒的定时器;在定时器中断服务程序中通过一个标志位来告知发送端继续发送新的数据包,当数据包已经发送完毕时通知对端芯片;
S4、当使用UART进行数据接收时,接收侧在UART初始化过程中配置第一个数据包的接收地址给EDMA,当UART开始进行数据接收时,一旦接收FIFO接收到的数据超过设定的阈值后,UART会产生一个EDMA事件用来通知EDMA,EDMA会自动将接收FIFO中的数据搬移到配置好的接收缓存中;双方约定,当对端设备发送完一个数据包后,对端设备会拉高GPIO N管脚,这时候GPIO N管脚产生一个上升沿事件,通过配置该GPIO N管脚的上升沿事件映射为EDMA事件,该事件会等当前的数据包接收完毕后自动更新EDMA的接收参数,自动配置好下一个数据包的接收地址;然后在EDMA更新完下一个数据包的接收参数后,会在中断服务程序中通过Post一个信号量来通知UART驱动软件对一个完整的数据包进行接收处理。
2.根据权利要求1所述基于GPIO握手和EDMA的UART串口通信方法,其特征在于,步骤S1中,所述缓存的的缓存地址空间包括DSP芯片内的L2地址、DDR地址、其他能被EDMA访问到的外设地址。
3.根据权利要求1所述基于GPIO握手和EDMA的UART串口通信方法,其特征在于,步骤S2中,所述定时器的时长由发送链路上的物理延时决定。
4.根据权利要求1所述基于GPIO握手和EDMA的UART串口通信方法,其特征在于,步骤S3中,所述当数据包已经发送完毕时通知对端芯片,是通过拉高GPIO M管脚来完成的。
5.根据权利要求1所述基于GPIO握手和EDMA的UART串口通信方法,其特征在于,所述UART,其初始化配置具体如下:
(1)初始化UART寄存器;
(2)申请一个信号量用于UART接收时通知CPU取数;
(3)申请两个GPIO管脚资源,两个GPIO管脚分别为GPIO M管脚、GPIO N管脚;GPIO M管脚用于发送流程,在发送完一个数据包后设置其为高电平状态用于通知接收端芯片,配置GPIO M管脚为输出管脚,GPIO N管脚用于接收流程,配置其在上升沿时触发事件,配置该管脚为输入管脚,由对端芯片发送完一个完整的数据包后拉高其管脚,是GPIO产生一个事件给EDMA;
(4)配置与UART电性相连的EDMA通道X,用于将待发送的数据搬移到UART发送FIFO,并注册该EDMA通道相对应的中断服务程序,用于发送数据搬移完成后的中断处理;后续每次进入该中断服务程序会启动一个T毫秒长度的定时器,T值由发送FIFO到接收端链路上的物理延时决定;同时在定时器达到计数时间后会触发一个定时中断来通知发送侧CPU该数据包已经完成发送,释放CPU资源,并在该中断服务程序中拉高GPIO M管脚为高电平,通知接收端一个完整的包发送完毕;
(5)配置UART电性相连的EDMA通道Y,用于将UART接收FIFO中的数据搬移到CPU预先设置好的接收缓冲区中,同时在该步骤中配置好第一个接收数据包的首地址;
(6)配置GPIO N管脚电性相连的EDMA通道Z,同时将下一个数据包接收段的目的地址提前配置好,并注册该EDMA通道相对应的中断服务程序,用于将下一个数据包的地址更新到EDMA通道Y,同时根据通道Y中的EDMA接收参数获取到当前数据包的长度信息;
(7)初始化接收缓冲区的读写指针为该缓冲区的起始位置,写指针用于硬件接收到一个数据包后指示下一个可用来接收包的缓冲区位置,由EDMA通道Z的中断服务程序维护;读指针用于CPU高层软件读取一个待接收的包,读取完毕后更新到下一个等待读取的数据包位置;
(8)使能EDMA通道X、EDMA通道Y、EDMA通道Z,使其处于工作状态,从而完成整个初始化的配置。
6.根据权利要求1所述基于GPIO握手和EDMA的UART串口通信方法,其特征在于,步骤S2中,所述使用UART进行数据发送,具体为:
(1)CPU应用程序作为数据发送的源头,首先配置好发送EDMA通道X的发送参数,源地址为待发送的数据缓冲区,目的地址为UART发送FIFO;
(2)手动触发EDMA通道X进行搬移:EDMA每次搬移N Byte数据到发送FIFO后,UART将发送FIFO中的数据依次发往对端芯片,当FIFO为空后会自动触发EDMA通道X进行下一个NByte数据的搬移,直到当前配置好一个数据包的所有数据搬移完毕;
(3)当前数据包的所有数据搬移完毕后EDMA通道X会产生一个完成中断,调用事先注册的中断服务程序;该中断服务程序会启动一个T毫秒长度的定时器,T值由发送FIFO到接收端的物理链路延时决定;
(4)在定时器达到T毫秒后会触发一个定时中断来通知发送侧CPU该数据包已经完成发送,并在该中断服务程序中拉高GPIO M管脚为高电平,通知接收端一个完整的数据包发送完毕。
7.根据权利要求1所述基于GPIO握手和EDMA的UART串口通信方法,其特征在于,步骤S4中,所述使用UART进行数据接收,具体为:
(1)对端芯片开始发送数据包,UART硬件开始接收数据,当UART接收FIFO中的数据长度超过指定的阈值后,会产生一个事件通知EDMA通道Y来进行数据的搬移,EDMA通道Y会将接收FIFO中的数据搬移到接收缓冲区,并等待下一次事件的产生;
(2)如果接收包的长度大于设定值,重复步骤(1)至接收包的长度小于设定值;当对端芯片发送完一个数据包的数据后,设置GPIO N管脚状态为高电平,这时会产生一个EDMA事件从而触发GPIO N管脚对应的EDMA通道Z进行EDMA通道Y接收数据包参数的更新,如果当前的数据包还未接收完毕,则会等待当前数据包接收完毕后才会将下一个数据包的接收参数更新到通道Y;
(3)当接收参数更新完毕后,会产生一个完成中断,在中断服务程序中通过查询接收通道Y的EDMA接收长度参数来获取当前已经接收包的长度信息并更新该长度信息为下一个数据包的待接收初始状态,然后更新接收缓冲区的写指针,同时将该写指针对应的下一个数据包的指针更新到EDMA通道Z的相应位置;
(4)将初始化配置中申请的信号量进行POST操作,用于通知CPU进行新的数据包接收;
(5)CPU在Pend中等待第四步释放的信号量,当收到Post信号量后,得知有一个新的数据包等待接收,接收完后更新接收缓冲区的读指针到下一个待接收包的位置。
CN201610509014.5A 2016-06-29 2016-06-29 基于gpio握手和edma的uart串口通信方法 Active CN106155960B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610509014.5A CN106155960B (zh) 2016-06-29 2016-06-29 基于gpio握手和edma的uart串口通信方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610509014.5A CN106155960B (zh) 2016-06-29 2016-06-29 基于gpio握手和edma的uart串口通信方法

Publications (2)

Publication Number Publication Date
CN106155960A true CN106155960A (zh) 2016-11-23
CN106155960B CN106155960B (zh) 2019-03-22

Family

ID=57350778

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610509014.5A Active CN106155960B (zh) 2016-06-29 2016-06-29 基于gpio握手和edma的uart串口通信方法

Country Status (1)

Country Link
CN (1) CN106155960B (zh)

Cited By (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106598901A (zh) * 2016-12-08 2017-04-26 邦彦技术股份有限公司 基于FPGA的Local Bus转USB的系统及芯片
CN108710597A (zh) * 2018-05-17 2018-10-26 福建升腾资讯有限公司 一种利用gpio优化mcu通信的方法及系统
CN109426526A (zh) * 2017-08-25 2019-03-05 展讯通信(上海)有限公司 接口唤醒同步方法、接口设备及计算机可读介质
CN110659232A (zh) * 2019-09-12 2020-01-07 苏州浪潮智能科技有限公司 一种事件信息传输方法、装置、设备及存储介质
CN111309659A (zh) * 2020-01-21 2020-06-19 北京工业大学 一种基于可插拔模块的LoRa多通道通信扩展方法
CN111324567A (zh) * 2020-02-10 2020-06-23 华大半导体有限公司 一种实现串口通讯的方法及单片机系统
CN111615692A (zh) * 2019-05-23 2020-09-01 深圳市大疆创新科技有限公司 数据搬运方法、计算处理装置、设备及存储介质
CN112035168A (zh) * 2020-08-19 2020-12-04 深圳市声天下科技有限公司 具有移位寄存器的hda控制器控制hda codec芯片的方法、系统及存储介质
WO2021027182A1 (zh) * 2019-08-09 2021-02-18 苏州浪潮智能科技有限公司 一种服务器电源前后级通讯的方法、设备及可读介质
CN112732618A (zh) * 2021-01-08 2021-04-30 歌尔股份有限公司 一种串口通信方法、装置和系统
CN112817895A (zh) * 2021-01-28 2021-05-18 广州安凯微电子股份有限公司 一种基于gpio的通信方法
CN113778920A (zh) * 2021-11-12 2021-12-10 湖南双菱电子科技有限公司 一种嵌入式处理器串口通信方法和软件开发工具包
CN114448587A (zh) * 2021-12-21 2022-05-06 北京长焜科技有限公司 一种dsp中使用edma搬移lte上行天线数据的方法
CN117312221A (zh) * 2023-11-28 2023-12-29 西安现代控制技术研究所 一种触发式spi数据通讯方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1702638A (zh) * 2005-06-08 2005-11-30 武汉虹信通信技术有限责任公司 一种提高嵌入式系统串行数据处理能力的方法
US20090077294A1 (en) * 2007-09-19 2009-03-19 Guangming Liu Communication system for a plurality of I/O cards by using the GPIO and a method thereof
CN103914424A (zh) * 2014-04-14 2014-07-09 中国人民解放军国防科学技术大学 基于gpio接口的lpc外设扩展方法及装置
US20160077995A1 (en) * 2014-09-11 2016-03-17 Qualcomm Incorporated Variable frame length virtual gpio with a modified uart interface
CN105487991A (zh) * 2015-12-18 2016-04-13 广州慧睿思通信息科技有限公司 一种多核共用单一edma通道的方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1702638A (zh) * 2005-06-08 2005-11-30 武汉虹信通信技术有限责任公司 一种提高嵌入式系统串行数据处理能力的方法
US20090077294A1 (en) * 2007-09-19 2009-03-19 Guangming Liu Communication system for a plurality of I/O cards by using the GPIO and a method thereof
CN103914424A (zh) * 2014-04-14 2014-07-09 中国人民解放军国防科学技术大学 基于gpio接口的lpc外设扩展方法及装置
US20160077995A1 (en) * 2014-09-11 2016-03-17 Qualcomm Incorporated Variable frame length virtual gpio with a modified uart interface
CN105487991A (zh) * 2015-12-18 2016-04-13 广州慧睿思通信息科技有限公司 一种多核共用单一edma通道的方法

Cited By (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106598901A (zh) * 2016-12-08 2017-04-26 邦彦技术股份有限公司 基于FPGA的Local Bus转USB的系统及芯片
CN109426526A (zh) * 2017-08-25 2019-03-05 展讯通信(上海)有限公司 接口唤醒同步方法、接口设备及计算机可读介质
CN109426526B (zh) * 2017-08-25 2021-08-17 展讯通信(上海)有限公司 接口唤醒同步方法、接口设备及计算机可读介质
CN108710597A (zh) * 2018-05-17 2018-10-26 福建升腾资讯有限公司 一种利用gpio优化mcu通信的方法及系统
CN111615692A (zh) * 2019-05-23 2020-09-01 深圳市大疆创新科技有限公司 数据搬运方法、计算处理装置、设备及存储介质
WO2021027182A1 (zh) * 2019-08-09 2021-02-18 苏州浪潮智能科技有限公司 一种服务器电源前后级通讯的方法、设备及可读介质
CN110659232A (zh) * 2019-09-12 2020-01-07 苏州浪潮智能科技有限公司 一种事件信息传输方法、装置、设备及存储介质
CN111309659A (zh) * 2020-01-21 2020-06-19 北京工业大学 一种基于可插拔模块的LoRa多通道通信扩展方法
CN111309659B (zh) * 2020-01-21 2021-08-13 北京工业大学 一种基于可插拔模块的LoRa多通道通信扩展方法
CN111324567A (zh) * 2020-02-10 2020-06-23 华大半导体有限公司 一种实现串口通讯的方法及单片机系统
CN111324567B (zh) * 2020-02-10 2022-05-27 华大半导体有限公司 一种实现串口通讯的方法及单片机系统
CN112035168A (zh) * 2020-08-19 2020-12-04 深圳市声天下科技有限公司 具有移位寄存器的hda控制器控制hda codec芯片的方法、系统及存储介质
CN112035168B (zh) * 2020-08-19 2021-03-30 深圳市声天下科技有限公司 具有移位寄存器的hda控制器控制hda codec芯片的方法、系统及存储介质
CN112732618A (zh) * 2021-01-08 2021-04-30 歌尔股份有限公司 一种串口通信方法、装置和系统
CN112817895A (zh) * 2021-01-28 2021-05-18 广州安凯微电子股份有限公司 一种基于gpio的通信方法
CN113778920A (zh) * 2021-11-12 2021-12-10 湖南双菱电子科技有限公司 一种嵌入式处理器串口通信方法和软件开发工具包
CN113778920B (zh) * 2021-11-12 2022-02-08 湖南双菱电子科技有限公司 一种嵌入式处理器串口通信方法和软件开发工具包
CN114448587A (zh) * 2021-12-21 2022-05-06 北京长焜科技有限公司 一种dsp中使用edma搬移lte上行天线数据的方法
CN114448587B (zh) * 2021-12-21 2023-09-15 北京长焜科技有限公司 一种dsp中使用edma搬移lte上行天线数据的方法
CN117312221A (zh) * 2023-11-28 2023-12-29 西安现代控制技术研究所 一种触发式spi数据通讯方法
CN117312221B (zh) * 2023-11-28 2024-03-15 西安现代控制技术研究所 一种触发式spi数据通讯方法

Also Published As

Publication number Publication date
CN106155960B (zh) 2019-03-22

Similar Documents

Publication Publication Date Title
CN106155960A (zh) 基于gpio握手和edma的uart串口通信方法
US11176068B2 (en) Methods and apparatus for synchronizing uplink and downlink transactions on an inter-device communication link
US9430432B2 (en) Optimized multi-root input output virtualization aware switch
CN102347896B (zh) 一种基于以太网加载fpga和dsp的平台及其实现方法
CN103077148B (zh) 一种基于pcie的主机通讯方法和主机
US20020071450A1 (en) Host-fabric adapter having bandwidth-optimizing, area-minimal, vertical sliced memory architecture and method of connecting a host system to a channel-based switched fabric in a data network
US20040151170A1 (en) Management of received data within host device using linked lists
CN106951388A (zh) 一种基于PCIe的DMA数据传输方法及系统
US10909655B2 (en) Direct memory access for graphics processing unit packet processing
CN102263698B (zh) 虚拟通道的建立方法、数据传输的方法及线卡
WO2018147955A1 (en) Multi-port multi-sideband-gpio consolidation technique over a multi-drop serial bus
CN104714918B (zh) 主机环境下高速fc总线数据接收及缓冲方法
CN104506379A (zh) 网络数据捕获方法和系统
US9594702B2 (en) Multi-processor with efficient search key processing
CN102750245B (zh) 报文接收方法、报文接收模块、装置及系统
KR20170133236A (ko) PCIe 장치들에서의 고속 입출력을 위한 스토리지 시스템, 방법 및 장치
CN110046114B (zh) 基于pcie协议的dma控制器及dma数据传输方法
CN108829530B (zh) 一种图像处理方法及装置
CN101122894A (zh) 一种异步串行通讯控制器件
US7577774B2 (en) Independent source read and destination write enhanced DMA
JP2003050788A (ja) 高レベル・データ・リンク・コントローラから多数個のディジタル信号プロセッサ・コアに信号を分配するための装置と方法
US20140280674A1 (en) Low-latency packet receive method for networking devices
CN110287141A (zh) 一种基于多种接口的fpga重构方法和系统
CN115955441A (zh) 一种基于tsn队列的管理调度方法、装置
CN110765044B (zh) 数据包传输装置及系统

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CP03 Change of name, title or address

Address after: 510000 no.2-8, North Street, Nancun Town, Panyu District, Guangzhou City, Guangdong Province

Patentee after: Guangzhou huiruisitong Technology Co.,Ltd.

Address before: No.2, Nancun North Street, Nancun Town, Panyu District, Guangzhou, Guangdong 511442

Patentee before: GUANGZHOU HUIRUI SITONG INFORMATION TECHNOLOGY Co.,Ltd.

CP03 Change of name, title or address
PP01 Preservation of patent right

Effective date of registration: 20221228

Granted publication date: 20190322

PP01 Preservation of patent right
PD01 Discharge of preservation of patent

Date of cancellation: 20240327

Granted publication date: 20190322