(1)时钟、帧以及相关寄存器设定

http://blog.csdn.net/aesthete/archive/2006/07/06/885425.aspx

2)McBSP初始化

McBSP可以通过两种方式进行数据传输:

EDMA方式:McBSP发送事件通知EDMA通道进行传输,有接收事件REVT和输出事件XEVT,它们都与固定EDMA通道进行了绑定;

CPU方式:McBSP通过中断方式通知CPU进行数据的传输,有接收中断RINT和输出中断XINT,中断的设定由SPCR.RINTM和SPCR.XINTM控制,如果要使用中断方式,应该设为00b;CPU也可以通过轮询方式(Polled)来控制数据的传输,主要是通过查询SPCR.RRDY和SPCR.XRDY来实现;

McBSP串口复位,两种方式:

①设备复位:REST引脚置为低电平,所有的串口部件都复位,相应的寄存器也处于复位状态;

②寄存器方式复位:跟设备复位不同,寄存器方式复位可以独立复位各部件,如单独对接收部件复位等;寄存器复位是通过设置SPCR.XRST...等完成的;

MsBSP的EDMA传输方式初始化步骤:

SPRC.GRST(XRST, RRST, FRST)设定为0,如果刚刚进行了设备复位,则无需再去设定;

设置SRGR、SPCR、PCR、RCR寄存器,注意不要设置上述的几个复位字段;

设置SPRC.GRST为1使GRS启动,此时GRS选定的时钟源就可以驱动CLKG开始工作;(如果接收部件和输出部件的帧同步和时钟都由外部源驱动的话,则这一步可以省略,因为无需Sampel Rate Generator支持工作);

等待两个位时钟(CLKR、CLKX):

N = ((1+CLKGDV) * 2 * CLKSM) + ((1+CLKGDV) * 2 * (Ps /P) * (!CLKSM));

启用中断

需要设定DSP的控制寄存器CSR.GIE位和IER.NMIE;

对于EDMA,启动CPU中断INT8,启用EDMA中断EDMA_INT,并且选定合适的EDMA通道(12~15通道,17和18通道);

EDMA初始化:

对EDMA通道进行编程设定,如:

设定源地址Source Address为DRR用于读,或者为内存位置用于写;

设定目的地址Destination Address为DXR用于写,或者为内存位置用于读;

CNT设置为要传输元素和帧个数;

接收同步事件R/WSYNC为McBSP的REVT用于读;

输出同步事件R/WSYNC为McBSP的XEVT用于写;

设置EDMA通道传输完成中断位TCINT为1,启用Transfer Complete中断;

PRI推荐为1;

准备EDMA的启动:设置EDMA事件启用寄存器EER的对应于某(些)通道的位,启用某(些)通道的事件触发;

如果McBSP接收部件以及输出部件在帧传输过程中是作为从设备(Slave,即帧同步信号是从外部获取的)的,则需要设置SPCR.XRST或SPCR.RRST为1,表示准备接收帧同步信号并且开始数据传输;还有一种进行同步的方法是使用帧同步中断来唤醒接收/输出部件,但是需要设定SPCR.(R/X)INTM为10b;

准备接收或者输出帧主设备(Master,即同步信号从内部获取)运行,需要设定SPCR.RRST或者SPCR.XRST为1;

如果FSGM=1,表示帧同步信号由SRG的FSG驱动,则需要设置FRST为1来启动FSG;如果FSGM=0,表示每次DXR复制到XSR都会产生一帧,因此FRST无意义;

MsBSP的CPU中断传输方式初始化步骤:

设置SPCR.XINTM或者SPCR.RINTM为00b,表示允许McBSP在DXR或者DRR中的数据准备好时给CPU发送中断;除了上述步骤的EDMA相关部分,其余都相同,EDMA部分替换为如下步骤:

①通过中断选择器MUXL/H把XINT(0/1/2)和/或者RINT(0/1/2)中断映射到CPU;

2.     ②启用映射的中断。一旦McBSP初始化完成,传输每一个元素(写入DXR或者从DRR中读取)都会引起一次ISR的执行;

MsBSP的CPU轮询传输方式初始化步骤:

去除EDMA方式中的EDMA相关和中断相关,最后一步之后编写一个轮询循环检查SPCR.RRDY或者SPCR.XRDY以便确定McBSP是否准备好了接收或者输出。

(3)CSL在McBSP和EDMA中的应用

以DM642为例,要使用CSL API和C语言进行编程,需要在CCS集成开发环境的Project->Build Option中作一些设定,如link csldm642.lib以及link rts6400.lib,也需要预定义DSP芯片类型,如CHIP_DM642。当然,也可以在cmd文件中使用-l 选项加载csldm642.lib和rts6400.lib,在源文件或者头文件中#define CHIP_DM642。

在编程过程中,常用的CSL API如下:

声明CSL对象:

MCBSP_Handle hMcbsp

EMDA_Handle hEdma

EDMA_Handle hEdma_NULL

设置中断向量表:

IRQ_setVecs(vectors)

初始化CSL库:

CSL_init()

配置McBSP:

MCBSP_Config mcbspCfg

MCBSP_config(hMcbsp, &mcbspCfg)

打开McBSP通道:

hMcbsp = MCBSP_open(MCBSP_DEV0, MCBSP_OPEN_RESET);

启用sample rate generator:

MCBSP_enableSrgr(hMcbsp)

复位EDMA通道:

DMA_reset(INV)

EDMA_clearPram(0x00000000)

启用中断:

IRQ_nmiEnable()

IRQ_globalEnable()

IRQ_disable(IRQ_EVT_DMAINT0)

IRQ_clear(IRQ_EVT_DMAINT0)

