PC在Linux下与DSP的异步串行通讯

PC在Linux下与DSP的异步串行通讯

2023年6月22日发(作者:)

PC在Linux下与DSP的异步串行通讯

当我们按照前面的流程设计好,就可以考虑应用程序了.通常

程序除了保存传输而来的数据以外,更多的是数据的处理和加工.

为了使各种事务的协调我们采用多线程技术,所谓线程就是操作系

统分配处理器时间的最基本单元.利用MFC框架结构,我们能够

加快程序的开发周期.

2.1向端口读数据

ReadFile(1lFile,//USB端口句柄

threadParam->pcIoBuffer,//数据缓冲区

threadParam->uil..angth,//数据的长度

&ribyteS,,/实际返回数据字节数

&o1//一个指向OVERLAPPED结构变量采用异

步通信

2.2创建线程

CwinThreadReadDoc=AfxBeginThread(

ReadPipe,,,指向工人线程的控制函数指针

&ra—

ConRead//传递给线程的控制函数参数

0,//默认线程优先权

0,//默认线程堆栈大小

0,//控制线程的附加标志

o),,默认安全属性

2.3线程间通信与同步

为了保证线程间的数据能正确传递,通常采用全局变量,

CEvent类,自定义消息来联系同时要保证各线程间的数据处理

是相互协调,我们不能在同一时间访问同一数据时,既往里面写数 据,同时又读数据.所谓的同步就是保持在同一个进程内的线程工

作协调一致.常用的线程同步方法有CriticalSection,互斥对象

(Mutex),信号量(Semaphore).

2.4异步控制函数

UINTReadPipe(voidpParam)

{一一for(;;)

{……一();//锁定共享数据区threadParam->pcI

OBUfier

bResult=ReadFile(Param?>pcloBuffer,…&01):

();//开锁.允许其他线程访问共享数据区

if0aResult[==TRLIE)//判断是否打开文件

经速

{

if(GetLastError01=ERROR_It—

PENDING1

I.……//出错返回1

while(WaitForSingleObject(,100)==WAIT_

TIMEOUT)

f……,,超时处理)

if(!::GetOverlappedResult(hFile,IpOverlapped,&nBytes,FALSE))

fcontinue;}

nt0;

,,通过CEvent类对象Ep2Update通知其他正在等待数据的线

………--

1

………--

1,

…一l

3总结 上述只给出了上位机软件设计主要思路与流程,并重点介绍了

接口设置和线程的调用,有了这些我们基本上能满足绝大部分客户

软件的后台需求,我们可以很容易的实现从USB口读出数据,而

后进行自己所需要的数据处理.笔者利用VC++环境下的MFC应

用程序框架,开发了虚拟示波器软件.它能够在接受数据的同时,

对数据进行分析,运算同时波形显示,最大化的利用了USB给我

们带来的方便与快捷.e

参考文献

【l】周立功等.PDIUSBDI2USB固件编程与驱动开发.北京:北京

航空航天大学出版社.2O03.

【2】许永和等.EZ-USBFX系列单片机USB外围设备设计与应用.

北京:北京航空航天大学出版社,2002.

【3】武安河等.Windows2000/XPwDM设备驱动程序开发.北京:

电子工业出版社.2O03.

【4】同志工作室.Visualc++6.0开发技巧与实例教程.北京:人民

邮电出版社.2,000.

【5】pkins着.何健辉等译.实用Visualc++

6.0教程.北京:清华大学出版社.2OOO.

作者简介:童洪洁,吉林大学电子科学与工程学院研究生.主要研究方向为

计算机接口通信.通信地址:吉林大学朝阳校区第四公寓.邮编130061

作者声明:自愿将本文稿酬捐为.仪器仪表用户杂志爱I心助学基金

文章编号:1671-1041(2005)01-0053-03

PC在Linux下与DSP的异步串行通讯

周新林,张继和,余永立

(大连交通大学电气信息学院,辽宁大连116028)

摘要:为了实现数据高速采集.开发了PC与DSP的串行通讯系统.采用

RS232标准进行串行通讯.是由于它具稳定的性能和有广泛的应用.DSP

的速度快,这有助于提高数据采集的速度;并且DSP内部集成了大量的外

设.例如异步串行口,这使DSP与PC之间添加简单的接口就能实现异步串 行通讯.Linux操作系统有许多优点,在工业领域前景广阔.本文介绍了:

RS232串行通讯的特点:DSP与PC的接口的实现:DSP中异步串行口

的设置及程序流程:在Linux操作系统中串口编程.

关键词:RS232,串行通讯.异步串行口,操作系统

中图分类号:TP29文献标识码:B

Asynchronousserialcommunication

betweenDSPandPCunderLinux

收稿日期:2004-09-22

欢迎订阅欢迎撰稿欢迎发布产品广告信息

ZH0UXin.1in,,YUYong.1i

(Dalianjiaotonguniversity'Dalian116028)

Abstract:Inordertorealizehighspeeddatasamping,developing

hestandardsof

R$232becauseofitsstoadyperformanceandwidell/

hashighspeeditisusefulforhighspeeddatasamping;thereare

manyperipheralsinDSPchips,suchasas;ynchronousserialport,itis

easytoaddsimplyintorfacobetweenPCandDSPforasynchronous

eratingsystemhasmanymeritsSO

perreferto:thecharacter

;sticsofRS232seriaJcommunication;realizingjnteffacebetweenPC

andDSP;setingasynchronousserialportinDSPandpromgram

flowofDSP;programingforserialpodinLinuxoperatingsystem.

Koywords:RS232;serialcommunication;as;ynchronousseriaIpod:

DSP;Linuxoperatingsystem

EICV0I.122005NO.153

伊经验交流伊

1前言

本文是利用RS232实现PC在Linux操作系统下与DSP的通 讯,此方法可应用于PC对DSP所控制的系统进行监控和数据采

集.在此DSP所控制的是交流电机.

如图1PC中的Linux内核为2.4.,Linux是一种免费操作系

统.性能稳定,源代码公开.C的编程令灵活.实现的功能强大并

且配有优秀免费的程序编译和调试工具.DSP(数字信号处理器)

是一种具有特殊结构的微处理器:采用数据和程序总线分开的哈佛

式结构,具有专门的乘法器,广泛的流水线作业.其运算能力强

大.处理速度快,能实现复杂的算法.DSP使用的是TI公司的

TMS320C203,此芯片使用简单,价格低廉.在实际应用中,为了

数据传输的需要.可以把二者联系起来.而利用RS232连接PC与

DSP是一种很好的选择,一般的PC中有两个符合RS232标准的9

针串行接口,而TMS320C2o3片内有一个支持异步通讯的异步串

行口.

2美千RS232

RS232传输距离比较远,价格非常低.应该指出的是由于高速

传输大量的数据,RS232作为一种连接标准正在被高速网络所代

替.不过.它对于嵌入式系统来说仍是''种非常有用的工具.

RS232接口可以很轻松地添加到DSP的外围电路中去,因为只要

实现电平转换就可以.RS232所传输数据的电平是相对于地的,它

的逻辑高电平是一5~15V(通常为一12V),逻辑低电平为+5一+15V

(通常为+12V)RS232常用的连接器为9针,在PCj的连接器

为9针,在这些信号中.许多是用来对调制解调器控制的.我们建

立的连接只用了3个信号线:TD(发送信号),RD(接收信号)

和的TD,RD分别与DSP的TD,RD相连,地线互相

连接.其接口电平转换芯片(例如MAX232)的接线简单.

如果我们想使用硬件握手信号:RTS(请求发送)和CTS(清

除发送),则DSP的异串行口的4个I/O引脚的任意两个可作为

RTS和CTS

3DSP部分 (1)通讯协议

a)帧格式:1位起始位,8位数据位,位停止位,无校验

位.

b)波特率为9600bps,无握手信号.

c)数据传输格式如图2.

区匦

图1系统框图图2数据传输格式

数据块的内容可根据不同应用有不同的长短和控制信息.在此

应用可设置为电机启动,关闭,正转,反转及给定转速(PC发

送),转速实际值,相电压,相电流值等.

d)PC主动联系DSP,PC向DSP发送控制信息后,DSP执行

