DSP与数据转换器协同工作所必须考虑的10 大因素
时间:10-26
来源:互联网
点击:
确保处理的是正确数据
现在,数据已经进入系统,数据字存储在阵列中,数据大小也合适,于是开始处理数据,但没有获得预期的结果,这时需要思考到底出了什么问题。首先应该检查 DSP 的高速缓存,DMA 传输数据进入存储器时是否启用高速缓存,在这种情况下,高速缓存很可能保留拷贝的旧数据,并在算法工作中使用它们。如果发生了此类问题,就必需注意高速缓存相关性与转储清除问题,或者是存储新数据的高速缓存区失效。这样就能确保 CPU 处理的数据是传输完成后的最新数据。
如果用 C 语言编程应分配易失关键字
在调试嵌入式系统时,采用变量查询外设的状态后,发现 CPU 所用变量值是错误的,这时就要思考到底哪里出了问题。先看看下面这个结构:
unsigned int *pControl = (unsigned int *)0x00COFFEE; 错误
while (*pControl == 0); 等待一个外部事件
这里的 *pControl 指向一个外设。通过 while 循环,期望 EOC 能从“0”转换为“1”。但在大多数情况下,恐怕得一直等下去,因为编译器认为它已经完全控制了变量及与其相关的存储器,只加载 *pControl 指向的存储器位置的内容一次,就会对其进行循环测试。但问题在于,由于不会重新读取存储器内容,也就不能结束循环。
解决这一问题的方法就是将 *pControl 的声明作一下修改,通知编译器其指向的存储器位置可由外部事件修改,而每次使用该变量时都必须重新载入,如下所示:
volatile unsigned int *pControl = (unsigned int *)0x00COFFEE; 正确
while (*pControl == 0); 等待一个外部事件
确保采样等距
如果要在频域中处理采样数据,那么还要提到一点:不是所有转换器都有启动新转换的自身时基。在这种情况下,应采用外部时基或 DSP 定时针 (timer pin) 。
现在,数据已经进入系统,数据字存储在阵列中,数据大小也合适,于是开始处理数据,但没有获得预期的结果,这时需要思考到底出了什么问题。首先应该检查 DSP 的高速缓存,DMA 传输数据进入存储器时是否启用高速缓存,在这种情况下,高速缓存很可能保留拷贝的旧数据,并在算法工作中使用它们。如果发生了此类问题,就必需注意高速缓存相关性与转储清除问题,或者是存储新数据的高速缓存区失效。这样就能确保 CPU 处理的数据是传输完成后的最新数据。
如果用 C 语言编程应分配易失关键字
在调试嵌入式系统时,采用变量查询外设的状态后,发现 CPU 所用变量值是错误的,这时就要思考到底哪里出了问题。先看看下面这个结构:
unsigned int *pControl = (unsigned int *)0x00COFFEE; 错误
while (*pControl == 0); 等待一个外部事件
这里的 *pControl 指向一个外设。通过 while 循环,期望 EOC 能从“0”转换为“1”。但在大多数情况下,恐怕得一直等下去,因为编译器认为它已经完全控制了变量及与其相关的存储器,只加载 *pControl 指向的存储器位置的内容一次,就会对其进行循环测试。但问题在于,由于不会重新读取存储器内容,也就不能结束循环。
解决这一问题的方法就是将 *pControl 的声明作一下修改,通知编译器其指向的存储器位置可由外部事件修改,而每次使用该变量时都必须重新载入,如下所示:
volatile unsigned int *pControl = (unsigned int *)0x00COFFEE; 正确
while (*pControl == 0); 等待一个外部事件
确保采样等距
如果要在频域中处理采样数据,那么还要提到一点:不是所有转换器都有启动新转换的自身时基。在这种情况下,应采用外部时基或 DSP 定时针 (timer pin) 。
- F1aSh存储器在TMS320C3X系统中的应用(11-11)
- 基于PIC18F系列单片机的嵌入式系统设计(11-19)
- DSP在卫星测控多波束系统中的应用(01-25)
- 基于PCI总线的双DSP系统及WDM驱动程序设计(01-26)
- 利用Virtex-5 FPGA实现更高性能的方法(03-08)
- DSP与单片机通信的多种方案设计(03-08)