一、CA+构造

MSP430G2553带有一个比较器Comparator_A+(CA+),其构造框图如下图所示。

二、输入 & 输出

如上图所示,比较器有一个同向输入端(V+)和一个反向输入端(V-)。通过软件设置,V+端可以连接到CA0~CA2三个外部管脚之一,或者三个内部电压基准之一;V-端可以连接到CA1~CA7七个外部管脚之一,或者三个内部电压基准之一。内部电压基准可以是0.5*Vcc、0.25*Vcc,或者内部一个二极管的导通电压(约0.55V)。

输出信号可以连接至Timer的外部时钟输入,或者CAOUT对应的管脚;输出信号变化时,可触发CAIFG中断。

CAx、CAOUT对应的MSP430G2553管脚如下图所示。

三、相关设置寄存器

CA+主要寄存器有CACTL1、CACTL2、CAPD三个。其中CAPD用于断开与GPIO管脚相连的数字电路部分,以提高CA+的性能;实际上,当某个管脚被设置成CA+输入时,CAPD会自动置位,因此对于CAPD的操作一般不需关心(除非该管脚还同时用于输入某个数字信号)。

- CACTL2寄存器的P2CAx位段:选择输入信号对应的管脚。

- CACTL1寄存器的CAEx位:切换V+、V-输入信号。该功能用于当输入信号非常接近时,一般用不到。

- CACTL1寄存器的CAON位:关闭/开启CA+。

- CACTL1寄存器的CAREFx位段和CARSEL位:CAREFx位段用于选择CA+参考电压,可以为0.5*Vcc、0.25*Vcc或~0.55V;CARSEL位用于选择参考电压连接至V+还是V-端。注意当V+、V-都连接到外部管脚时,内部参考电压须关闭。

- CACTL2寄存器的CAF位:关闭/开启输入信号滤波。建议开启。

- CACTL2寄存器的CASHSHORT位:将输入信号短接。一般用不到。

四、一个有意思的例子

将电位器连接到P1.1,当P1.1的电压高于0.5*Vcc时,LED灯闪烁;否则LED灯熄灭。由于P1.1对应MSP430G2553芯片的RX,G2 Launchpad已经将其连接到了USB转串口芯片上,因此P1.1作为CA1使用时应将J3上的相关跳线断开。

 #include "io430.h"

 #define LED1 BIT0  //red

 #define TRUE 1
#define FALSE 0 #define LOW_INPUT 0
#define HIGH_INPUT 1 //global variable
char state = LOW_INPUT;
char flash = FALSE; //start with low input, no flash on LED void main(void)
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD; // LED setup
P1OUT = ;
P1DIR |= LED1; // DCO setup
BCSCTL1 = CALBC1_1MHZ; //running at 1MHz
DCOCTL = CALDCO_1MHZ; // ACLK setup
BCSCTL3 |= LFXT1S_2; //ACLK source: VLO, measured as 10kHz
BCSCTL1 |= DIVA_3; //ACLK = VLO divided by 8: 1.25kHz // Timer0_A setup
TA0CCR0 = - ; //timer overflow freq: 1250/250 = 5Hz(0.2s)
TA0CCTL0 = CCIE;//enable interrupt
TA0CTL = TASSEL_1 + MC_1 + TACLR;//ACLK, no div, up mode, clear timer // Comparator_A+ setup
CACTL1 = CAREF_2 + CARSEL + CAIE;//0.5 Vcc ref on V-, enable interrupt on rising
CACTL2 = P2CA4 + CAF; //input CA1 (P1.1, remove the jumper) on V+, filter on
CACTL1 |= CAON; //turn on comparator __enable_interrupt();
LPM3; } #pragma vector = TIMER0_A0_VECTOR
__interrupt void CCR0_ISR(void)
{
//TA0CCR0 flag clearing is automatic
if(flash == FALSE)
{
P1OUT &= ~LED1; //led off
}
else
{
P1OUT ^= LED1; //toggle LED
}
} #pragma vector = COMPARATORA_VECTOR
__interrupt void COMPA_ISR(void)
{
switch(state)
{
case LOW_INPUT:
if((CACTL2 & CAOUT) == 0x01)
{
state = HIGH_INPUT;
CACTL1 |= CAIES; //value high, so watch for falling edge
flash = TRUE; //let led flash
}
break;
case HIGH_INPUT:
if((CACTL2 & CAOUT) == 0x00)
{
state = LOW_INPUT;
CACTL1 &= ~CAIES; //value low, so watch for rising edge
flash = FALSE; //turn LED off
}
break;
}
}

这个例子有意思的地方在于,展示了数据流程图(Data Flow Diagram, DFD)和状态转换图(State Transition Diagram, STD)这两个重要的概念。两个中断程序分别处理来自Timer0_A和CA+的中断,形成两个“process”,它们有自身独有的变量/参数,同时还共享了flash(LED是否闪烁)这一变量。此外,CA+的中断程序包含HIGH_INPUT和LOW_INPUT两种状态,是一个非常简单的状态机。

程序的DFD和CA+中断程序的STD如下图所示。