其操作并返回相应的信息.

(2)DSP异步串行口的初始化

a)波特率为9600bps.

b)在等待状态寄存器中不设等待状态.

C)异步串行口控制寄存器ASPCR的置位:激活DSP的

UART,先向URST位写O,再向UART位写1:允许接受中断:设

置…个停l}=位,禁止自动波特率校准.

(3)程序流程图

a)接受程序流程图(图3)

利用中断来接受数据,但要开关中断.清中断标志位以免连续

54ElCVo1.122005NO.1

仪器仪表用户

两次中断.

b)发送程序流程图(图4)

数据的发送是主程序,若在采样周期中不能完成数据的发送,

则可提高传输的波特率,波特率提高,则等待时间减少.若发送的

数据只有最后一个到达,那么很可能是由于等待时间不够.注意:

C203的UART,只有共有的一个发送,接受寄存器,没有缓存. 4Linux部分

在Linux操作系统上用vi编辑器.gcc编译器.gdb(自由软

件基金开发的调试程序)开发工具,并且对串口编程提供了很好的

支持.

图3接收数据流程图图4数据发送流程图

在Linux操作系统上文件是系统中无处不在的资源,串口也被

抽象成文件,它的文件为/dev/ttyS0(串口1)和/dev/ttyS1(串口

2),因此,对串口象文件一样操作.而对串口进行设置,控制,需要

