实验内容:模拟比较器外部输入电压若小于所设的内部参考电压,则输出高电平,否则输出低电平。在比较器输出电平变化的时候产生中断,中断函数中闪烁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却在下将沿触发。