浅谈blackfin537处理器中sport口时分复用的理解

基于自动缓冲DMA模式下的Sport口的多通道操作

 

农民伯伯 zhangtaolaosan3@126.com

1, 基础知识

在给出例程之前,先了解一下相关的基础知识。

Sport接口提供一种多通道的操作模式,运用这种模式可以以时分复用的方式进行通信。在多通道模式中,每个数据字都占用一个独立的通道。每个sport最多可以进行128个通道的通信,sport口可以自动地选择某个通道而忽略其他的通道。Sport在每个通道中都可以进行发送,接收,或者同时发送和接收,或者什么都不做。多通道也可以运行在DMA模式下。

Sport多通道发送选择寄存器和多通道接收选择寄存器的设置必须在sport发送或者接收使能事前进行。也就是sport,DMA使能是所有相关寄存器设置之后的最后一步。

下图表示了一个多通道传输的实例,它具有以下特点:

在一个串行总线上用时分复用的模式进行传输,它的数据的发送和接收占用不同通道。

独立的选择发送或者接收通道

RFS信号最为帧开始的标志

TFS信号作为数据有效的标志

通道0和2用于接收,通道1和2用于发送多通道帧延时设置为1

多通道操作的使能

   SPORTx_MCM2中的MCMEN位置位使能SPORT多通道模式,sport的接收和发送时同时使能的,所有如果使能sport发送,那么接收也必须用多通道模式。

帧同步信号

在多通道模式中所有的接收和发送设备都必须有一个唯一的参考时序。RFS用来做为这个唯一的参考时序,RFS标志着一个数据块的开始。

在sport多通道模式下,接受方和发送方都用RFS来做为帧同步信号。RFS标志着多通道传输的开始。

RFS在被发送方接收的到时候,传输就开始了,在传输期间的其他的RFS信号时背忽略的。

多通道帧同步延时

在多通道模式中, SPORTx_MCMC2寄存器的MFD域定义了在帧同步的有效沿和第一个数据位的时钟个数。这个位的设置为不同的设备接口提供了方便。MFD为0的时候,第一个数据位是和帧同步位同时发出的,也就是说没有延时。MFD最大的可设定值是15。

窗口大小

       窗口大小定义了被多通道选择寄存器使能的通道的个数。被使能的序列被称为被激活的窗口。WSIZE[3:0]的值可以取0—15,对应8---128个窗口大小,递增值是8个通道。默认值是0,对应8个通道。WSIZE[3:0]的值与被激活的通道个数的关于如下:

Number of words in active window = 8 x (WSIZE + 1)

分布在窗口外面的多通道被使能将要被忽略。

窗口偏移

窗口偏移说明了,在1024个通道里面,被激活的窗口的起始位置。0表示没有偏移。例如wsize=0 woff=93,表示被激活的通道是8个,起始位置是93,即93—100通道是被激活。在sport被使能之后,这两个值是不能改变的。

通道选择寄存器

这里的通道就是指的时分复用里的通道,每个通道一般是3—32位的一个数据字,具体字长可以自由设定。多通道选择寄存器中的每个位对应一个通道,置1说明使能对应的通道,0表示不使能对应的通道。SPORTx_MRCSn 和 SPORTx_MTCSn被用来使能接收和发送的有效通道。发送和接收分别有四个32位寄存器,共可以设置128个通道。

2, 多通道设置例程

多通道应用背景:三个过程板与一个中心处理单元用sport总线相连,数据单向移动,从过程板向中心处理单元传送,传送方式:基于自动缓冲的DMA模式的sport多通道时分复用。

多通道时分复用的时候,sport口寄存器的设置:例如,两个设备,设备1设备2都向设备3发送,采用时分复用的方式主要寄存器设置如下:

基本参数:DSP : blackfin536

SCLK  100MHz

发送端没什么可说的,重点解释下面两个寄存器的设置

设备一:(发送)

*pSPORT1_MCMC1 =0x1000;//设备1窗口大小是16,偏移量是0

*pSPORT1_MCMC2 =MFD_1 |MCMEN;

*pSPORT1_MTCS0 = 0x0000FFFF; 发送通道是16个通道