termios接口来实现.termios接口功能强大,因此也很繁琐.本文

里RS232的通讯,只是用到了其中的部分功能.下面介绍termios

接口:

椭nclude<termios_h>

structmrmiosI

tcflagtciflag;/输入模式标记/

tcflag—

tc—oflag;/输拙模式标记/

tcflagtccflag:/控制模式标记/

tcflagtcAflag:/本地模式标记/

CC—tcAine;/线路规程/

cc._

tc._ccNCCS;/控制符号/

1

另外,termios接口还定义一些函数,关于termios接口的详

细介绍可查有关书籍.

串口作为终端可工作在两种工作模式下:原始模式和加工模

式.加工模式也称为标准模式,提供给设备驱动程序一个编辑器,

每次向程序发送经加工的数据.与DSP的通讯并不需要对数据的

加工,对串口设置为原始模式.在Linux下与DSP通讯,其程序

的过程如下: (1)打开所需要的串口:

(2)获取以前串口的设置,并保存(可由termios接口提供的

函数实现);

(3)配置缓存区:

(4)设置波特率;

(5)设置通讯模式:

(6)设置超时:

(7)向DSP发送数据:

(8)等待超时;

欢迎光临本刊网站

仪器仪表用户

(9)接受返回数据;

(10)恢复串口原配置;

(11)关闭串口,退出.

串口的打开,关闭,渎,写,分别由open(),close(),read(),writ

e()函数完成,这些函数的用法易查知.下面详细介绍串口的设

置:

structtermiostie:/现在串口的设置/

stracttermiosptio;/以前串口的设置/

cfsetospee(&tio,B9600);/输出波特率为9600bps/

cfsetispee(&tio.B9600);/输入波特率为9600bps/

另外可根据自己的需要编写设置波特率的函数,不必设置一固

定的波特率,但在串口通讯的波特率必须与DSP的一致.

tie~一

lflag&=~ICANON:

关闭了串口驱动程序的标准处理过程,将其转换为原始模式.

在这种模式下,任何字符都是~样的,没有控制字符.

tie一一lflag&=一(ECHOIECHOTLIECHONL);/关闭本地回显{, tie一一

iflag=IGNPA;/忽略接受到数据的校验或帧差错/

tiec—oflag&=-OPOST;/不对输出数据处理/

tie.c_

cflag=CLOCALlCREADICS8:

/忽略调制解调的控制线,每个字符8位/

tie.C—ccTIME】=0;

tie.c_ccMIN]=60;/只有读取6o个字节以后Read()才返回/

经殓速

