4300|1

1万

帖子

16

TA的资源

版主

楼主
 

LM3S811DDLLXXRR笔记之七:比较器 [复制链接]

这个比较器可以代替,模拟比较器。哪天再深入测下。现在先介绍下函数先:

 

比较器API提供一组函数来处理模拟比较器。比较器可以将一个测试电压和单个外部参考电压、一个公共的单端外部参考电压或一个公共的内部参考电压相比较。比较器可以把它的输出提供给一个器件管脚,代替板上的模拟比较器,或者,输出也可以通过中断或触发ADC来通知应用,使应用开始捕获一个采样序列。中断的产生和ADC触发逻辑是相互独立的,因此,中断可以在上升沿产生,而ADC却在下将沿触发

     1ComparatorConfigure        配置一个比较器函数

 

             

函数名称

ComparatorConfigure

函数原型

Void ComparatorConfigure(unsigned long ulBase,

                         unsigned long ulComp,

                         unsigned long ulConfig)

 

参数说明

ulBase是比较器模块的基址。

ulComp是要配置的比较器的索引。

ulConfig是比较器的配置。

ulConfig参数是COMP_TRIG_xxxCOMP_INT_xxx

COMP_ASRCP_xxxCOMP_OUTPUT_xxx值之间逻辑或操作的结果。

COMP_TRIG_xxx项可以是下列值:

COMP_TRIG_NONE:没有触发ADC;

COMP_TRIG_HIGH:比较器输出为高时触发ADC

COMP_TRIG_LOE:比较器输出为低时触发ADC;

COMP_TRIG_FALL:比较器输出由高变为低时触发ADC

COMP_TRIG_RISE:比较器输出由高变为低时触发ADC

COMP_TRIG_BOTH:比较器输出由低娈为高或由高变为低时触发ADC

COMP_INT_xxx可以是下列值:

COMP_INT_HIGH:比较器输出为高时产生中断;

COMP_INT_LOW:比较器输出为低时产生中断;

COMP_INT_FALL:比较器输出由高变为低时产生中断;

COMP_INT_RISE:比较器输出由低变为高时产生中断;

COMP_INT_BOTH:比较器输出由低变为高或由高变为低时产生中断。

COMP_ASRCP_xxx可以是下列值:

COMP_ASRCP_PIN:使用专用Comp+管脚的电压作为参考电压;

COMP_ASRCP_PIN0:使用Comp0+管脚的电压作为参考电压( 与比较器0COMP_ASRCP_PIN相同);

COMP_ASRCP_REF:使用内部产生的电压作为参考电压。

COMP_OUTPUT_xxx可以是下列值:

COMP_OUTPUT_NORMAL:使能比较器的同相输出;

COMP_OUTPUT_INVERT:使能比较器的反相输出;

COMP_OUTPUT_NONE:也是使能比较器的同相输出。

 

 

 

 

 

返回值

 

 

 

2ComParatorIntClear  清除一个比较器中断

  清除比较器中断,使中断不再有效。这个操作必须在中断处理程序中执行,以防在退出时立刻对中断进行再次调用。注意:对于一个电平触发的中断,中断在其无效前不能将其清除。由于Cortex-M3处理器包含有一个写入缓冲区,处理器可能需要几个周期才能真正将中断源清除。因此,建议在中断处理程序中要早些把中断源清除掉,不要在最后才清除中断源,以避免器件在真正清除中断源之前从中断处理程序中返回,操作失败可会能导到再次立即进入中断处理程序。因为NVIC控制器仍会把中断源看作是有效的。

 

函数原型

Void ComparatorIntClear(unsigned long ulBase,unsigned long ulComp)

参数

ulBase是比较器模块的基地址。

ulComp是比较器的索引。

返回值

 

 

 

 

 

3ComparatorIntEnable 函数

使能比较器中断.这个函数使能特定的比较器产生中断。只有中断被使能的比较器才能反映到处理器中。具体见表15-3

 

函数原型

Void ComparatorIntEnable(unsigned long ulBase,

                         Unsigned long ulComp)

参数

ulBase是比较器模块的基址。

ulComp是比较器的索引。

返回值

 

 

 

 

 

 

 

4ComparatorIntRegister 注册比较器中断的中断处理程序。

   这个函数设置在比较器中断出现时调用处理程序。这会使能中断处理器中的中断;由中断处理程序负责通过ComparatorIntClear()来清除中断源。

 

                 

函数原型

ComparatorIntRegister(unsigned long ulBase,

                      unsigned long ulComp,

                      void(*pfnHandler)(void))

              

参数

ulBase是比较器模块的基址。

ulComp是比较器的索引。

pfnHandler是在比较器中断出现是调用的函数的指针。

返回值

 

5ComparatorIntStatus 函数

获取当前的中断状态。这个函数返回比较器的中断状态。返回的是原始的中断状态或屏蔽的中断状态。

函数原型

tBoolean

ComparatorIntStatus(unsigned long ulBase,

                    unsigned long ulComp,

                    tBoolean bMasked)

参数

ulBase是比较器模块的基址。

ulComp是比较器的索引。

bMasked:如果需要原始的中断状态,bMasked为假;如果需要屏蔽的中断状态,bMasked就为真。

返回值

有中断提交时返回True,无中断提交时返回False

 

 

 

 

 

6ComparatorIntUnregister函数