设备二:(发送)

*pSPORT1_MCMC1 =0x1010;//设备2窗口大小是16,偏移量是16

*pSPORT1_MCMC2 =MFD_1 |MCMEN;

*pSPORT1_MTCS0 = 0x0000FFFF; 发送通道是前16个通道

设备三:接收设备  系统时钟100MHz

*pSPORT0_TCR1 = TCKFE | ITCLK;

*pSPORT0_TCR2 = SLEN_32 ;//| TSFSE;  //这里设置字长是32位,可根据需要设定

*pSPORT0_RCR1 =  RCKFE | IRFS | IRCLK;  //多通道时发送端提供帧同步

*pSPORT0_RCR2 = SLEN_32 ;  //这里设置字长是32位,可根据需要设定

*pSPORT0_RCLKDIV = 0x0001;   //发送时钟分频,可根据需要设定

*pSPORT0_RFSDIV = 0x03C0;    //帧同步分频

*pSPORT0_MCMC1 = 0x3000;  //窗口大小是32.就是说每个接收循环接收32个字,窗口偏移是0,就是从0通道开始接收

*pSPORT0_MCMC2 =  MFD_1 | MCMEN;

*pSPORT0_MTCS0 = 0x00000000;

*pSPORT0_MTCS1 = 0x00000000;

*pSPORT0_MTCS2 = 0x00000000;

*pSPORT0_MTCS3 = 0x00000000;

*pSPORT0_MRCS0 = 0xFFFFFFFF;  接收通道,32个通道

*pSPORT0_MRCS1 = 0x00000000;

*pSPORT0_MRCS2 = 0x00000000;

*pSPORT0_MRCS3 = 0x00000000;

调试过程中遇到的问题:收到的数据出现丢包或者重复包的现象。

原来是发送端的寄存器设置的问题,在DMA3_CONFIG这个寄存器中有个SYNC项的设置,在运用多通道时分复用的时候错误的将SYNC位置1了,就出现了上述的现象。原来这个SYNC位的作用是这样的:当DMA发送缓冲区的数据的最后一个数据移到sport FIFO中去的时候,就发生中断,然后刷新缓冲区,这是没有置位SYNC的情况。在置位SYNC之后的情况就变了,是sport FIFO中的数据的最后一个数倍发送出去之后才会产生中断,这样的话就会出现上述的错误现象,为什么会出现这样的现象呢?这是因为DMA缓冲区向sport FIFO中转移数据与sport FIFO向tx寄存器中发送数据的过程是连续的,加上SYNC这个位之后,当DMA缓冲区内的最后一个数据移动到SPORT FIFO中去的时候,并没有产生中断,这时发送过程还是正在执行的,当下一次再从DMA 缓冲区向FIFO中移动数据的时候,因为之前没有中断发生,DMA的缓冲区也没有刷新,它里面还是以前的数据,所以它又从第一个数据开始移动,所以这时又把DMA缓冲区内的第一个数据移出来了。当这个过程进行两次的时候,sport把这个循环进行完了,产生中断,这时DMA缓冲区的数据才开始刷新,所以,下一包数据实际上是前一包的数据的前两个字,加上DMA缓冲区刷新的数据的第三个字往后的数据,以此往复。

