DSP与数据转换器协同工作考虑的10大因素
时间:08-08
来源:
点击:
确保处理的是正确数据
现在,数据已经进入系统,数据字存储在阵列中,数据大小也合适,于是开始处理数据,但没有获得预期的结果,这时需要思考到底出了什么问题。首先应该检查DSP的高速缓存,DMA传输数据进入存储器时是否启用高速缓存,在这种情况下,高速缓存很可能保留拷贝的旧数据,并在算法工作中使用它们。如果发生了此类问题,就必需注意高速缓存相关性与转储清除问题,或者是存储新数据的高速缓存区失效。这样就能确保CPU处理的数据是传输完成后的最新数据。
如果用C语言编程应分配易失关键字
在调试嵌入式系统时,采用变量查询外设的状态后,发现CPU所用变量值是错误的,这时就要思考到底哪里出了问题。先看看下面这个结构:
unsignedint*pControl=(unsignedint*)0x00COFFEE;file://错误
while(*pControl==0);file://等待一个外部事件
这里的*pControl指向一个外设。
通过while循环,期望EOC能从"0"转换为"1"。但在大多数情况下,恐怕得一直等下去,因为编译器认为它已经完全控制了变量及与其相关的存储器,只加载*pControl指向的存储器位置的内容一次,就会对其进行循环测试。但问题在于,由于不会重新读取存储器内容,也就不能结束循环。
解决这一问题的方法就是将*pControl的声明作一下修改,通知编译器其指向的存储器位置可由外部事件修改,而每次使用该变量时都必须重新载入,如下所示:
volatileunsignedint*pControl=(unsignedint*)0x00COFFEE;file://正确
while(*pControl==0);file://等待一个外部事件
确保采样等距
如果要在频域中处理采样数据,那么还要提到一点:不是所有转换器都有启动新转换的自身时基。在这种情况下,应采用外部时基或DSP定时针(timerpin)。
现在,数据已经进入系统,数据字存储在阵列中,数据大小也合适,于是开始处理数据,但没有获得预期的结果,这时需要思考到底出了什么问题。首先应该检查DSP的高速缓存,DMA传输数据进入存储器时是否启用高速缓存,在这种情况下,高速缓存很可能保留拷贝的旧数据,并在算法工作中使用它们。如果发生了此类问题,就必需注意高速缓存相关性与转储清除问题,或者是存储新数据的高速缓存区失效。这样就能确保CPU处理的数据是传输完成后的最新数据。
如果用C语言编程应分配易失关键字
在调试嵌入式系统时,采用变量查询外设的状态后,发现CPU所用变量值是错误的,这时就要思考到底哪里出了问题。先看看下面这个结构:
unsignedint*pControl=(unsignedint*)0x00COFFEE;file://错误
while(*pControl==0);file://等待一个外部事件
这里的*pControl指向一个外设。
通过while循环,期望EOC能从"0"转换为"1"。但在大多数情况下,恐怕得一直等下去,因为编译器认为它已经完全控制了变量及与其相关的存储器,只加载*pControl指向的存储器位置的内容一次,就会对其进行循环测试。但问题在于,由于不会重新读取存储器内容,也就不能结束循环。
解决这一问题的方法就是将*pControl的声明作一下修改,通知编译器其指向的存储器位置可由外部事件修改,而每次使用该变量时都必须重新载入,如下所示:
volatileunsignedint*pControl=(unsignedint*)0x00COFFEE;file://正确
while(*pControl==0);file://等待一个外部事件
确保采样等距
如果要在频域中处理采样数据,那么还要提到一点:不是所有转换器都有启动新转换的自身时基。在这种情况下,应采用外部时基或DSP定时针(timerpin)。
- 在采用FPGA设计DSP系统中仿真的重要性 (06-21)
- 基于 DSP Builder的FIR滤波器的设计与实现(06-21)
- 达芬奇数字媒体片上系统的架构和Linux启动过程(06-02)
- FPGA的DSP性能揭秘(06-16)
- 用CPLD实现DSP与PLX9054之间的连接(07-23)
- DSP+FPGA结构在雷达模拟系统中的应用(01-02)