tms320c6000系列dsp编程工具与指南 浅谈dsp编程

处理器/DSP

872人已加入

描述

  本文主要是关于tms320c6000的相关介绍,并着重对tms320c6000系列dsp编程工具与指南进行了详尽的阐述。

  dsp

  DSP(digital singnal processor)是一种独特的微处理器,是以数字信号来处理大量信息的器件。其工作原理是接收模拟信号,转换为0或1的数字信号,再对数字信号进行修改、删除、强化,并在其他系统芯片中把数字数据解译回模拟数据或实际环境格式。它不仅具有可编程性,而且其实时运行速度可达每秒数以千万条复杂指令程序,源源超过通用微处理器,是数字化电子世界中日益重要的电脑芯片。

  它的强大数据处理能力和高运行速度,是最值得称道的两大特色 DSP既是Digital Signal Processing的缩写(数字信号处理的理论和方法)或者是Digital Signal Processor(用于数字信号处理的可编程微处理器)的缩写。我们所说的DSP技术,则一般指将通用的或专用的DSP处理器用于完成数字信号处理的方法和技术。 DSP的有以下特点: DSP处理器采用哈佛结构和改进的哈佛结构。 哈佛结构就是将程序代码和数据的存储空间分开,各有自己的地址和数据总线。之所以采用哈佛结构,是为了并行进行指令和数据处理,从而可以大大地提高运算的速度。为了进一步提高信号处理的效率,在哈佛结构的基础上,又加以改善。使得程序代码和数据存储空间之间可以进行数据的传输,称为改善的哈佛结构。 采用流水技术。 流水技术是将各指令的各个步骤重叠起来执行。

  DSP处理器所采用的将程序存储空和数据存储空间的地址与数据总线分开的哈佛结构,为采用流水技术提供了很大的方便。 为了提高DSP处理器的运算速度,它们无例外地设置了硬件乘法器,以及MAC(乘并且累加)一类的指令。 DSP处理器都为DMA单独设置了完全独立的总线和控制器,这是和通用的CPU很不相同,其目的是在进行数据传输是完全不影响CPU及其相关总线的工作。 在DSP处理器中,设置了专门的数据地址发生器来产生所需的数据地址。数据地址的产生与CPU的工作是并行的,从而节省CPU的时间,提高信号的处理速度。 DSP处理器为了自身工作的需要和外部环境的协调工作。往往都设置了丰富的外设。如时钟发生器。定时器等。

  定点DSP处理器和浮点DSP处理器。定点DSP中经常要考虑溢出问题,在浮点DSP基本上可以不考虑。与定点DSP处理器相比,浮点DSP处理器的速度更快,尤其是作浮点运算。在实时性要求很到的场合。往往考虑浮点DSP处理器。而浮点DSP处理器的价格比较高,开发难度更大。 DSP的用途 2000主要用于控制:供电,光网络等。5000则是通讯和静态图像处理:视频产品,数字无线电等。而6000是数字通信和图像处理:移动通信,打印机,数字扫描仪等。

  dsp编程

  1、DSP编程

  对OSS驱动声卡的编程使用Linux文件接口函数,如图17.5,DSP接口的操作一般包括如下几个步骤:

  ① 打开设备文件/dev/dsp。

  采用何种模式对声卡进行操作也必须在打开设备时指定,对于不支持全双工的声卡来说,应该使用只读或者只写的方式打开,只有那些支持全双工的声卡,才能以读 写的方式打开,这还依赖于驱动程序的具体实现。Linux允许应用程序多次打开或者关闭与声卡对应的设备文件,从而能够很方便地在放音状态和录音状态之间 进行切换。

  ② 如果有需要,设置缓冲区大小。

  运行在Linux内核中的声卡驱动程序专门维护了一个缓冲区,其大小会影响到放音和录音时的效果,使用ioctl()系统调用可以对它的尺寸进行恰当的设 置。调节驱动程序中缓冲区大小的操作不是必须的,如果没有特殊的要求,一般采用默认的缓冲区大小也就可以了。如果想设置缓冲区的大小,则通常应紧跟在设备 文件打开之后,这是因为对声卡的其它操作有可能会导致驱动程序无法再修改其缓冲区的大小。

  ③ 设置声道(channel)数量。

  根据硬件设备和驱动程序的具体情况,可以设置为单声道或者立体声。

  ④ 设置采样格式和采样频率

  采样格式包括AFMT_U8(无符号8位)、AFMT_S8(有符号8位)、AFMT_U16_LE(小端模式,无符号16位)、 AFMT_U16_BE(大端模式,无符号16位)、AFMT_MPEG、AFMT_AC3等。使用SNDCTL_DSP_SETFMT IO控制命令可以设置采样格式。

  对于大多数声卡来说,其支持的采样频率范围一般为5kHz到44.1kHz或者48kHz,但并不意味着该范围内的所有连续频率都会被硬件支持,在 Linux下进行音频编程时最常用到的几种采样频率是11025Hz、16000Hz、22050Hz、32000Hz 和44100Hz。使用SNDCTL_DSP_SPEED IO控制命令可以设置采样频率。

  ⑤ 读写/dev/dsp实现播放或录音。

  图17.5 OSS dsp接口用户空间操作流程

  代码清单17.3的程序实现了利用/dev/dsp接口进行声音录制和播放的过程,它的功能是先录制几秒钟音频数据,将其存放在内存缓冲区中,然后再进行放音。

  代码清单17.3 OSS DSP接口应用编程范例

  1 #include

  2 #include

  3 #include

  4 #include

  5 #include

  6 #include

  7 #include

  8 #define LENGTH 3 /* 存储秒数 */

  9 #define RATE 8000 /* 采样频率 */

  10 #define SIZE 8 /* 量化位数 */

  11 #define CHANNELS 1 /* 声道数目 */

  12 /* 用于保存数字音频数据的内存缓冲区 */

  13 unsigned char buf[LENGTH *RATE * SIZE * CHANNELS / 8];

  14 int main()

  15 {

  16 int fd; /* 声音设备的文件描述符 */

  17 int arg; /* 用于ioctl调用的参数 */

  18 int status; /* 系统调用的返回值 */

  19 /* 打开声音设备 */

  20 fd = open(“/dev/dsp”, O_RDWR);

  21 if (fd 《 0)

  22 {

  23 perror(“open of /dev/dsp failed”);

  24 exit(1);

  25 }

  26 /* 设置采样时的量化位数 */

  27 arg = SIZE;

  28 status = ioctl(fd, SOUND_PCM_WRITE_BITS, &arg);

  29 if (status == - 1)

  30 perror(“SOUND_PCM_WRITE_BITS ioctl failed”);

  31 if (arg != SIZE)

  32 perror(“unable to set sample size”);

  33 /* 设置采样时的通道数目 */

  34 arg = CHANNELS;

  35 status = ioctl(fd, SOUND_PCM_WRITE_CHANNELS, &arg);

  36 if (status == - 1)

  37 perror(“SOUND_PCM_WRITE_CHANNELS ioctl failed”);

  38 if (arg != CHANNELS)

  39 perror(“unable to set number of channels”);

  40 /* 设置采样率 */

  41 arg = RATE;

  42 status = ioctl(fd, SOUND_PCM_WRITE_RATE, &arg);

  43 if (status == - 1)

  44 perror(“SOUND_PCM_WRITE_WRITE ioctl failed”);

  45 /* 循环,直到按下Control-C */

  46 while (1)

  47 {

  48 printf(“Say something: ”);

  49 status = read(fd, buf, sizeof(buf)); /* 录音 */

  50 if (status != sizeof(buf))

  51 perror(“read wrong number of bytes”);

  52 printf(“You said: ”);

  53 status = write(fd, buf, sizeof(buf)); /* 放音 */

  54 if (status != sizeof(buf))

  55 perror(“wrote wrong number of bytes”);

  56 /* 在继续录音前等待放音结束 */

  57 status = ioctl(fd, SOUND_PCM_SYNC, 0);

  58 if (status == - 1)

  59 perror(“SOUND_PCM_SYNC ioctl failed”);

  60 }

  61 }

  tms320c6000系列dsp编程工具与指南

  1. Why process signals digitally?

  (1)模拟电路由模拟组件构成:电阻、电容及电感等,这些组件随着电压、温度或机械结构的改变会动态影响到模拟电路的效果;

  (2)数字电路具有好的噪声抑制能力,少的开发时间和功耗

  虽然数字电路有那么多优点,在有些情况下还必须使用模拟电路:非常高频的信号(》100MHz)。原因有2点:(1)ADC转换的限制;(2)使用数字电路很难实时处理非常高频的信号。

  2. Why use DSP?

  DSP是Digital Siginal Processor的简称。

  (1)相对于PC等上的高端处理器,具有更低的功耗

  (2)相对于PC等上的高端处理器,具有更低的价格

  因此,在考虑价格、机械尺寸、低功耗以及“高频”处理时使用DSP是较好的选择。

  相对于嵌入式ARM而言,DSP在信号处理上具有更大的优势,ARM偏向于控制。

  3. Tipically DSP Algorithms?

  在大部分的DSP算法中,乘积和(sum of product, SOP)是最基本的单元。

  编程工具

  DSP对乘法和加法做了优化,乘法与加法在DSP上一般在一个指令周期内完成,这也是为什么DSP适用于做信号处理的原因。

  4. Choose a DSP

  通过数据手册,列表比较两者参数,比如

  

  

  浮点DSP与定点DSP的使用场合对比:

  浮点DSP一般用于高精度、宽的动态范围、高信噪比,一般比较容易使用。定点DSP具有更低的功耗,更便宜,相对尺寸更小。

  5. DSP 与 ASIC(专用集成电路)

  ASIC听起来更高端,但使用场合较少,主要因为ASIC开发周期长(至少1年左右),灵活性差(一旦生成流片则不可更改),耗资大。除非自己经常使用的模块做成流片重用,在产品开发中一般不使用ASIC。

  6. TMS320系列DSP

  

  

  TI C6000系列主要分为C64x,C62x,C67x三个子系列,C62x与C64x都是定点DSP,C67系列为浮点DSP。

  结语

  关于tms320c6000的相关介绍就到这了,如有不足之处欢迎指正。

相关阅读推荐:编写一个以汇编(ASM)语言为基础的DSP程序

相关阅读推荐:dsp28335如何入门:程序设计步骤

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分