采用McBSP接口与EDMA配置实现异步串口通信,提高工作的效率

网友投稿 460 2022-11-02

采用McBSP接口与EDMA配置实现异步串口通信,提高工作的效率

2 软件程序设计

在很多实践中实现DSP和FPGA通信时,McBSP所需的帧同步信号以及时钟信号均由FPGA产生,McBSP发送过来32 bit的数据,DSP内部采用EDMA方式接收数据,McBSP接收同步事件触发EDMA传输。将数据放入DSP片内二级存储器的缓冲区,等待DSP处理。为了写入的数据不被覆盖掉,片内二级存储器缓冲区采用乒乓缓冲结构,就有McBSP发送同步事件触发EDMA传输。

2.1 McBSP配置

2.1.1 接收数据格式配置

2.1.2 启动McBSP

然后设置McBSP通道0,调用函数LLC_mcbspHwSetup(LLC_McbspHandle hMcbsp,const LLC_McbspHwSetup*setup)。第1个参数即为刚才返回的指向McBSP通道0的句柄,第2个参数为一个结构体,包含了前面定义的接收和发送数据结构以及帧同步和时钟参数结构,这样就按照实际应用的要求完成了对McBSP0通道的设置。

最后利用函数LLC_mcbspHwControl使能McBSP接收和发送功能。函数原型为LLC_mcbspHwControl(LLC_McbspHandle hMcbsp,LLC_Mcbsp ControlCmd cmd,const void*arg)。第1个参数为指向McBSP通道0的句柄,第2个参数为硬件控制命令,第3个为对特定命令的补充说明。开启McBSP接收发送功能时,硬件控制命令为LLC_MCBSP_CMD_RESET_CONTROL,使能发送功能时,命令补充说明为LLC_MCBSP_CTIRL_RX_ENABLE,使能接收功能时,命令补充说LLC_MCBSP_CTRL_TX_ENABLE。

2.2 EDMA配置

2.2.1 EDMA配置原理

EDMA中传输的数据种类有3种:ARRAY,BLOCK,FRAME,分别对应3种不同类型的传输。首先是一维传输,即每一个EDMA事件触发的传输只传输一个ARRAY,该ARRAY所包含的字节数由参数RAM里的参数ACNT决定。然后是二维传输,每一个EDMA事件触发传输一个FRAME,每个FRAME里包含的ARRAY数由参数BCNT决定。就像这样在类推先去,三维传输即每次传输一个BLOCK,每个BLOCK里包含的FRAME数由参数CCNT决定。这样的数据就更加有严密性。

一个参数RAM的长度为32个字节。首先是32 bit的可选参数OPT,对于可选参数,通过对各个位置0或1设置事件优先级,数据单元大小,源地址/目的地址变更模式,传输结束代码,是否使能传输参数链接(LINK)功能,同步传输方式等。SRC和DST为EDMA传输所需的源地址和目的地址。SRCBIDX和DSTBIDX用于二维传输中,表示一个ARRAY的开始到下个ARRAY的开始所跨越的字节数。SRCCIDX和DSTCIDX用于三维传输中,一个FRAME的开始到下个FRAME的开始所跨越的字节数。

2.2.2 EDMA接收数据配置实现

在使用EDMA3 Driver之前必须首先对其进行初始化。EDMA3 LLD提供了2个API进行相关工作。EDMA3_DRV_create和EDMA3_DBV_open。前者用于创建一个EDMA3 Driver对象,后者用于开启对应的EDMA3 Driver通道。

接下来是Ping/Pong传输的程序实现。需再调用EDMA3_DRV_requestChannel两次,替Ping/Pong各自分配一个通道,于是,一共有3个通道,对应3个参数RAM。Ping通道的参数RAM与主通道的参数RAM完全一致,Pong通道的参数RAM与主通道相比,只需将Pong通道接收数据目的地址改为PongBuffer首地址。随后调用EDMA3_DRV_linkChannel 3次,分别将主通道和Ping通道LINK,Ping通道和Pong通道相互LINK。

2.2.3 EDMA中断实现

TMS320DM6437中,EDMA的128个通道只产生一种中断,当一个通道传输完成后,IPR(Interrupt Pending Register)寄存器里的相应位会被置1,EDMA中断处理器通过查询IPR寄存器确定是哪个通道完成了传输,并调用相应的中断服务程序。

3 实现结果

配置好MeBSP和EDMA后,启动FPGA传输数据,DSP做好接收和发送数据的准备,实验中,FPGA连续不断地发送自加地数给DSP,而DSP只发送2048个32 bit的从0开始的自加数据给FPGA。该结果如图5所示。着可以表明DSP内部的PingBuffer区和PongBuffer区能连续不断的收到FPGA传输过来的数据。

本例中设置传完2 048个数据后EDMA发送事件触发一次中断,调用的中断服务程序主要作用是发送一个旗语信号给信号处理程序,并打印出“GOT INTO RCV ISR”,进入中断服务程序,随后已被阻塞的信号处理程序线程收到旗语信号后,开始运行,并打印信息“receive rcv int”,中断测试结果如图6所示,可以看出中断在连续不断的被触发!

4 结论

经过以上的测试和实验过程,TMS320DM6437的McBSP和EDMA实现了异步串口通信,在其测试中软硬件的实施都很正常,并且切合实际的应用和实施。可以看出该发放硬件部分容易实现,而且非常简单放心,且采用EDMA方式,很好的节约了资源,大大的提高了工作的效率和资源的利用。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:NFT 智能合约中的元数据(Metadata)
下一篇:java 数据结构与算法 (快速排序法)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~