这个比较器可以代替,模拟比较器。哪天再深入测下。现在先介绍下函数先:
比较器API提供一组函数来处理模拟比较器。比较器可以将一个测试电压和单个外部参考电压、一个公共的单端外部参考电压或一个公共的内部参考电压相比较。比较器可以把它的输出提供给一个器件管脚,代替板上的模拟比较器,或者,输出也可以通过中断或触发ADC来通知应用,使应用开始捕获一个采样序列。中断的产生和ADC触发逻辑是相互独立的,因此,中断可以在上升沿产生,而ADC却在下将沿触发
1、ComparatorConfigure 配置一个比较器函数
函数名称 |
ComparatorConfigure |
函数原型 |
Void ComparatorConfigure(unsigned long ulBase,
unsigned long ulComp,
unsigned long ulConfig)
|
参数说明 |
ulBase是比较器模块的基址。
ulComp是要配置的比较器的索引。
ulConfig是比较器的配置。
ulConfig参数是COMP_TRIG_xxx、COMP_INT_xxx、
COMP_ASRCP_xxx和COMP_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+管脚的电压作为参考电压( 与比较器0的COMP_ASRCP_PIN相同);
COMP_ASRCP_REF:使用内部产生的电压作为参考电压。
COMP_OUTPUT_xxx可以是下列值:
COMP_OUTPUT_NORMAL:使能比较器的同相输出;
COMP_OUTPUT_INVERT:使能比较器的反相输出;
COMP_OUTPUT_NONE:也是使能比较器的同相输出。
|
返回值 |
无 |
|
|
2、ComParatorIntClear 清除一个比较器中断
清除比较器中断,使中断不再有效。这个操作必须在中断处理程序中执行,以防在退出时立刻对中断进行再次调用。注意:对于一个电平触发的中断,中断在其无效前不能将其清除。由于Cortex-M3处理器包含有一个写入缓冲区,处理器可能需要几个周期才能真正将中断源清除。因此,建议在中断处理程序中要早些把中断源清除掉,不要在最后才清除中断源,以避免器件在真正清除中断源之前从中断处理程序中返回,操作失败可会能导到再次立即进入中断处理程序。因为NVIC控制器仍会把中断源看作是有效的。
函数原型 |
Void ComparatorIntClear(unsigned long ulBase,unsigned long ulComp) |
参数 |
ulBase是比较器模块的基地址。
ulComp是比较器的索引。 |
返回值 |
无 |
|
|
|
|
3、ComparatorIntEnable 函数
使能比较器中断.这个函数使能特定的比较器产生中断。只有中断被使能的比较器才能反映到处理器中。具体见表15-3
函数原型 |
Void ComparatorIntEnable(unsigned long ulBase,
Unsigned long ulComp) |
参数 |
ulBase是比较器模块的基址。
ulComp是比较器的索引。 |
返回值 |
无 |
|
|
|
|
|
|
4、ComparatorIntRegister 注册比较器中断的中断处理程序。
这个函数设置在比较器中断出现时调用处理程序。这会使能中断处理器中的中断;由中断处理程序负责通过ComparatorIntClear()来清除中断源。
函数原型 |
ComparatorIntRegister(unsigned long ulBase,
unsigned long ulComp,
void(*pfnHandler)(void))
|
参数 |
ulBase是比较器模块的基址。
ulComp是比较器的索引。
pfnHandler是在比较器中断出现是调用的函数的指针。 |
返回值 |
无 |
5、ComparatorIntStatus 函数
获取当前的中断状态。这个函数返回比较器的中断状态。返回的是原始的中断状态或屏蔽的中断状态。
函数原型 |
tBoolean
ComparatorIntStatus(unsigned long ulBase,
unsigned long ulComp,
tBoolean bMasked) |
参数 |
ulBase是比较器模块的基址。
ulComp是比较器的索引。
bMasked:如果需要原始的中断状态,bMasked为假;如果需要屏蔽的中断状态,bMasked就为真。 |
返回值 |
有中断提交时返回True,无中断提交时返回False |
|
|
|
|
6、ComparatorIntUnregister函数
注销比较器中断的中断处理程序。当比较器中断出现时,这个函数将清除要调用的处理程序。这样也将关闭中断控制器中的中断,以便中断处理程序不再被调用。
函数原型 |
Void ComparatorIntUnregister(unsigned long ulBase,
Unsigned long ulComp)
|
参数 |
ulBase是比较器模块的基址。
ulComp是比较器的索引。 |
返回 |
无 |
7、CompatatorRefSet函数
设置内部参考电压。
函数原型 |
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;
|
返回值 |
无 |
8、ComparatorValueGet函数
获取当前的比较器输出值。
函数原型 |
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)