基于DSP的网络通信程序设计

发布者:Howard_Sun最新更新时间:2014-07-13 来源: 21IC关键字:DSP  网络通信  程序 手机看文章 扫描二维码
随时随地手机看文章

摘要:通过分析网卡基本通信过程控制和数字信号处理器(DSP)对网卡直接编程方法,成功设计基于DSP的网络通信程序,从而最终实现DSP系统数字化和网络化的融合。 关键词:DSP 网络通信程序 通信协议 网卡 DSP芯片是专门为实现各种数字信号处理算法而设计的、具有特殊结构的微处理器,其卓越的性能、不断上升的性价比、日渐完善的开发方式使它的应用越来越广泛。将计算机网络技术引入以DSP为核心的嵌入式系统,使其成为数字化、网络化相结合,集通信、计算机和视听功能于一体的电子产品,必须大大提升DSP系统的应用价值和市场前景。将DSP技术与网络技术相结合,必须解决两个关键问题:一是实现DSP与网卡的硬件接口技术,二是基于DSP的网络通信程序设计。DSP与网卡的硬件接口技术参考文献[1]有比较详尽的论述,以下主要讨论基于DSP的网络通信程序设计。 1 通信协议的制定 协议是用来管理通信的法规,是网络系统功能实现的基础。由于DSP可以实现对网卡的直接操作,对应于OSI网络模型,网卡包含了物理层和数据链路层的全部内容,因此,规定了数据链路层上数据帧封装格式,就可以为基于DSP的局域网络中任意站点之间的通信提供具体规范。因为以太网是当今最受欢迎的局域网之一,在以太网中,网卡用于实现802.3规程,其典型代表是Novell公司的NE2000和3COM公司的3C503等网卡,所以研究工作中的具体试验平台是以DSP为核心构成的以太局域网,主要用于语音的实时通信,所使用的网卡为Novell公司的NE2000网卡。NE2000网卡的基本组成请见参考文献[2],其核心器件是网络接口控制器(NIC)DP8390。该器件有三部分功能:第一是IEEE802.3MAC(媒体访问控制)子层协议逻辑,实现数据帧的封装和解封,CSMA/CA(带碰撞检测功能的载波侦听多址接入)协议以及CRC校验等功能;第二是寄存器堆,用户对NE2000网卡通信过程的控制主要通过对这些寄存器堆中各种命令寄存器编程实现;第三是对网卡上缓冲RAM的读写控制逻辑。DP8390发送和接收采用标准的 IEEE802.3帧格式。IEEE802.3参考了以太网的协议和技术规范,但对数据包的基本结构进行了修改,主要是类型字段变成了长度字段。所以,以 DSP为核心的局域网内通信数据包基本格式如图1所示。

1.gif

DSP读出数据包和打包从目的地址开始。目的地址用来指明一个数据帧在网络中被传送的目的节点地址。NE2000支持3种目的地址:单地址、组地址及广播地址。单地址表示只有1个节点可以接收该帧信息;组地址表示最多可以有64个字节接收同一帧信息;而广播地址则表示它可以被同一网络中的所有节接收。源地址是发送帧节点的物理地址,它只能是单地址。目的地址和源地址指网卡的硬件地址,又称物理地址。 在源地址之后的2个字节表示该帧的数据长度,只表示数据部分的长度,由用户自己填入。数据字段由46~1500字节组成。大于1500字节的数据应分为多个帧来发送;小于46字节时,必须填充至46字节。原因有两个:一是保证从目的地址字段到帧校验字段长度为64字节的最短帧长,以便区分信道中的有效帧和无用信息;二是为了防止一个站发送短帧时,在第一个比特尚未到达总线的最远端时就完成帧发送,因而在可能发生碰撞时检测不到冲突信号。NE2000对接收到的从目的地址字段后小于64字节的帧均认为是“碎片”,并予以删除。在数据字段,根据系统的具体功能要求,用户可以预留出若干个字节以规定相应的协议,以便通信双方依据这些字节中包含的信息实现不同的功能。 2 基于DSP的网络通信程序设计 如果基于网络操作系统,用户可以利用一些软件对网络操作系统的支持,很容易地编写出优秀的网络通信程序,但这些程序必须依附于网络操作系统。而在DSP环境下,必须深入了解网络接口控制器(NIC)的工作原理[2],通过对网络直接编程,实现局域网内任意站点之间的通信而完全抛开网络操作系统。 DSP对网卡的通信过程控制就是DSP对DP8390中各种寄存器进行编程控制,完成数据分组的正确发送和接收。DP8390的所有内部寄存器都是8位,映像到4个页面。每个页面有16个可供读写的寄存器地址(RA=00H~0fH)。页面的选择由命令寄存器CA控制。第0页寄存器用于收发过程,第1页寄存器主要用于DP8390的初始化,第2页寄存器则用于环路诊断。DSP对寄存器的操作是将寄存器作为DSP的端口设备,其实际物理端口地址(PPA)为网卡基本I/O端口地址(BIOA)与寄存器地址(RA)之和(即PPA=BIOA+RA)。应注意的是,PPA与寄存器间并不存在一一对应关系,对 PPA的读操作与写操作并不一定是对同一寄存器进行的,这种情况在第0页尤其明显。用户数据分组在DSP和网卡交互是通过网卡的数据端口实现的,既可以用 DMA方式也可以用PIO方式读入数据分组或将数据分组送至网卡RAM缓冲区。在本系统中,DSP采用DMA方式对网卡进行数据读写。网卡的数据端口地址(NDPA)为网卡基本I/O地址(BIOA)加偏移地址10H(即NDPA=BIOA+10H)。 网卡通信过程控制可分为网卡初始化、接收控制和发送控制。下面分别予以讨论。 2.1 网卡初始化 网卡初始化的主要任务是设置所需的寄存器状态,确定发送和接收条件,并对网卡缓冲区RAM进行划分,建立接收和发送缓冲环。具体过程请参阅参考文献 [2]。需要说明的是,每一块网卡被赋予一个物理地址,以便通信站点的标识。这个物理地址存在网卡的PROM(存储地址为0000~0005H)六个单元中,在网卡初始化时,通过远程DMA读入DSP内存中,并送入网卡物理地址寄存器。在一步的意义在于:一方面,如果能正确读出网卡的物理地址,则说明网卡硬件基本没有问题,网卡的上电复位和DSP对网卡的初始化顺利通过;另一方面,这个物理地址可以用于DSP网络系统中的点名、包的过滤丢弃等服务,也就是说,在链路层根据数据帧携带的源地址和目的地址确定数据报从哪里来,是否接收或丢弃。网卡初始化时另一个重要的工作就是接收缓冲环的设置,为了有效利用缓冲区,NIC将接收缓冲区RAM构成环形缓冲结构,如图2所示。