注销比较器中断的中断处理程序。当比较器中断出现时,这个函数将清除要调用的处理程序。这样也将关闭中断控制器中的中断,以便中断处理程序不再被调用。

函数原型

Void ComparatorIntUnregister(unsigned long ulBase,

                             Unsigned long ulComp)

 

参数

ulBase是比较器模块的基址。

ulComp是比较器的索引。

返回

 

7CompatatorRefSet函数

设置内部参考电压。

函数原型

Void

ComparatorRefSet(unsigned long ulBase,

                 Unsigned long ulRef)

参数

ulBase是比较器模块的基址。

ulRef是希望的参考电压。

电压值为下例之一:

COMP_REF_OFF:关闭参考电压;

COMP_REF_0V:设置参考电压为0V;

COMP_REF_0_1375V:设置参考电压为0.1375V;

COMP_REF_0_275V:设置参考电压为0.275V;

COMP_REF_0_4125V:设置参考电压为0.4125V;

COMP_REF_0_275V:设置参考电压为0.275V;

COMP_REF_0_4125V:设置参考电压为0.4125V;

COMP_REF_0_55V:设置参考电压为0.55V;

COMP_REF_0_6875V:设置参考电压为0.6875V;

COMP_REF_0_825V:设置参考电压为0.825V;

COMP_REF_0_9625V:设置参考电压为0.9625V;

COMP_REF_1_03125V:设置参考电压为1.3125V;

COMP_REF_1_134375V:设置参考电压为1.134375V;

COMP_REF_1_1V:设置参考电压为1.1V;

COMP_REF_1_2375V:设置参考电压为1.2375V;

COMP_REF_1_340625V:设置参考电压为1.340625V;

COMP_REF_1_375V:设置参考电压为1.375V;

COMP_REF_1_44375V:设置参考电压为1.44375V;

COMP_REF_1_5125V:设置参考电压为1.5125V;

COMP_REF_1_546875V:设置参考电压为1.546875V;

COMP_REF_1_65V:设置参考电压为1.65V;

COMP_REF_1_753125V:设置参考电压为1.753125V;

COMP_REF_1_7875V:设置参考电压为1.7875V;

COMP_REF_1_85625V:设置参考电压为1.85625V;

COMP_REF_1_925V:设置参考电压为1.925V;

COMP_REF_1_959375V:设置参考电压为1.959375V;

COMP_REF_2_06255V:设置参考电压为2.0625V;

COMP_REF_2_165625V:设置参考电压为2.165625V;

COMP_REF_2_26875V:设置参考电压为2.26875V;

COMP_REF_2_371875V:设置参考电压为2.371875V;

 

返回值

 

8ComparatorValueGet函数

   获取当前的比较器输出值。

函数原型

tBoolean

ComparatorValueGet(unsigned long ulBase,

                   Unsigned long ulComp )

 

参数

ulBase是比较器模块的基地址。

ulComp是比较器索引。

返回值

比较器输出为高时函数返回true,比较器输出为低时函数返回false

 

 

 

 

 

                     

 

以下是实例,这个例子只要使能COMP0其管脚状态不用设就好用,

 

#include <LM3Sxxx.H>

 

int main(void)

{

    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);                        /*  使能GPIOD               */

    SysCtlPeripheralEnable(SYSCTL_PERIPH_COMP0);                        /*  使能模拟比较器0             */

   

    GPIODirModeSet(GPIO_PORTD_BASE, GPIO_PIN_0, GPIO_DIR_MODE_OUT);            /*  设置 GPIO_PIN_0为输出              */

    GPIOPadConfigSet(GPIO_PORTD_BASE, GPIO_PIN_0,                              /*  设置 GPIO_PIN_0强度和类型          */

                     GPIO_STRENGTH_4MA,                                 /*  4mA的输出驱动强度           */

                     GPIO_PIN_TYPE_STD);                                /*  设置为推挽管脚              */

 

       

   

       //ComparatorConfigure(COMP_BASE, 0, (COMP_TRIG_NONE | COMP_ASRCP_REF |

    //                     COMP_OUTPUT_NORMAL));                           /*  配置模拟比较器0             */

   

    ComparatorConfigure(COMP_BASE,0,(COMP_TRIG_NONE | COMP_ASRCP_PIN0 |  /*配置比较器0,以 C0+引脚为比较对象*/

                           COMP_OUTPUT_NORMAL));

      

       ComparatorRefSet(COMP_BASE, COMP_REF_1_1V);                         /*  配置内部参考电压为 1.1V     */

  

    while (1) {

           if (ComparatorValueGet(COMP_BASE, 0) == 1 ) {                   /*  读取比较结果. 1:点亮LED3;

                                                                               0: 熄灭LED1                 */

                  GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_0, ~ GPIO_PIN_0);                  /*  点亮LED1                    */

              } else {

                  GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_0, GPIO_PIN_0);                    /*  熄灭LED1                    */

              }

    }

}

/*********************************************************************************************************

 END FILE

*********************************************************************************************************/

 

结果是我把C0-端接地,灯灭抬起灯亮了。

 

程序包:

 

mycomp.zip (794 Bytes, 下载次数: 43)

最新回复

学习中  详情 回复 发表于 2012-7-16 16:26
 
点赞 关注
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr

回复
举报

6

帖子

0

TA的资源

一粒金砂(中级)

沙发
 

学习中

 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表