TI C6000 McBSP SPI ROM应用-EDMA传输

2015-04-14 20:27 阅读 299 次 评论 0 条

上一日志TI C6000 McBSP SPI ROM应用只是一个简单的工程,基本功能就是配置mcbsp与EDMA。在对板卡调试之前还是有必要将源代码看一下,稍微理解一下的。

尽管代码中包含了很多宏定义的预编译处理,可以作两个说明一个是支持DMA_SUPPORT宏,第二个是C64_SUPPORT,看源码时在这个宏定义下的就看,其它可以不看。本人觉得太碍眼就把不想关的代码删除,看起来也方便些。

一、McBSP配置

init_mcbsp0_master(void)这个函数是配置mcbsp0的,这两需要注意几个参数

MCBSP_SPCR_RMK(
       MCBSP_SPCR_CLKSTP_DELAY, /* CLKSTP=11b with CLKXP=0, clock starts with */
       ),

对于SPI Flash基本都是带有延时的SCK信号传输方式。

MCBSP_SRGR_RMK(
           MCBSP_SRGR_CLKGDV_OF(0x5F) /* divide clock by factor of 95         */
           ),

这个是SPI SCLK时钟产生分频计数,一般采用的是DSP内部时钟源,cpu clk/4/(CLKGDV+1)则为SPI SCLK时钟频率。

MCBSP_PCR_RMK(
      MCBSP_PCR_CLKXP_RISING,  /* trans. clk pol. from rising edge of CLKX */
      MCBSP_PCR_CLKRP_FALLING
      )

SCLK与数据线上数据锁存的方式,这个两个定义需要与SPI Flash中的说明一致。

二、EDMA配置

程序启用了两个EDMA通道,EDMA1用于McBSP接收通道,EDMA2用于McBSP发送通道。下图为EDMA所用的通道中断号(这个与Timer事件对应EDMA通道号相似)。McBSP0接收与发送EDMA通道编号

EDMA1接收数据通道,源地址为McBSP的DRR地址,即为固定地址,而目的地址为DSP内部RAM地址,为地址按size自增加地址。

EDMA2发送数据通道,源地址为DSP内部RAM地址,而目的地址为DXR地址,即为固定地址。

我们知道SPI传输共用时钟,所以一般传输都是SPI Flash在时钟的上升沿锁存输入数据(命令字、地址和编程数据),对应DSP写操作。在时钟下降沿,将串行数据输出,对应DSP的读操作。所以对于SPI传输而言,采用两个EDMA是比较合适的,发送与接收基本是同时进行的。

McBSP与Timer触发的EMDA有不同的地方,不同的地方是McBSP的EDMA是Link的,在完成传输之后,EDMA重新加载EDMA参数(Reload event parameters),然后这个重载的EDMA参数,只是为了将McBSP的EDMA通道停止,避免传递不需要的数据。

在Timer事件触发的EDMA中,发送或接收数据完毕后,在中断函数中,将定时器TIMER_pause(),这样就停止传输了。

在TI C6000 McBSP SPI ROM应用中的工程,直接运行是可以产生EDMA中断的,即表明SPI数据的发送与接收是正常工作。但是与SPI ROM连接相关的代码例程中并没有提供,需要自己编写。

版权声明:本文著作权归原作者所有,欢迎分享本文,谢谢支持!
转载请注明:TI C6000 McBSP SPI ROM应用-EDMA传输 | 起点博客
分类:应用笔记 标签:, , , ,

发表评论


表情