2.gif

接收缓冲区RAM分成多个256字节的缓冲区,N个(N最大为256)这样的缓冲区通过指针控制链接成一条逻辑上的缓冲环。缓冲环的开始页面地址存入 PSTART寄存器,环页面结束地址存入PSTOP寄存器。PSTART和PSTOP确定了接收缓冲环的大小和边界。为便于缓冲环读写操作,还需要2个指针:当前页面指针CURR和边界指针BNRY。CURR确定下一包放在何处,起着缓冲环写页面指针作用;BNRY指向未经DSP取走处理最早到达的数据包起始页面,新接收的数据包不可将其覆盖,起着缓冲环读页面指针的作用。也就是说,CURR可以告诉用户网卡接收的数据分组当前放到了什么位置,而BNRY 则用于确定DSP读缓冲环到了什么地方。由于接收缓冲区为环形结构,BNRY和CURR相等时,环缓冲区可能满也可能空。为了使NIC能辨别这两种状态,规定当BNRY等于CURR时,才认为环缓冲区满;当缓冲区空时,CURR比BNRY指针值大1。因此,初始化时设置:BNRY=PSTART,CURR=PSTART+1。这时读写指针不一致,为了保证正确的读写操作,引入一软件指针NEXTPK指示下一包起始页面。显然,初始化时NEXTPK=CURR。这时,缓冲环的读指针对NEXTPK,而BNRY只是存储分组缓冲区的起始页面边界指示,其值为 NEXTPK-1。 2.2 接收控制过程 DSP完成对DP8390的初始化后,网卡就处于接收状态,一旦收到分组,就自动执行本地DMA,将NIC中FIFO数据送入接收缓冲环,然后向主机申请 “数据分组接收到”中断请求。DSP如果响应中断,则启动网卡远程DMA读,将网卡缓冲区中的数据分组读入学生机存储区,然后对接收缓冲环CURR、 NEXTPK、BNRY指针内容进行修改,以便网卡能从网上正确接收后续分组。DSP响应网卡接收中断后,接收控制过程如下: ①设置远程DMA的起始地址;RSAR0=00H,RSAR1=Nextpk。 ②设置远程DMA操作的字节数,这个长度在46~1500字节范围内根据具体要求自己确定。 ③0AH送命令寄存器CR,启动远程DMA读。 ④从网卡数据端口依序读入数据分组,注意,最先读入的4字节非数据分组内容,第1字节为接收状态,第2字节为下一包页地址指针,3与4字节为接收字节数。第2字节内容应该送入Nextpk,其它字节根据用户要求处理。 ⑤修改边界指针BNRY=Nextpk-1。 ⑥清除远程DMA字节数寄存器RBCR0和RBCR1。 2.3 发送控制过程 DSP先执行远程DMA写操作,将内存中的数据分组传至网卡发送缓冲区,然后启动发送命令进行数据分组发送。发送控制过程如下: ①设置远程DMA的起始地址为网卡发送缓冲区起始地址; ②设置远程DMA操作的字节数; ③12H送命令寄存器CR,启动远程DMA写; ④依序送出数据分组至网卡发送缓冲区; ⑤清除远程DMA字节数寄存器; ⑥设置发送字节数寄存器TBCR0和TBCR1; ⑦12H送命令寄存器CR,启动数据分组发送。 3 发送方发送频率的控制 发送方发送频率的正确控制主要保护两点:一是有一个最小发送时间间隔,否则会因为接收方不能及时接收而导致系统瘫痪;二是发送频率能够足具体的功能实现要求。譬如在语音的实时通信中,发送频率就取决于声卡的采样频率。在8kHz采样频率时,声卡每秒钟采样8000字节,采用1024字节需用时128ms,如果通信协议规定发送1次传送1024字节有效数据,则必须每128ms发送一次才能保证缓冲区有新数据待发送,也才能保证接收方有新数据播放。 128ms是一个理论计算数值,在实际的操作中采样速度和发送频率之间总是不能完全匹配,而存放数据的缓冲区大小是有限的,如果没有良好的控制技巧来实现正确发送,就会造成声音抖动和延时。解决的办法是双缓冲技术和双指针控制,并且根据采样速度和发送频率之间的匹配情况送入不同的发送通信进行处理后发送。正确发送的含义有两方面,一是每次发送的都是新数据,二是能满足接收方总在播放新数据的需求。 4 接收方防止数据包的丢失 由于DSP通过中断请求判断是否有数据分组到来,如果中断繁忙而两个数据包到来时间相差非常短,DSP有可能只响应一次中断,从而导致丢包的发生。分析网卡接收数据过程,当网卡收到数据分组时,首先执行本地DMA,将NIC中FIFO数据送入接收缓冲环,并将本地DMA操作的起始地址存放在当前页寄存器(CURR)和当前本地DMA寄存器(CLDA0、CLDA1)中,DSP从网卡接收缓冲环读出数据到存储器则称远程DMA操作,用软件指针Nextpk 来指示远程DMA的起始页面。因此通过比较网卡本地DMA和远程DMA的当前地址,即在中断服务子程序中比较CURR和Nextpk指针,或比较 CLDA0、CLDA1和Nextpk指针,就可以保证当前数据分组放到了哪里就读出到哪里,从而防止丢包的发生。 5 结论 DSP对网卡通信过程控制的实现解决了DSP网络中任意站点之间,DSP网络与PC机之间准确、高速的实时通信问题,是将网络技术应用到DSP数字化系统中的关键,从而最终实现了以DSP为核心的处理系统数字化和网络化的融合。

