MAXQ3120中模数转换器在轮询模式下的使用
发布时间:2008/5/26 0:00:00 访问次数:459
    
    
    来源:maxim公司
    
    在设置中断优先级比较麻烦或者中断固有的不可预测性不好处理的应用中,模数转换器(adc)工作在轮询模式下要比工作在中断驱动模式下更适合。本应用笔记详细论述了maxq3120微控制器的16位σ-δ adc工作在轮询模式下时需要注意的一些事项。用汇编语言源代码演示了轮询模式的实现方法。
    
    概述
    
    maxq3120是第一款集成了双通道、16位σ-δ模数转换器(adc) (图1)的maxq微控制器。该adc使这款微控制器尤其适用于单相电表,同时也适用于任何需要高精度模数转换的应用场合。对于设置中断优先级比较麻烦或者中断固有的不可预测性不好处理的应用,adc最好工作在轮询模式下而不是中断驱动模式下。
    
    
    
    图1. adc功能框图
    
    该应用笔记阐述了maxq3120的adc工作在轮询模式下时的使用情况,并讨论了编程注意事项。给出了adc的一个特定代码实例。对maxq3120乘法-累加器(mac)的用法和lcd驱动器性能也进行了说明。在这个实例中,mac完成adc输出的简单求和(和随后的求平均值运算),并由lcd显示平均转换结果。
    
    本文所给出的代码实例是针对maxq3120编写并经过测试的,但也可以在包含相似资源的其他相关maxq器件上运行。该例程代码的整个开发环境采用max-ide 1.0版本和maxq3120评估板硬件版本b。
    
    编程注意事项
    
    当maxq3120的adc工作在轮询模式下时,软件设计应考虑转换器的以下几个特性:第一,设计者必须了解adc控制寄存器(adcn)中各个位的意义和用法。表1列出了该寄存器的各个位,每一位的功能说明如表2所示。当一个adc输出值准备就绪时,硬件将asr1或asr0位置1。此时软件可以从adc的输出寄存器(ad1或ad0)中读取一个带符号的16位数值。如果在读输出寄存器之前完成了多次转换,那么新的转换结果不写入输出寄存器。采样丢失位asl1或asl0置位,并舍弃这些转换结果。在附带的软件(参见下面的实例代码部分)中,每次读输出寄存器之前都要测试asr0位的状态。在本文这种情况下,输出是否溢出并不重要。因此忽略了采样丢失位的状态。同时,增益设置为1,由内部带隙提供基准电压,在该实例中仅使能了一个模数转换通道(0)。
    
    
    
    
    
    软件中另一个需考虑的问题是adc中各种不同模块的建立时间。调制器、sinc3滤波器和基准带隙缓冲器都存在建立时间。通过在程序的开始阶段启动adc,并允许其连续运行,可以使这些建立时间只出现一次。软件实例中包含一个大约1s的软件循环延时(基于8mhz时钟),可以减慢程序循环以及随后的显示刷新操作。adc启动之后也加入了这一延时,从而给各模块提供了建立时间。当然这一延时比所需要的建立时间长的多(具体规格参见maxq3120数据资料),采用这种代码延时只是为了实现更加简单。
    
    maxq3120包含一个可以在一个时钟内实现16位 x 16位字mac功能的硬件模块。该性能可与许多数字信号处理器相媲美,使得maxq3120能够快速执行数学计算。本应用不需要快速数学计算功能,但mac帮助计算adc输出的平均值,以平滑输出结果并使显示的数值变化更缓慢一些。为了得到这个平均值,一个乘数取为1,将16个16位转换结果传送给mac。这16个数据字的总和存放在累加器中。在完成求和运算后,该结果除以16 (移位和相加)来计算平均值。这个平均值送到lcd上进行显示。有关mac性能的详细说明参见maxq微控制器用户指南。
    
    实例代码
    
    和本应用笔记配套的软件包含在adc_polled.zip文件中,可以进行下载。该文件包括:源代码文件adc_polled.asm,my3120kit_lcd.asm,maxq_math.asm;包含文件maxq3120x.inc;以及max-ide工程文件adc_polled.prj。将这些文件解压到一个公用目录下,对该软件进行汇编并在m
    
    
    来源:maxim公司
    
    在设置中断优先级比较麻烦或者中断固有的不可预测性不好处理的应用中,模数转换器(adc)工作在轮询模式下要比工作在中断驱动模式下更适合。本应用笔记详细论述了maxq3120微控制器的16位σ-δ adc工作在轮询模式下时需要注意的一些事项。用汇编语言源代码演示了轮询模式的实现方法。
    
    概述
    
    maxq3120是第一款集成了双通道、16位σ-δ模数转换器(adc) (图1)的maxq微控制器。该adc使这款微控制器尤其适用于单相电表,同时也适用于任何需要高精度模数转换的应用场合。对于设置中断优先级比较麻烦或者中断固有的不可预测性不好处理的应用,adc最好工作在轮询模式下而不是中断驱动模式下。
    
    
    
    图1. adc功能框图
    
    该应用笔记阐述了maxq3120的adc工作在轮询模式下时的使用情况,并讨论了编程注意事项。给出了adc的一个特定代码实例。对maxq3120乘法-累加器(mac)的用法和lcd驱动器性能也进行了说明。在这个实例中,mac完成adc输出的简单求和(和随后的求平均值运算),并由lcd显示平均转换结果。
    
    本文所给出的代码实例是针对maxq3120编写并经过测试的,但也可以在包含相似资源的其他相关maxq器件上运行。该例程代码的整个开发环境采用max-ide 1.0版本和maxq3120评估板硬件版本b。
    
    编程注意事项
    
    当maxq3120的adc工作在轮询模式下时,软件设计应考虑转换器的以下几个特性:第一,设计者必须了解adc控制寄存器(adcn)中各个位的意义和用法。表1列出了该寄存器的各个位,每一位的功能说明如表2所示。当一个adc输出值准备就绪时,硬件将asr1或asr0位置1。此时软件可以从adc的输出寄存器(ad1或ad0)中读取一个带符号的16位数值。如果在读输出寄存器之前完成了多次转换,那么新的转换结果不写入输出寄存器。采样丢失位asl1或asl0置位,并舍弃这些转换结果。在附带的软件(参见下面的实例代码部分)中,每次读输出寄存器之前都要测试asr0位的状态。在本文这种情况下,输出是否溢出并不重要。因此忽略了采样丢失位的状态。同时,增益设置为1,由内部带隙提供基准电压,在该实例中仅使能了一个模数转换通道(0)。
    
    
    
    
    
    软件中另一个需考虑的问题是adc中各种不同模块的建立时间。调制器、sinc3滤波器和基准带隙缓冲器都存在建立时间。通过在程序的开始阶段启动adc,并允许其连续运行,可以使这些建立时间只出现一次。软件实例中包含一个大约1s的软件循环延时(基于8mhz时钟),可以减慢程序循环以及随后的显示刷新操作。adc启动之后也加入了这一延时,从而给各模块提供了建立时间。当然这一延时比所需要的建立时间长的多(具体规格参见maxq3120数据资料),采用这种代码延时只是为了实现更加简单。
    
    maxq3120包含一个可以在一个时钟内实现16位 x 16位字mac功能的硬件模块。该性能可与许多数字信号处理器相媲美,使得maxq3120能够快速执行数学计算。本应用不需要快速数学计算功能,但mac帮助计算adc输出的平均值,以平滑输出结果并使显示的数值变化更缓慢一些。为了得到这个平均值,一个乘数取为1,将16个16位转换结果传送给mac。这16个数据字的总和存放在累加器中。在完成求和运算后,该结果除以16 (移位和相加)来计算平均值。这个平均值送到lcd上进行显示。有关mac性能的详细说明参见maxq微控制器用户指南。
    
    实例代码
    
    和本应用笔记配套的软件包含在adc_polled.zip文件中,可以进行下载。该文件包括:源代码文件adc_polled.asm,my3120kit_lcd.asm,maxq_math.asm;包含文件maxq3120x.inc;以及max-ide工程文件adc_polled.prj。将这些文件解压到一个公用目录下,对该软件进行汇编并在m