浅谈blackfin537处理器中sport口时分复用的理解相关推荐

  1. 浅谈单片机程序设计中的“分层思想”!

    浅谈单片机程序设计中的"分层思想",并不是什么神秘的东西,事实上很多做项目的工程师本身自己也会在用.看了不少帖子都发现没有提及这个东西,然而分层结构确是很有用的东西,参透后会有一种 ...

  2. 嵌入式AI —— 6. 为糖葫芦加糖,浅谈深度学习中的数据增广

    没有读过本系列前几期文章的朋友,需要先回顾下已发表的文章: 开篇大吉 集成AI模块到系统中 模型的部署 CMSIS-NN介绍 从穿糖葫芦到织深度神经网络 又和大家见面了,上次本程序猿介绍了CMSIS- ...

  3. mysql declare与set的区别_浅谈MySQL存储过程中declare和set定义变量的区别

    在存储过程中常看到declare定义的变量和@set定义的变量.简单的来说,declare定义的类似是局部变量,@set定义的类似全局变量. 1.declare定义的变量类似java类中的局部变量,仅 ...

  4. 浅谈网络爬虫中广度优先算法和代码实现

    前几天给大家分享了网络爬虫中深度优先算法的介绍及其代码实现过程,没来得及上车的小伙伴们可以戳这篇文章--浅谈网络爬虫中深度优先算法和简单代码实现.今天小编给大家分享网络爬虫中广度优先算法的介绍及其代码 ...

  5. 浅谈软件性能测试中关键指标的监控与分析(转)

    浅谈软件性能测试中关键指标的监控与分析 一.软件性能测试需要监控哪些关键指标? 软件性能测试的目的主要有以下三点: Ø  评价系统当前性能,判断系统是否满足预期的性能需求. Ø  寻找软件系统可能存在 ...

  6. php hasmany,浅谈laravel orm 中的一对多关系 hasMany

    个人对于laravel orm 中对于一对多关系的理解 文章表 article,文章自然可以评论,表 comment 记录文章的评论,文章和评论的关系就是一对多,一篇文章可以有多个评论. 在 comm ...

  7. mysql key_len_浅谈mysql explain中key_len的计算方法

    mysql的explain命令可以分析sql的性能,其中有一项是key_len(索引的长度)的统计.本文将分析mysql explain中key_len的计算方法. 1.创建测试表及数据 CREATE ...

  8. 事物日志恢复 mysql_浅谈SQL Server中的事务日志(五)----日志在高可用和灾难恢复中的作用...

    本篇文章是系列文章中的第五篇,是对前一个日志系列的补充篇.如果您对日志的基本概念还没有一个比较系统的了解,可以参看本系列之前的文章: 浅谈SQL Server中的事务日志(一)----事务日志的物理和 ...

  9. 浅谈V8引擎中的垃圾回收机制

    浅谈V8引擎中的垃圾回收机制 这篇文章的所有内容均来自 朴灵的<深入浅出Node.js>及A tour of V8:Garbage Collection,后者还有中文翻译版V8 之旅: 垃 ...

最新文章

  1. 激光雷达和相机感知融合简介
  2. Windows Server 2003 asp网页不能访问的常见问题
  3. Octave(open source版的matlab)介绍Octave online的使用
  4. 优雅的使用 PhpStorm 来开发 Laravel 项目
  5. 在Map 3D显示管理器中更改当前地图的名字
  6. CodeForces - 1562D2 Two Hundred Twenty One (hard version)(二分)
  7. PowerDesigner(九)-模型文档编辑器(生成项目文档)
  8. matlab端到端仿真中基站功率,基于matlab的cdma通信系统分析及仿真
  9. 浅谈es6 promise
  10. 图像的连通域标记算法及工具介绍
  11. linux 下查看tomcat版本
  12. Rational Rose概述
  13. android httpclient post 参数,Android HttpClient GET或者POST请求基本使用方法
  14. html怎么调用js,HTML内怎么调用JS函数?
  15. 深入理解GatewayWorker框架
  16. 现有一循环队列,其队头指针为front,队尾指针为rear;循环队列长度为N。其队内有效长度为?
  17. 启动U盘安装linux系统
  18. 练习:对十进制正整数求平方和
  19. python openssl 证书加解密过程感觉是这样
  20. LAMP详细架构过程

热门文章

  1. Elsevier上传LaTeX 修改稿踩坑
  2. 【TouchDesigner】Instance功能的使用
  3. 低功耗验证 (一) CMOS基础,功耗分类,低功耗方法
  4. python和pythonamd64_python amd64什么意思-问答-阿里云开发者社区-阿里云
  5. Python-Django毕业设计在线小说阅读平台微信小程序(程序+Lw)
  6. 425 failed to establish connection
  7. 计算机英语是啥意思啊,玩电脑英语是什么意思
  8. android 4.0的手机,酷派推出国内首款Android 4.0手机
  9. 年度最具创意十佳网名 你见过几个
  10. iOS开发:iPhone分辨率指南