首页 [电子电路]基于TMS320DM6437的McBSP与EDMA实现串口通信

[电子电路]基于TMS320DM6437的McBSP与EDMA实现串口通信

举报
开通vip

[电子电路]基于TMS320DM6437的McBSP与EDMA实现串口通信[电子电路]基于TMS320DM6437的McBSP与EDMA实现串口通信 基于TMS320DM6437的McBSP与EDMA实现串口通信 感谢到访我的主页:(文档西游) 本文档格式为WORD,若不是word文档,则说明不是原文档。 若图片过大,下载后拉小即可。 TMS320DM6437是专为高性能、低成本视频应用开发的,主频600 MHz,32位定点,采用达芬奇(DaVinci(TM))技术。该器件采用TI第3代超长指令集结构(VelociTI(3)的TMS320C64x+DSP内核,主频可达600 M...

[电子电路]基于TMS320DM6437的McBSP与EDMA实现串口通信
[电子电路]基于TMS320DM6437的McBSP与EDMA实现串口通信 基于TMS320DM6437的McBSP与EDMA实现串口通信 感谢到访我的主页:(文档西游) 本文档格式为WORD,若不是word文档,则 说明 关于失联党员情况说明岗位说明总经理岗位说明书会计岗位说明书行政主管岗位说明书 不是原文档。 若图片过大,下载后拉小即可。 TMS320DM6437是专为高性能、低成本视频应用开发的,主频600 MHz,32位定点,采用达芬奇(DaVinci(TM))技术。该器件采用TI第3代超长指令集结构(VelociTI(3)的TMS320C64x+DSP内核,主频可达600 MHz,支持8个8位或4个16位并行MAC运算,峰值处理能力高达4 800MIPS。基于TMS320DM6437诸多特点,这里提出一种实现DSP与FPGA的双向数据交换设计方案,采用TMS320DM6437的McBSP和EDMA实现异步串口通信。 McBSP接口是全双工串行接口,提供收发数据双缓冲以处理连续的数据流,并可独立配置收发部分,接收和发送都可使用独立的帧信号和时钟源。TMS320DM6437有2个独立的McBSP接口(McBSP0和McBSPl)。EDMA可处理该处理器上所有内存单元和外设的数据传输,且不占用DSP时钟周期,EDMA还提供针对McBSP的同步事件,可方便控制数据传输。接收数据时,FPGA的数据通过McBSP传到DSP的DRR寄存器中,触发McBSP接收同步事件,EDMA将数据搬入DSP内存。发送数据时,当EDMA从DSP内存中将数据搬入DSP的DXR寄存器时,利用McBSP发送同步事件,将数据传输给FPGA。 1 硬件接口电路设计 McBsP接口的硬件连接如图1所示。DSP的McBSP接口可由内部时钟发生器或外部器件提供收,发时钟信号(CLKR,CLKX)及收,发帧同步信号(FSR,FSX)。为了简化FPGA内部时序,以上信号均由FPGA提供。图1中的EN_IN、EN_OUT为DSP控制FPGA中McBSP接口的使能信号,它们均与DSP的GPIO相连。当EN_IN为高时,FPGA接收DSP的数据;当EN_OUT为高时,FPGA开始向DSP发送数据。 2 软件程序设计 传统的C6000型DSP对McBSP和EDMA进行操作时,多使用TI公司提供的CSL(Chip Support Library)进行编程操作,由于TMS320DM6437不支持CSL,而是改用PSP(Proeessor Support Package),所以对TMS320DM6437 McBSP接口采用PSP提供的McBSP Driver,主要用McBSP Driver提供的LLC层API进行编程。LLC层提供基于不同平台的驱动核心抽象。在该层可进行寄存器操作,宏定义,并且底层API可直接与硬件通信。 对应的EDMA程序开发则采用EDMA LLD(EDMA low Level Driver)提供的各种库进行编程。LLD实际上包含2个库用于管理EDMA外设:一个是EDMA RM(EDMA Resource Manager),管理所有的EDMA硬件资源以及中断;另一个是EDMA DRV(EDMA Driver),完成所有EDMA相关配置,并且通过RM满足资源需求。当调用DRV层API进行操作时,实际上是通过DRV层API调用RM层API来对EDMA外设寄存器进行直接操作来配置EDMA硬件。 本例中实现DSP和FPGA通信时,McBSP所需的帧同步信号以及时钟信号均由FPGA产生,McBSP发送过来32 bit的数据,DSP内部采用EDMA方式接收数据,McBSP接收同步事件触发EDMA传输。将数据放入DSP片内二级存储器的缓冲区,等待DSP处理。为了保证后写入的数据不会覆盖先写入的还没来得及被DSP处理的数据,片内二级存储器缓冲区采用乒乓缓冲结构。同样,DSP发送32bit数据给FPGA时,也是通过EDMA方式,由McBSP发送同步事件触发EDMA传输。 2(1 McBSP配置 McBSP的开启以及参数配置均采用LLC提供的API以及数据结构完成。但是因为TMS320DM6437的引脚多采用引脚复用,并且GPIO和McBSP引脚复用到一起,由于本例中McBSP帧同步信号是由外部源产生,为了保证能监测到第一个帧同步信号,需先在PINMUX寄存器里将复用的引脚配置成GPIO模式,等检测到帧同步信号后,再将复用的引脚恢复成McBSP模式。 2(1(1 接收数据格式配置 McBSP接收数据格式在数据结构LLC_RcvDataSetup中设置,该数据结构在McBSP Driver提供的头文件llc_mcbsp Type(h中定义,在编译工程文件的时候需包含此头文件。接收数据为单帧数据,一个数据帧长度为4个字节,采用帧同步信号检测模式,不进行压缩,数据传输延迟一个比特,采用McBSP同步事件产生中断。McBSP发送数据格式在数据结构LLC_XmitDatasetup中设置,具体参数和接收数据格式保持一致。M-cBSP帧同步和时钟参数在数据结构LLC_mcbspClkSetup中设置,该结构同样在头文件llc_mcbspType(h中定义。本例中,发送和接收的帧同步信号以及时钟源都由外部产生,接收和发送帧同步都是高电平有效,接收时钟上升沿有效,发送时钟下降沿有效,帧同步脉冲宽度为1bit,脉冲周期为32 bit。 2(1(2 启动McBSP 首先调用MeBSP LLC层API对McBSP接口进行设置,准备接收FPGA传输过来的信号。先调用函数LLC_mcbspOpen,该函数在llc_mcbsp(c中定义,函数原型为 LLC_mcbspOpen(LLC_McbspObj*const pMcbspObj, Uint32InstanceId,Int32*pMcbspParam,CSL_Status*pStatus),所需参数分别为用户定义的McBSP通道对象,McBSP通道ID,用户定义的配置参数及状态信息,返回参数为指向该通道的句柄hMcbsp。该句柄作为调用API的参数。 然后设置McBSP通道0,调用函数 LLC_mcbspHwSetup(LLC_McbspHandle hMcbsp,const LLC_McbspHwSetup*setup)。第1个参数即为刚才返回的指向McBSP通道0的句柄,第2个参数为一个结构体,包含了前面定义的接收和发送数据结构以及帧同步和时钟参数结构,这样就按 照实际应用的要求完成了对McBSP0通道的设置。配置完成后,相应的McBSP寄存器的值为:SPCR=0X0000400; RCR=0x00050040;XCR=0x00050040;SRGR=0x20000001;PCR=0x00000080。 最后利用函数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决定。 TMS320DM6437的EDMA共有128个参数RAM,其中存放每个EDMA通道需要的各个传输控制参数,参数RAM的默认对应关系为:EDMA EVENTO对应参数RAMO,EDMAEVENT1对应参数RAM1,等。以此类推。但是也可以在DCHMAPO-63寄存器里修改相应位自行对应。参数RAM的具体结构如图2所示。 一个参数RAM的长度为32个字节。首先是32 bit的可选参数OPT,对于可选参数,通过对各个位置0或1设置事件优先级,数据单元大小,源地址,目的地址变更模式,传输结束代码,是否使能传输参数链接(LINK)功能,同步传输方式等。SRC和DST为EDMA传输所需的源地址和目 的地址。SRCBIDX和DSTBIDX用于二维传输中,表示一个ARRAY的开始到下个ARRAY的开始所跨越的字节数。SRCCIDX和DSTCIDX用于三维传输中,一个FRAME的开始到下个FRAME的开始所跨越的字节数。BCNTRLD:三维传输里需 LINK:传输完成后重新加载的参数RAM要重新加载的BCNT。 地址,默认是LINK到空参数RAM。 在此实例中采用的双缓冲结构,即在DSP缓冲区内开辟2块缓冲用于并行处理FPGA通过McBSP传过来的数据。当EDMA往PingBuffer里传输数据时,CPU即可处理PongBuffer里的数据,当工作完成后,彼此又交换缓冲区,EDMA往PongBuffer里写数据,CPU处理PingBuffer里的数据。为了实现双缓冲结构,采用了EDMA提供的LINK功能,即将不同的EDMA传输参数RAM链接起来,组成一个传输链,在传输链中,一个传输的结束会导致自动从参数RAM中装载下一个传输需要的事件参数。在具体程序中,只需将Ping通道的参数RAM LINK到Pong通道,同时将Pong通道的参数RAMLINK到Ping通道即可。 2(2(2 EDMA接收数据配置实现 开发环境采用CCS 3(3。通过调用LLD API实现对EDMA Driver的配置以及传输操作。 在使用EDMA3 Driver之前必须首先对其进行初始化。EDMA3 LLD提供了2个API进行相关工作。EDMA3_DRV_create和 EDMA3_DBV_open。前者用于创建一个EDMA3 Driver对象,后者用于开启对应的EDMA3 Driver通道。 创建并开启EDMA3 Driver通道后,即可为此通道分配资源以及初始化其配置。首先调用EDMA3_DRV_requestChannel请求分配一个DMA通道,随后对该通道的参数RAM进行配置,以满足传输需要。EDMA3_DRV_setSrcParams用于设置该EDMA通道接收数据源地址为McBSPO的DRR寄存器,地址为0x01D00000,地址计数模式为递增模式。EDMA3_DRV_setDestParams设置该EDMA通道接收数据目的地址为DSP片内存储区PingBuf-fer首地址,确保第一次传输数据是到PingBuffer,地址计数模式同样为递增模式。EDMA3_DRV_setSrcIndex用于配置源地址计数索引值,由于源地址为McBSPO的DRR寄存器,固定不变,所以srcBidx=0,srcCidx=0。接着调用EDMA3_DRV_setDestIndex配置目的地址计数索引值,由于接收数据为32 bits,所以sreBidx=srcCidx=4,这是因为DSP内的最小计数单元为一个字节,8bit。EDMA3_DRV_setTransferPamms配置剩余的参数RAM传输参数,包括设置ACNT=4,BCNT=2 048,CCNT=1,采用一维传输A-SYNC。 接下来是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中断实现 结合DSP,BIOS设置了EDMA中断,以便在一个接收Buffer被填满时,产生的EDMA中断可通知DSP处理该Buffer的数据。 TMS320DM6437中,EDMA的128个通道只产生一种中断,当一个通道传输完成后,IPR(Interrupt Pending Register)寄存器里的相应位会被置1,EDMA中断处理器通过查询IPR寄存器确定是哪个通道完成了传输,并调用相应的中断服务程序。 EDMA LLD中中断的设置通过调用 EDMA3_DRV_requestChannel实现。该函数的参数中跟中断有关的为eventQ(与通道优先级相关),tceCb(回调函数,即通道传输完成后所调用的中断服务程序)。本例中,设置eventQ=0,保证最高优先级,tceCb=edma_isr,该函数的作用是在通道传输完成后发送一个旗语信号给信号处理程序,通知其对收到的数据进行处理。此外,还需调用EDMA3_DRV_setOptField将参数RAMOPT参数中TCINTEN位置1,以使能EDMA中断。随后,利用DSP,BIOS将EDMA中断源和DSP的可屏蔽中断5连接起来,具体参数在DSP,BIOS配置文件中的HWI模块设置,如图3所示。 最后,由于选用了TMS320DM6437的可屏蔽中断5,还需使能IER寄存器里的对应位,C64_enableIER(C64_EINT5)。 2(2(4 EDMA发送数据配置实现 EDMA发送数据程序流程和接收数据程序流程大略一致,但较为简单。只需请求一个EDMA传输通道,配置其源地址为DSP内部存放FPGA所需数据内存首地址,目的地址为McBSP的DXR寄存器。其余参数和EDMA接收数据通道参数相同。 3 实现结果 配置好MeBSP和EDMA后,启动FPGA传输数据,DSP做好接收和发送数据的准备,实验中,FPGA连续不断地发送自加地数给DSP,而DSP只发送2048个32 bit的从0开始的自加数据给FPGA。实验结果表明,DSP内部的PingBuffer区和PongBuffer区能连续不断的收到FPGA传输过来的数 据。某一时刻的PingBuffer区和PongBuffer区内部数据如图4所示,能看出实验实现了上述功能。 在FPGA端监测到DSP发送过去的数据如图5所示,可以看出是从0开始的连续自加数据。 本例中设置传完2 048个数据后EDMA发送事件触发一次中断,调用的中断服务程序主要作用是发送一个旗语信号给信号处理程序,并打印出“GOT INTO RCV ISR”,进入中断服务程序,随后已被阻塞的信号处理程序线程收到旗语信号后,开始运行,并打印信息“receive rcv int”,中断测试结果如图6所示,可以看出中断在连续不断的被触发。 4 结论 通过TMS320DM6437的McBSP和EDMA实现了异步串口通信,并已经通过软硬件调试,该部分已被实际运用于实时数据处理中。该方法硬件部分较容易实现,并且简单可靠,且采用EDMA方式,大大节约了CPU资源,取得了较好的效果,具有一定的应用价值。 欢迎到访: 您还在到处查找电子电路设计?电子电路 论文 政研论文下载论文大学下载论文大学下载关于长拳的论文浙大论文封面下载 ?方案吗,在这里可以找到,更多资源或疑问查看可站内联系 免费阅读西游文档:Linux下IEEE1394组网技术研究及实现 种片内硬件调试支持单元设计 基于TMS320DM6446的H.264编码器的设计与优化 嵌入式视频网络服务器的开发及其应用 双口RAM在DSP与ICCD通信系统中的应用 智能家居远程监控系统的设计及实现 嵌入式电源 基于DSP的并联电力有源滤波器的仿真研究 PGI 高性能并行编译器及开发工具【意法半导体】 灿芯半导体获得ARM IP 授权 风河公司扩展其“On-Board Program” 计划 项目进度计划表范例计划下载计划下载计划下载课程教学计划下载 业界首款64 位多核多线程处理器IP【MIPS 】 ChipStart选择S2C公司作为原型平台提供商 MathWorks直接从 本文档若侵害你在权益,请留言或者站内联系。
本文档为【[电子电路]基于TMS320DM6437的McBSP与EDMA实现串口通信】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_482581
暂无简介~
格式:doc
大小:93KB
软件:Word
页数:10
分类:生活休闲
上传时间:2018-04-28
浏览量:40