关键字:DSP  网络通信  程序 引用地址:基于DSP的网络通信程序设计

上一篇:基于DSP控制的音频解码系统设计
下一篇:可编程逻辑在数字信号处理系统中的应用

推荐阅读最新更新时间:2024-05-02 23:05

51汇编 等周期脉宽调制pwm 子程序
;等 周期 脉宽 调制 PWM ; 晶振 :12M Hz ;89C51 P_PWM1 EQU P1.0 cycle EQU 1000 ;PWM的周期(单位微秒),则 频率 为1000赫兹 cycle_high EQU 500 ;一个周期内,PWM端口为高 电平 的时间(初始值) DSEG AT 20H ORG 40H PWM_HIGH_L DATA 40H PWM_HIGH_H DATA 41H ;PWM端口为高电平时,定时器寄存器的值 PWM_LOW_L DATA 42H
[单片机]
DSP芯片TMS320C6712外部内存自引导功能的实现代码
TMS320C6000系列与TMS320C54系列的引导方式有很大差别。在开发应用TMS320C6000系列DSP时,许多开发者,尤其是初涉及者对DSP ROM引导的实现有些困难,花费许多时间和精力摸索。笔者结合开发实例,介绍了实现外部存储器引导的具体方法。 DSP的引导过程 DSP系统的引导(BOOT)是指系统加电或复位时,DSP将一段存储在外部的非易失性存储器的程序代码通过DMA方式拷贝到内部的高速内存中运行。这样既能扩展DSP有限的存储空间,又能充分发挥DSP内部资源的效能。用户的代码也可以通过掩膜方式写入到DSP内部ROM中,但这样受容量和价格的限制,且不便于扩展和升级。 DSP的引导过程如下: 1) DSP复位后,通过
[单片机]
<font color='red'>DSP</font>芯片TMS320C6712外部内存自引导功能的实现代码
新版iPhone 3GS遭黑客破解可任意安装程序
北京时间7月4日上午消息,据国外媒体报道,年仅20岁的黑客乔治·霍兹(George Hotz)周五在博客中称,他已成功破解新版iPhone(手机上网) 3GS手机,允许用户任意安装第三方应用。 这款破解程序被称为“purplera1n”,允许用户安装苹果应用商店以外的任何第三方程序,但并未破解运营商限制,仍只能在AT&T网络上使用。 不久前,黑客组织“iPhone Dev Team”刚刚发布iPhone 3.0破解程序,但遗憾的是,该破解程序不支持新版的iPhone 3GS手机。 “purplera1n”则针对iPhone 3GS设计,目前支持Windows系统(不含Windows 7),Mac版本正
[手机便携]
基于DSP TMS320C32芯片的心电工作站系统
  1 引 言   目前,以心电信号自动测量、分析和诊断为主的心电工作站系统已经得到了广泛的应用,对于心脏疾病的早期预防、实时诊断发挥了较大的作用。分析传统的心电工作站系统,可以发现如下的特点:1)大多是基于PC机系统,心电信号经PC采样接口卡存储到PC上,然后由PC机进行分析处理,这在一些场合(如病人床边、家中)的数据采集时使用不方便;2)由单片机做成体积小、可以随身携带的仪器,但是,由于目前8/16位的单片机系统运算能力有限,而且数据空间有限,对于一些长时间的数据采集或要求较复杂算法的信号处理就无能为力了。   如何将PC系统的大数据空间、高运算能力与单片机的小型化结合起来,DSP器件提供了良好的解决方案。DSP器件是为数
