DSP学习心得(2)

  • 格式:docx
  • 大小:15.80 KB
  • 文档页数:2

昨天没有更新是因为着实不想写下那些东西,昨天所学习的一直是各种公司各种型号的DSP地硬件结构的特点,其实总结起来不外乎抓住一个DSP最重要的点—硬件乘法器,所谓硬件乘法器,首先我之前讲过,它是硬件的,所做的乘法和加法(为什么是乘法和加法呢?相信对信号有接触的人应该很熟悉一种方法叫卷积,还有一个人叫傅里叶以及他的傅里叶变换,其中就是大量的乘法和累加,用软件编程很是耗费时间)能在单周期内完成,其次它的ALU,即算术逻辑单元有自己的DMA总线,不需要占用CPU的总线,这样极大地提高了DSP的速度,纵观各个厂家生产的DSP,如四大家:TI公司,AD公司,摩托罗拉公司,朗讯公司,他们生产的DSP大致都差不多,只是支持的多少个bit的,或者说存储单元的多少,或者对外接口的多少等等稍有不同,内部核心结构还是大致相同的,扯了这么多,其实我今天要讲的是DSP的软件结构。

软件结构最重要的是要知道DSP的寻址方式,寻址,听起来很熟习的样子,相比大家都会想到指针,没错,确实和指针有关系,对于我而言,我还想到了可恶的汇编,但是接下来我可能确实要深刻的被汇编蹂躏,想必大家都不愿意用汇编语言去编写自己的51单片机,我个人之前对汇编是很惧怕的,其实汇编也有汇编的好处,因为汇编对于各个寄存器之间的联系以及他们的关系可以十分明了,而给你的不会说是一大堆的代码,当然不可否认,汇编也是一大堆一大堆的代码。另外我想说一点的是,咱们图书馆确实不容易找到DSP的C编程,我找到仅有的两本,但是真正把DSP发挥到极致的却是C编程和汇编语言编程混合使用,因为这样可以节约程序代码所占存储器的空间,能节约一条代码就是一条,这必然能空出多余的空间让DSP干其他的事情,毕竟,在某些方面,DSP是怎么快就怎么做的。下面我就要介绍寻址方式了。

寻址方式

数字信号处理需要不断的提供数据以及处理数据,之前我们提到的地址发生器,那提供数据就必然有一个步骤是寻址,因为数据是存放在存储器里头的嘛。

(1) 立即数寻址,当然其中又包括短立即数寻址(单字指令)和长立即数寻址

我们先来讨论短立即数寻址,例如RPT #99;意思是将下一条指令循环100次,为什么呢,RPT,实际上是repeat的中文缩写,然后为什么是99呢,因为是从0计数的,这个大家应该都知道的。再举一个例子,LD #0h, DP;将装到DP寄存器里头,我大概解释一下,LD其实是LOAD,h表示的是十六进制,那DP实际上是一个寄存器啦,最后有一点,注意数字前头必须加#,这样才表示立即,数,不然表示的是一个地址。还有一点#后面的数不可以超过ff,因为一个字8位有最大就是ff。

长立即数寻址

ADD #1234h , A ;将#1234加到AccA里面,在这得说一句,因为我看的是C54X系列的板子,它里面有两个累加器,ACCA,ACCB。

(2) 中间省略一大部分寻址方式,实在是没有勇气写下来,我们直接跳到直接寻址方式

TMS320C54系列的数据存储器分为512页,每页128个字,设置一个数据页指针DP(Data Pointer),用9个bit指向一个数据页,再加上7个bit的页内偏移地址,形成16bit的数据地址。为什么是9个bit加7个bit呢,其实2的9次方是512,2的7次方是128;这样就不足为奇了。例如LD #4 ,DP;ADD 9h A;这两条语句,第一句是指针指向页4,第二句呢这是在第一句的基础上表示将数据页中地址为9h的数据加AccA.

那么DSP芯片有那么多种,我们如何选择呢,其实我学这个主要是为了做图像以及信号的处理,那其实最佳图像的处理应该是C6000系列,很不幸的是当时不知道选了一款C2000最佳控制平台系类的最贵的一款,性能最高的一款,但是我感觉应该够用了,今天要写的大概也就那么多,我知道真正浪费流量看完的没有多少,因为确实也很无聊,我为什么写这个在第一篇的时候就说过,仅供自己学习。今天就到这吧,过两天见!