tcflush(fd,TCIFLUSH);/刷新缓存{,

tcsettattr(fd,TCSANOW,&rio);/{设置参数立即有效/

tcsettattr(W.&ptio);恢复以前配置{,

5结束语

本文介绍的串行通讯应用于以DSP为中心的控制系统,利用

RS232标准,实现了PC在Linux下对DSP所控电机的监控,既

利用了Linux编程灵活,实现功能强大,又有RS232传输的稳定而

可靠.在实际的应用中,不仅具有速度快,实时性好,而且传输的

数据准确,取得了较为理想的效果.@

参考文献

fl】编程权威指南.【M】中国

电力出版社.20o1.

【2】张卫宁.TMS320C2000系列DSPs原理及应用IM].国防工业出版

社,2002.

【3】中科红旗软件技术有限公司.LinuxRlNIX高级编程lid].清华大学

出版社,.2001.

【4】JanAxelson.串行端口大全【M】.中国电力出版社.2001.

作者简介:周新林(1980-),男,湖北.硕士研究生.研究方向:计算机应用

及控制技术.

文章编号:1671-1041(2005)01-0055-03 基于分层系数方法的无损小波图像编码

张炜炜,郑善贤

(湖南大学电气与信息工程学院,湖南长沙410082)

摘要:本文介绍的是一种将整数小波系数划分为多层小波系数进行编码的方

法.这种分层系数编码的方法为开发系数间关系提供了更佳途径.无论在有

损或无损编码方面.都表现出良好的性能.实验结果显示,分层系数编码,

比传统的S+P.以及JPEG?2000,提供了更为出色的空间域无损编码性能.

在有损编码方面.也可以在0.2?3.2bpp范围之内,将S+P的PSNR值提高

1至3dB.

关键词:小波变换:无损编码:有损编码:分层系数;PSNR

中图分类号:TN919.81文献标识码:B

LosslessWaveletImageCoding

BasedonLayeredCoefficientScheme

Zhangweiwei,Zhengshanxian

(CollegeofElectricandInfolrmationEngineering

ofHunanuniversity,Changsha,410082)

Abstract:Alayeredcoefficientschemewhichsplitsintegerwavelet

proachprovides

proposedalgorithmgivesimprovementinboththeIosslessandIossy

mentalresultsshowthattheproposed

schemeproducesfosslessratescompetitivetOsomeofthebest

performingspatialdomainIosslesscodingschemessuchasS+Pand

JPEG.2000TheJossyperformanceimprovementiSabout1to3dB

(PSNR)in0.2to3.2bpprangeascomparedwithS+Pcoder.

Keywords:Wavelettransform;Losslesscoding;Lossycoding;Kay

werds:coefficient;PSNR

收稿日期:2004?09?21

欢迎订阅欢迎撰稿欢迎发布产品广告信息 1引言

在对系数进行扫描,编码时通常会采取两种方法.一种是按照

系数扫描的顺序在对前~个系数进行完全编码之后再对下一个系数

进行操作.这种方法通常用于~些比较传统的转换,如基于JPEG

标准的DCT,以及某些无损小波编码,如S+P.第二种方法也称为

连续近似量化(SAQ),要先选择位平面,然后按照从显着位平面到

非显着位平面的顺序依次对系数进行编码.这种方式通常在高效有

损小波编码中使用,如EzW,SPIHT和LZC.采用基于编码技

术的零树结构不仅可以有效地开发问带关系,还可以在更多的显着

位平面上为大量的零进行有效编码,从而提高整体编码性能.但是

在非显着位平面上的无损编码,这种零树方法就不适用了.

本文中,我们将提出一种使用分层编码的无损小波编码方法,

显着以及非显着系数按照扫描的顺序分开进行处理.系数分层的目

的在于:1,减少非显着系数熵编码需要的符号数量;2,利用分

层中的上层系数为熵编码的数理估计提供有用的空间幅值关联信

息,从而提高无损编码效率.

2系数的分层处理

典型的IWT系数幅值分布通常是集中在o-10之中一个很小的

范围之内.在实际操作中,如果能够将大幅值系数和小幅值系数分

开进行处理,会取得更好的编码效果.根据系数幅值的分布特点,

我们可以把一个原始的系数集合划分为多个系数子集.然后按照先

前定义的基本空间坐标i的自然顺序,依次对这些转换系数进行编

码处理.我们用xIi】来表示一个已经排好顺序的转换系数序列.每

个元素x都是源X经整数小波变换后的输出.令R=【Sl'……,

s,……,SN}为一个划分好的系数集合,S是R的不相交,非空

EICV0I.122005NO.155

发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1687428212a9293.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信