MSP430 G2553 比较器Comparator_A+、数据流程图DFD、状态转换图STD
一、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的更多相关文章
- MSP430 G2553 Launchpad实现电容测量
一.基本原理 对于Source-Free RC电路,其电容放电的特性可以描述为: 其中V0是电容的初始电压,t是放电时间,R是串接的电阻阻值,C是电容值,v(t)是t时刻电容上的电压.因此,若已知V0 ...
- linux内核网络接收数据流程图【转】
转自:http://blog.chinaunix.net/uid-23069658-id-3141409.html 4.3 数据接收流程图 各层主要函数以及位置功能说明: 1)s ...
- Django 数据流程图
根据学习Django并且通过几个作业,发现Django制作网站的数据流程有些比较难懂,所以制作一个数据流程图,帮助自己理解,也希望对正学习的人有所帮助! 别的不多说,上美图:
- Nginx下HTML页面POST请求静态JSON数据返回405状态
在浏览器访问HTML页面,发现一些静态JSON数据没有显示,F12查看,如下图所示: 可以看到请求方式为POST 将请求链接复制在浏览器地址栏访问,可以正常请求到数据 F12查看,可以看到请求方式为G ...
- TCP的三次握手以及TCP状态转换图详解
今天来讨论一下TCP的三次握手以及TCP的状态转换图.首先发一个三次握手的流程图如下: 圖 2.4-3.三向交握之封包连接模式A:封包发起当用戶端想要对服务器端发起连接时,就必須要送出一個要求连线的封 ...
- TCP三次握手、四次挥手及状态转换图
TCP/IP通信的三次握手如下: TCP是主机对主机层的传输控制协议,提供可靠的连接服务: 位码即tcp标志位,有6种标示:SYN(synchronous建立联机) .ACK(acknowledgem ...
- 传输控制协议(TCP) -- TCP状态转换图
TCP状态转换图 在<UNIX网络编程 卷1>一书中,作者给出了TCP状态转换图(如下).本文也将围绕此图进行阐释. 注:上图红框表示比较特殊的地方. TCP状态转换两条主线 图2-4中的 ...
- TCP状态转换图、滑动窗口、半连接状态、2MSL
一.TCP状态转换图 下图对排除和定位网络或系统故障时大有帮助,也帮助我们更好的编写Linux程序,对嵌入式开发也有指导意义. 先回顾一下TCP建立连接的三次握手过程,以及关闭连接的四次握手过程 ...
- JVM中线程状态转换图
JVM中线程的状态转换图 线程在一定条件下,状态会发生变化.线程一共有以下几种状态: 1.新建状态(New):新创建了一个线程对象. 2.就绪状态(Runnable):线程对象创建后,其他线程调用了该 ...
随机推荐
- python渗透测试工具包
网络 Scapy, Scapy3k: 发送,嗅探,分析和伪造网络数据包.可用作交互式包处理程序或单独作为一个库.pypcap, Pcapy, pylibpcap: 几个不同 libpcap 捆绑的py ...
- python的with用法
转自http://blog.kissdata.com/2014/05/23/python-with.html With语句是什么? 有一些任务,可能事先需要设置,事后做清理工作.对于这种场景,Pyth ...
- python greenlet 背景介绍与实现机制
最近开始研究Python的并行开发技术,包括多线程,多进程,协程等.逐步整理了网上的一些资料,今天整理一下greenlet相关的资料. 并发处理的技术背景 并行化处理目前很受重视, 因为在很多时候,并 ...
- Firemonkey Android 虚拟机
AVD,Android Virtual Device start menu>Android AVD Manager>create>start. [DCC Error] E2597 D ...
- 【327】Python 中 PIL 实现图像缩放
参考:Python 中使用PIL中的resize 进行缩放 参考:Python用Pillow(PIL)进行简单的图像操作(模糊.边缘增强.锐利.平滑等) 参考:廖雪峰 - Pillow 实现代码如下: ...
- 可用于nodejs的SuperAgent(ajax API)
简单示例: import request from 'superagent';//引用声明 request.post(api) .withCredentials()//跨域 .end((err, re ...
- 286 walls and gate最近的出口
[抄题]: 您将获得一个使用这三个可能值初始化的 m×n 2D 网格.-1 - 墙壁或障碍物. 0 - 门. INF - Infinity是一个空房间.我们使用值 2 ^ 31 - 1 = 21474 ...
- Java的类名与文件名必须一致
1.Java保存的文件名必须与类名一致:2.如果文件中只有一个类,文件名必须与类名一致:3.一个Java文件中只能有一个public类:4.如果文件中不止一个类,文件名必须与public类名一致:5. ...
- python 开发简单的聊天工具-乾颐堂
python 太强大了,以至于它什么都可以做,哈哈,开个玩笑.但是今天要讲的真的是一个非常神奇的应用. 使用python写一个聊天工具 其实大家平时用的QQ类似的聊天工具,也是使用socket进行聊天 ...
- 签名Android应用程序
Android要求对作为产品发布的应用进行签名(包名相同的化,后安装的应用会覆盖前面安装的应用) 签名作用:1.确定发布者的身份.2.确保应用的完整性. 注意:在应用的开发.调试阶段,Eclipse的 ...