[医疗电子]
PLC程序调试方法步骤介绍
项目分析需要对项目的生产工艺、工作环境、硬件需求和控制要求等方面进行全面分析。这项工作是整个系统设计的基础。如果前期项目分析不到位,将会造成后面硬件选型不准确,导致工程延期。 一、项目分析 工程技术人员首先要对工程项目进行分析,即项目工程的控制流程和每个流程的控制类型,并对整个项目可能出现问题做出预判。 (1)分析控制流程。分析控制流程时,建议绘制相关的控制流程图,清晰的标注每一步工作的内容和到下一步的条件。 (2)分析控制类型和预估PLC选型所需参数。一般PLC适用于四种控制类型,即顺序控制,过程控制,运动(或位置)控制和网络通信等。工程技术人员在分析控制要求后,根据绘制的控制流程图,将每个控制流程的控制类型进行分类,再根据
[嵌入式]
通过mmap方式应用程序在Linux下访问物理地址提高实时性
前言 按照Linux分层驱动思想,外设驱动与主机控制器的驱动不相关,主机控制器的驱动不关心外设,而外设驱动也不关心主机,外设访问核心层的通用应用程序接口进行数据传输,主机和外设之间可以进行任意的组合。这样思想要求应用程序不应当直接访问物理地址,而是应当通过驱动程序的调用来实现,以便保持应用程序的可移植性,操作访问的统一性,应用程序利用系统的统一调用接口访问外设,如使用write(),read()等函数进行实际的外设读写控制。应用程序通过调用接口进入内核函数后,内核利用copy_from_user()获得应用层数据,内核驱动程序也通过分层最终执行物理访问,之后把获得的数据用copy_to_user()回传给应用程序的调用者。由于驱动
[单片机]
通过mmap方式应用<font color='red'>程序</font>在Linux下访问物理地址提高实时性
51单片机综合学习系统演示程序 - 红外遥控器键
简介:51单片机综合学习系统演示程序 - 红外遥控器键 /*********************************************************************/ #include reg52.h #include intrins.h sbitIRIN = P3 ^ 2; //红外接收器数据线 sbit BEEP = P3 ^ 7; //蜂鸣器驱动线 sbit RELAY = P1 ^ 3; //继电器驱动线 unsigned char IRCOM = { 0x00, 0x00, 0x00, 0x00, 0x10, 0x10 }; unsigned char code ta
[单片机]
程序是如何在 CPU 中运行的(二)
前言 在上一篇文章中《程序是如何在 CPU 中运行的(一)》笔者讲述了程序中一条一条指令以及一条一条数据是如何在 CPU 中运行的,在本文笔者将以 ARM Cortex M3 的内核为背景分析指令是如何有序的执行。 寄存器组介绍 为了更好地介绍指令是如何在 ARM Cortex M3 内核中运行的,在这里先介绍一下 ARM Cortex M3 的寄存器组,引用 ARM Cortex M3 权威指南的一张图,图片如下: 如上图所示,寄存器组主要包含四种类型的寄存器,分别是: 通用寄存器:用于数据操作 堆栈指针:堆栈指针有两个,但是在任一时刻只能使用其中的一个。 主堆栈指针:复位后默认使用的堆栈指针,用于操作系统内
[单片机]
<font color='red'>程序</font>是如何在 CPU 中运行的(二)
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved