新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > C8051F020高速ADC采样的代码优化

C8051F020高速ADC采样的代码优化

作者:黄玉金,董浩斌时间:2012-01-18来源:电子产品世界收藏

  在应用的片内高速进行时间序列采样时,编写代码使工作于最高速度是一个难题。本文从的C语言中断模式的驱动代码设计开始,分析对应的汇编语言中消耗CPU的主要步骤,研究ADC采样的优化方式。经过验证,通过使用额外定时器可以优化ADC采样结束时机的控制;而在时间关键场所,因为减少了现场保护和恢复的操作代码,查询方式比中断模式具有更高的时间效率。

本文引用地址:http://www.eepw.com.cn/article/128269.htm

  引言

  在设计需要进行时间序列采样的数据采集仪表中,需要用ADC对电压信号进行等间隔高速采样并缓存,带有高速ADC的[1]是一种很好的选择。是一款由Silicon Laboratories公司生产的高性能8位混合信号兼容MCS-51,内部集成4096字节的XRAM,以及2个带有PGA的高速ADC,其中8位模数转换器ADC1采样率高达500kSPS(Sample per second)。在进行时间序列分析的应用中需要编程ADC1进行数据采集并将数据缓存到XRAM中。C8051F020的机器周期和时钟周期相等(传统的机器周期等于其时钟周期的12倍),当使用24MHz的晶振时,速度最高可达到24MIPS(Million Instructions Per Second),传统单片机仅2MIPS。虽然这个速度看起来已经很快,但是如果需要使得ADC1工作于最高频率,代码的编写则需要相当的技巧。针对时间关键部分的编程,除了需要考虑常规的代码优化方案[2],如循环展开、宏替换函数等之外,本文将从基本的采样设计程序结构设计入手,研究如何在Keil集成开发环境下编写合适的C语言代码驱动F020的ADC1,使其工作于最高采样率。

  ADC1高速采样的初步时间估算

  时间序列的获取需要进行等时间间隔采样,也就是要编写代码驱动ADC1进行高速等间隔采样并将数据存储到有限数量的XRAM。C8051F020中没有DMA模块,控制ADC1采样以及将采样结果传送到XRAM均需要CPU的直接操作。设定单片机系统时钟24MHz,则其机器周期为T=1/24MHz≈41.67ns。ADC1的时钟根据器件手册最高可配置为6MHz[1],可由系统时钟4分频得到;当ADC1工作于500kHz时,采样周期为2μs=2000ns,在该段时间如果运行单周期的指令,可以运行2000ns/41.67ns=48条指令,简记为48T。已采样点数计算和判断、跳转以及外部存储器的访问等操作均需要执行时间≥2T的指令,初步分析在此期间最多可以运行24条汇编指令。

  为了实现等时间间隔采样,根据对F020数据手册的阅读,应该采用定时器2或3周期触发ADC1,并在ADC1采样结束立即将采样结果传送到XRAM。该类程序的设计一般有两种模式:查询方式和中断方式。通常而言,中断有利于节约CPU时间,本设计即从中断模式设计开始分析。



评论


相关推荐

技术专区

关闭