这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » LM3S811学习笔记(Comparator)

共3条 1/1 1 跳转至

LM3S811学习笔记(Comparator)

高工
2012-11-05 11:48:21     打赏

实验内容:模拟比较器外部输入电压若小于所设的内部参考电压,则输出高电平,否则输出低电平。在比较器输出电平变化的时候产生中断,中断函数中闪烁LED2次。main()函数中,若比较器输出高电平则点亮LED,否则熄灭LED
实验目的:熟悉模拟比较器的配置

#include "inc\hw_memmap.h"
#include "inc\hw_ints.h"
#include "inc\hw_types.h"
#include "driverlib\sysctl.h"
#include "driverlib\gpio.h"
#include "driverlib\interrupt.h"
#include "driverlib\uart.h"
#include "driverlib\comp.h"
#include "type.h"

void ProtectJTAG(void)

  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
  GPIOPadConfigSet(GPIO_PORTC_BASE, GPIO_PIN_4, GPIO_STRENGTH_2MA,  GPIO_PIN_TYPE_STD_WPU);//2MA驱动能力,推挽方式 弱上拉
  GPIODirModeSet(GPIO_PORTC_BASE, GPIO_PIN_4, GPIO_DIR_MODE_IN);//设为输入方式亦可不要上一语句
 
  while(GPIOPinRead(GPIO_PORTC_BASE, GPIO_PIN_4) == 0);   
}

void Bsp_Init(void)
{
   ProtectJTAG();    
   SysCtlClockSet( SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |
                    SYSCTL_XTAL_6MHZ );
}

void Delay(void)  //100Ms
{
  unsigned long i,j;
    for(i=0;i<10;i++)
  {
    for(j=500000;j>0;j--);
  }
}

void GpioLedBlink(void)  //PE0闪烁
{
  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
  GPIODirModeSet(GPIO_PORTE_BASE,GPIO_PIN_0,GPIO_DIR_MODE_OUT);
 
  GPIOPinWrite(GPIO_PORTE_BASE,GPIO_PIN_0,0x01);
  Delay();
 
  GPIOPinWrite(GPIO_PORTE_BASE,GPIO_PIN_0,~0x01);
  Delay(); 
 
}

void Comp_Init(void) //比较器初始化配置
{
  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);//PB4 C0-;//PB6 C0+
  GPIOPinTypeComparator(GPIO_PORTB_BASE,GPIO_PIN_4);//配置用作比较器的输入
 
  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);//PD7 C0o
  GPIOPinTypeComparator(GPIO_PORTD_BASE,GPIO_PIN_7);//配置用作比较器的输出
 
  SysCtlPeripheralEnable(SYSCTL_PERIPH_COMP0);//使能比较器时钟
  //配置比较器为比较器0模块,不触发ADC,比较器输出电平变化时产生中断,
  //使用内部参考电压,使能比较器同相输出
  ComparatorConfigure(COMP_BASE, 0,(COMP_TRIG_NONE | COMP_INT_BOTH |
                                COMP_ASRCP_REF | COMP_OUTPUT_NORMAL));
 
  ComparatorRefSet(COMP_BASE, COMP_REF_1_65V);//设置内部参考电压
 
  IntEnable(INT_COMP0);//使能比较器中断
  IntMasterEnable();
  ComparatorIntEnable(COMP_BASE, 0); //使能比较器
 
}

void Compatator0_ISR(void)//比较器输出电平变化的中断处理函数
{
  ComparatorIntClear(COMP_BASE, 0);//清中断
 
  GpioLedBlink();GpioLedBlink();//闪烁LED2次
}

void main(void)
{
  Bsp_Init();
  SysCtlClockSet( SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |
                    SYSCTL_XTAL_6MHZ );
  Comp_Init();
  while(1)
  {
   if(ComparatorValueGet(COMP_BASE, 0))//判断比较器当前输出值
   {
      GPIOPinWrite(GPIO_PORTE_BASE,GPIO_PIN_0,0x01); 
   }else
   {
    GPIOPinWrite(GPIO_PORTE_BASE,GPIO_PIN_0,~0x01);
   }
  }
 
}
比较器API提供一组函数来处理模拟比较器。比较器可以将一个测试电压和单个外部参考电压、一个公共的单端外部参考电压或一个公共的内部参考电压相比较。比较器可以把它的输出提供给一个器件管脚,代替板上的模拟比较器,或者,输出也可以通过中断或触发ADC来通知应用,使应用开始捕获一个采样序列。中断的产生和ADC触发逻辑是相互独立的,因此,中断可以在上升沿产生,而ADC却在下将沿触发。




关键词: LM3S811     学习     笔记     Comparator         

院士
2012-11-05 12:01:45     打赏
2楼
楼主 有时间做一汇总帖子,给你加精华……

高工
2012-11-05 23:30:51     打赏
3楼
好的,容我学完剩余的模块呗,嘿嘿

共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]