您好,  [请登录] [QQ登录]  [支付宝登录[免费注册]

商品分类

分享到: 百度搜藏 搜狐微博 新浪微博 腾讯微博 QQ收藏 人人网 Facebook Twitter

DSP与数据转换器协同事变所必须思量的10大因素

发布日期:2011-04-21


    假设您接到一项事变任务,计划一套由 DSP 与DAC与ADC等模仿器件构成的信号处理惩罚体系。要是您思量到几个紧张因素,事变就会非常大略。下面就来谈谈计划事变中应该思量的这几个因素。

细致相识应用范例 

    第一步必要相识应用范例。对付控制型应用,既必要应对突发的大量数据处理惩罚情况,也要思量间歇的闲置状态;而对付音频应用,则必要处理惩罚连续数据流的本领。相识应用的详细需求将有助于选择得当的接口和精确的数据读取要领。

评估体系速率 

    第二步必要相识数据采样的速率。举例来说,音频体系大概是一部 CD 播放机,采样率为 96 kHz,也大概是德律风语音体系,采样率仅为 8 kHz。固然,也大概是其他体系,如 ADSL 质量丈量应用,采样速率高达 10 MSPS,大概是称重应用,每秒只要 16 次采样就充足了,但请求具备较高的辨别率(如 24 位)。相识此方面信息,将有助于开展下一步事变,即选择精确的 DSP 接口。

选择精确的 DSP 接口 

    相识了应用及速率请求后,就对采取哪种 DSP 接口有了肯定的了解。大多数音频配置均利用特定范例的串行接口,不过高速应用则请求并行接口。当采样速率为 10 MSPS、辨别率 

    为 12 位时,要是采取串行接口,其端口的速率要到达 120 MHz 才华从转换器向 DSP 发送数据。这一请求大大高出了大多数50 MHz 串行端口的处理惩罚本领。若利用并行接口,则总线上信号互换的频率为 10 MHz,速率明显低落,因此处理惩罚起来非常大略。 

    在选择接口时,还要思量的另一题目便是,并行总线可否餍足所需的数据速率请求,大概说并行总线芯片在餍足步伐与系数请求后是否已经到达了满负荷。要是是的话,没干系思量在 DSP 与转换器之间插入 FIFO。

确定握手模式 

    一旦选择了 DSP 接口,下一步就要思量转换器与 DSP 之间的握手模式 (handshake mode)。大多数转换器在发出新的数据字之前都市给出某种范例的转换结束 (EOC) 信号。处理惩罚器利用上述信号的方法有两种:一是轮询 (poll);二是用其作为停止。 

    利用 EOC 信号作为停止具有肯定上风,由于 CPU 不会被轮询标记占用,因此在得到数据前不会打断 CPU 的正常事变。不过,要是转换器等待处理惩罚特定的协议来读取数据,比如转换器发出转换结束信号后又必要读取下令来检索数据,每个读取下令都市触发新的停止,那么就会导致过多的开销,得不偿失。在这种环境下,轮询的要领就具有明显的上风了。 

    要是停止时延非常紧张的话,那么利用轮询方法就更具上风。轮询可确保信号相应速率更快,这比进入停止办事例程要快得多。要是数据检索有短临时隙 (narrow timeslot),那么采取轮询方法也是有利的。

确定传输模式 

    下一步便是实际网络数据的事变了。网络数占据两种要领,半斤八两。第一种要领是采取 DSP 的 DMA(直接存储器存取)控制器,可使传输与转换器的转换结束标记同步,并使 CPU 不消包袱传输事变,由于数据阵列的添补是在背景完成的,传输完成后再关照 CPU。不过,这种要领只有在举行直接传输的环境下才有效。要是数据转换器在检索数据时必要某些巨大的机制,那么 DMA 就不太有效了。 

    在这种环境下,应让 CPU 参加传输事变。只管屈从特别的协议相称大略,但必须利用大量的 CPU资源来网络数据。要是停止率非常高,那么 CPU 大概很难偶然间再去实行数据网络之后的算法了。

是否采取数据猝发 

    假设数据转换器连接至 DSP 的并行总线,该并行总线在存储器存取(读取正在实行的数据)和 I/O 存取(读取采样)之间必要几个周期的转换,并且数据转换速率非常高,因此,转换通常是必须的,险些每次采样读取都要举行转换。 

    要是一步就能读取多个数据字,且不消每次都举行数据总线互换,肯定黑白常有代价的。在这种环境下,没干系思量在数据转换器与 DSP 之间采取 FIFO。一旦 FIFO 到达肯定的程度即停止 DSP,到达肯定命量的数据字一步完成传输,这就大大低落了总线转换的开销。 

 针对变量选择精确的数据范例 

    数据转换器针对所用的数据采取差别的格局。有的利用标准二进制(即无标记二进制)数据范例,有的则采取带标记的二进制数据范例,这便是题目的巨大地点。要是有一个 12 位数据转换器,那么在带标记二进制数据环境下,怎样利用将是一个题目。标记位占据最紧张的位置,即第“11”位(这里的肇始位是第“0”位)。要是将此数据字付与“C”变量,宽度为“16”位,那么假定“C”标记位为第“15”位。要是从转换器读取的数字为负,那么 DSP 就不克不及辨认其为负值,由于标记位的位置错误。怎样办理这一题目呢?第一种要领是在读取数据时举行数据位移。不过,这只有在 CPU 读取数据时才有大概,由于 DMA 控制器不大概在传输时举行数据位移。另一种要领是在数据块完全传输后在环路中将数据位移至精确的位置。不过这必须利用 CPU,并请求分外的 MIPS。 

    要是变化连接后转换器的第“11”位恰好连接至 DSP 数据总线的第“15”位,那么标记位从首位算起恰好位于精确的位置,这就能实现基于DMA 的传输,并且也不消再举行数据位移。


确保处理惩罚的是精确数据 

    如今,数据已经进入体系,数据字存储在阵列中,数据大小也符合,于是开始处理惩罚数据,但没有得到预期的结果,这时必要思索到底出了什么题目。起首应该查抄 DSP 的高速缓存,DMA 传输数据进入存储器时是否启用高速缓存,在这种环境下,高速缓存很大概保存拷贝的旧数据,并在算法事变中利用它们。要是产生了此类题目,就必须细致高速缓存相干性与转储打扫题目,大概是存储新数据的高速缓存区失效。如许就能确保 CPU 处理惩罚的数据是传输完成后的最新数据。

要是用 C 语言编程应分派易失关键字 

    在调试嵌入式体系时,采取变量查问外设的状态后,发明 CPU 所用变量 

    值是错误的,这时就要思索到底那边出了题目。先看看下面这个布局: 

    unsigned int *pControl = (unsigned int *)0x00COFFEE; file://错误
while (*pControl == 0); file://等待一个外部变乱 

    这里的 *pControl 指向一个外设。通过 while 循环,盼望 EOC 能从“0”转换为“1”。但在大多数环境下,恐怕得不停等下去,由于编译器以为它已经完全控制了变量及与其相干的存储器,只加载 *pControl 指向的存储器位置的内容一次,就会对其举行循环测试。但题目在于,由于不会重新读取存储器内容,也就不克不及结束循环。 

    办理这一题目的要领便是将 *pControl 的声明作一下修改,关照编译器其指向的存储器位置可由外部变乱修改,而每次利用该变量时都必须重新加载,如下所示:

volatile unsigned int *pControl = (unsigned int *)0x00COFFEE; file://精确
while (*pControl == 0); file://等待一个外部变乱

确保采样等距 

    要是要在频域中处理惩罚采样数据,那么还要提到一点:不是全部转换器都有启动新转换的自身时基。在这种环境下,应采取外部时基或 DSP 定时针 (timer pin) 。