MSP430 G2553 比较器Comparator_A+、数据流程图DFD、状态转换图STD的更多相关文章

  1. MSP430 G2553 Launchpad实现电容测量

    一.基本原理 对于Source-Free RC电路,其电容放电的特性可以描述为: 其中V0是电容的初始电压,t是放电时间,R是串接的电阻阻值,C是电容值,v(t)是t时刻电容上的电压.因此,若已知V0 ...

  2. linux内核网络接收数据流程图【转】

    转自:http://blog.chinaunix.net/uid-23069658-id-3141409.html 4.3 数据接收流程图   各层主要函数以及位置功能说明:          1)s ...

  3. Django 数据流程图

    根据学习Django并且通过几个作业,发现Django制作网站的数据流程有些比较难懂,所以制作一个数据流程图,帮助自己理解,也希望对正学习的人有所帮助! 别的不多说,上美图:

  4. Nginx下HTML页面POST请求静态JSON数据返回405状态

    在浏览器访问HTML页面,发现一些静态JSON数据没有显示,F12查看,如下图所示: 可以看到请求方式为POST 将请求链接复制在浏览器地址栏访问,可以正常请求到数据 F12查看,可以看到请求方式为G ...

  5. TCP的三次握手以及TCP状态转换图详解

    今天来讨论一下TCP的三次握手以及TCP的状态转换图.首先发一个三次握手的流程图如下: 圖 2.4-3.三向交握之封包连接模式A:封包发起当用戶端想要对服务器端发起连接时,就必須要送出一個要求连线的封 ...

  6. TCP三次握手、四次挥手及状态转换图

    TCP/IP通信的三次握手如下: TCP是主机对主机层的传输控制协议,提供可靠的连接服务: 位码即tcp标志位,有6种标示:SYN(synchronous建立联机) .ACK(acknowledgem ...

  7. 传输控制协议(TCP) -- TCP状态转换图

    TCP状态转换图 在<UNIX网络编程 卷1>一书中,作者给出了TCP状态转换图(如下).本文也将围绕此图进行阐释. 注:上图红框表示比较特殊的地方. TCP状态转换两条主线 图2-4中的 ...

  8. TCP状态转换图、滑动窗口、半连接状态、2MSL

    一.TCP状态转换图 下图对排除和定位网络或系统故障时大有帮助,也帮助我们更好的编写Linux程序,对嵌入式开发也有指导意义.    先回顾一下TCP建立连接的三次握手过程,以及关闭连接的四次握手过程 ...

  9. JVM中线程状态转换图

    JVM中线程的状态转换图 线程在一定条件下,状态会发生变化.线程一共有以下几种状态: 1.新建状态(New):新创建了一个线程对象. 2.就绪状态(Runnable):线程对象创建后,其他线程调用了该 ...

随机推荐

  1. [转]Jsp 与 JavaBean

    JavaBean 是一个遵循特定写法的 Java 类,它有以下特点: 1. Java 类具有一个无参的构造函数 2. 属性必须私有化. 3. 私有化的属性通过 public 类型的方法暴露给其它程序, ...

  2. Python请求外部POST请求,常见四种请求体

    原文http://blog.csdn.net/silencemylove/article/details/50462206 HTTP 协议规定 POST 提交的数据必须放在消息主体(entity-bo ...

  3. httpclient跳过https请求的验证

    一.因为在使用https发送请求的时候会涉及,验证方式.但是这种方式在使用的时候很不方便.特别是在请求外部接口的时候,所以这我写了一个跳过验证的方式.(供参考) 二.加入包,这里用的是commons- ...

  4. Educational Codeforces Round 37-G.List Of Integers题解

    一.题目 二.题目链接 http://codeforces.com/contest/920/problem/G 三.题意 给定一个$t$,表示有t次查询.每次查询给定一个$x$, $p$, $k$,需 ...

  5. 解决Linux下MySQL登录ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor)问题

    两种方案: 一: 1.修改mysql配置文件:vim /etc/my.cnf 2.找到[mysqld]下添加 skip-grant-tables 配置 3.重启服务service mysqld res ...

  6. Spring MVC 学习 之 - URL参数传递

    在学习 Spring Mvc 过程中,有必要来先了解几个关键参数:    @Controller: 在类上注解,则此类将编程一个控制器,在项目启动 Spring 将自动扫描此类,并进行对应URL路由映 ...

  7. Spring Boot 16 条最佳实践

    Spring Boot是最流行的用于开发微服务的Java框架.在本文中,我将与你分享自2016年以来我在专业开发中使用Spring Boot所采用的最佳实践.这些内容是基于我的个人经验和一些熟知的Sp ...

  8. 迷你MVVM框架 avalonjs 1.2发布

    avalon1.2 带来了许多新特性,让开发更轻松!详见如下: 升级路由系统与分页组件. 对ms-duplex的绑定值进行增强,以前只能prop或prop.prop2,现在可以prop["x ...

  9. 如何快速选中某单元格所在的整行或整列 Excel教程

    我们可以使用快捷键的操作来快速选中B3单元格所在的整行或整列,操作方法如下,请大家参阅! 一.正规的快捷键操作 ①快速选中整行 按下键盘上的 Shift Space 即同时按下键盘上的Shift 空格 ...

  10. 新手C#int.Parse、int.TryParse的学习2018.08.04

    int.Parse()用于将字符串转换为32为int类型,但是在遇到非数字或者类似1.545这种小数的时候会报错,后来采用了int.TryParse,这个在转换后会判断是否可以正常转换,若不能,会返回 ...