IRQ_enable(IRQ_EVT_DMAINT0)

打开EDMA通道:

hEdma = EDMA_open(EDMA_CHA_REVT0, EDMA_OPEN_RESET);

配置EDMA通道:

EDMA_Config config;

EDMA_config(&config);

EDMA_configArgs()

配置空的EDMA参数集,需要结束时link到此参数集:

hEdma_NULL = EDMA_allocTable(−1);

EDMA_reset(hEdma_NULL);

EDMA_link(hEdma, hEdma_NULL);

启用EDMA:

EDMA_enableChannel(hEdma)

启用McBSP接收和传输部件

MCBSP_enableRcv(hMcbsp)

MCBSP_enableXmt(hMcbsp)

启用帧同步:

MCBSP_enableFsync(hMcbsp)

处理EDMA中断:

EDMA_intTest()

EDMA_intClear()

关闭McBSP 和 EDMA 通道:

MCBSP_close(hMcbsp)

DMA_close(hDma)

EDMA_close(hEdma)

转载于:https://my.oschina.net/alphajay/blog/98321

McBSP初始化以及和EDMA的结合使用(C64X DSP)相关推荐

  1. 基于TMS320C6713的McBSP和EDMA实现串口通信

    针对TI公司的DSP芯片TMS320C6713,利用片上同步多通道缓冲串行口(McBSP)和增强型直接存储器存取(EDMA)实现了串口通信功能.该方案解决了芯片只有同步串口而不能进行异步传输的问题,丰 ...

  2. Xiaojie雷达之路---EDMA Driver External Functions详解

    文章目录 getNumInstances init open configErrorMonitoring configChannel startDmaTransfer isTransferComple ...

  3. DSP28335 Mcbsp SPI实现软件片选

    思路是把FSX(片选)引脚设置为GPIO脚,控制输出 具体代码如下 管脚初始化函数修改如下 InitMcbspbGpio(void) {--GpioCtrlRegs.GPAMUX2.bit.GPIO2 ...

  4. C64X EDMA优先级及优先级队列

    C64X EDMA优先级及优先级队列 下图为EDMA传输请求方框图: 从图中我们可以看到,请求有三种: l L2控制器传输请求:L2控制器发布所有用于CACHE服务的传输请求:如存取非CACHE内存. ...

  5. EDMA 和QDMA 还看不懂,先收藏着

    1)EDMA概要 ①EDMA数据传输有两种发起方式: ü         CPU发起的EMDA数据传输(非同步方式):需要传输时,CPU设置ESR寄存器的相应位为1,从而触发一个EDMA事件的产生,事 ...

  6. EDMA 和QDMA

    http://hi.baidu.com/phoebus08/blog/item/5d3ccffba88452d6b58f316d.html 1)EDMA概要 ①EDMA数据传输有两种发起方式: ü   ...

  7. EDMA - DMA QDMA 完美总结

    EDMA - DMA QDMA -------------------------------- 做个参考,和6487/8 的EDMA3的user guide有点区别. --------------- ...

  8. 6416与aic23进行语言数据采集和处理的程序beta版

    本文实现从aic32的line-input获得音频数据并在line-output播放,使用McBSP和EDMA来高效的传输数据,避免DSP的高负载. 数据传输: codec与DSP通过McBSP2传输 ...

  9. DaVinci DM6437 中文教程

    一.DaVinci DM6437 概述 TMS320DM6437是TI公司2006年推出的.专门为高性能.低成本视频应用开发的.主频600MHz的.32位定点DSP达芬奇 (DaVinci(TM)) ...

  10. DSP中断使用简明教程

    一. 简述 本文介绍TMS320C6000系列中断设置的简明方法.通过示例定时器中断,MCBSP串口接收中断及外部中断这三种中断实现过程,介绍如何实现中断各个寄存器的配置,中断向量表书写以及中断服务函 ...

最新文章

  1. 5月第4周网络安全报告:应用程序漏洞占比达70.3%
  2. 浏览是不是计算机网络功能,什么是因特网——计算机网络是怎么为你服务的?...
  3. 802.11N blockACK
  4. unity3d 多人寻路堵塞堆叠问题
  5. 关于指针,可能是网上最详细的讲解了
  6. navicat 怎么调试存储过程_Mysql调试存储过程最简单的方法
  7. 月圆花美 中秋快乐!
  8. ps画布扩展颜色灰色不可用的原因和解决方法
  9. MySQL CONCAT函数:字符串拼接
  10. Sql Server数据库查询去重数据,并保留最新的数据,以及删除重复数据
  11. 学生信息管理系统(php MySql),基于PHP学生信息管理系统设计系统设计(MySQL)(含录像)...
  12. 红帽linux考证时间,红帽认证考试时间
  13. 中小企业信息化建设管理方案规划设计1
  14. matlab卡住了 打不开,win7系统matlab打不开无法运行的解决方法
  15. 阿里字体图标库的使用
  16. 天啦噜!Stateflow动态测试竟然so easy
  17. 什么是 ASP.NET
  18. 水星怎么设置网速最快_水星mw300r怎么提高网速
  19. 大数据之Flume:Flume概述
  20. 用C语言开发NES游戏(CC65) 前言

热门文章

  1. c# List 里面的Linq方法
  2. MKAnnotationView,MKAnnotation与MKMapView结合使用显示坐标点
  3. 读取文件,解决中文乱码问题
  4. 【Sarah】第一周
  5. 微信小程序网络请求封装
  6. BroadCastReceive的理解和使用
  7. python管道_python中管道
  8. druid mysql 时序_Druid时序数据库常见问题及处理方式
  9. 专题二:MATLAB矩阵处理
  10. c语言中文纠错,c语言纠错。。急急急。。