MSP430F5529测周法测量信号频率
基于MSP430单片机的信号检测装置的设计与实现_张利
3 各单元电路实现
图 1 感应磁场检测原理图
2 方案设计
根据上面的分析,可设计线路上电流的检测方 式如下: 在线路正下方用一多匝线圈,其截面与磁力 线方面相垂直( 如图 2 所示) ,则在线圈上感应出电 动势,再 通 过 对 该 信 号 的 放 大、带 通 滤 波,接 入 到 MSP430 单片机的 AD 输入端,并对其采样计算出线 路上电流的大小。
1 信号感应检测基本理论
电流感应检测方式是通过检测电流周围空间磁 场的强度来获得线路电流大小的方法。根据磁介质
∮ ∑ 中的安培环路定理[5] Bdl = μ0 I,则电流 I 的长
L
内
导线周围任一点的磁感强度 B = 2μπ0 Ir,若截面垂直
于磁力线方向,如图 1 所示截面 S1 ,那么 S1 中磁通
波后的信号幅值适应于 AD 输入端的要求,还需要 将滤波后的信号进行再放大。笔者采用 OPA2340 芯片,用单电源供电方式,对滤波后的信号进行可变 增益放大,电路如图 5 所示。
图 5 放大电路接法
3. 2 单片机部分的相关实现 选用 MSP430G2553 单片机作为主控芯片,对滤
MSP430F5529实验指导书V1.0
MSP430F5529 实验指导书
(V1.0)
2014年10月27日
东北林业大学机电工程学院“3+1”实验室
实验一基础GPIO实验
实验二键盘与液晶显示实验实验三时钟系统配置实验实验四看门狗与定时器实验实验五 AD/DA实验
实验六比较器实验
实验七 Flash实验
实验八串行通信实验
实验一基础GPIO实验
【实验目的】
1、熟悉CCS的基本使用方法;
2、掌握MSP430系列单片机程序开发的基本步骤;
3、掌握MSP430 IO口的基本功能。
【实验仪器】
1、SEED-EXP430F5529v1.0开发板一套;
2、PC机操作系统Windows XP或Windows 7,CCSv5.1集成开发环境。
【实验原理】
CCS(Code Composer Studio)是 TI 公司研发的一款具有环境配置、源文件编辑、程序调试、跟踪和分析等功能的集成开发环境,能够帮助用户在一个软件环境下完成编辑、编译、链接、调试和数据分析等工作。CCSv5.1 为 CCS 软件的最新版本,功能更强大、性能更稳定、可用性更高,是 MSP430 软件开发的理想工具。
SEED-EXP430F5529v1.0开发板上的有8个可操作的LED灯,与MCU的IO口对应关系如图1-1所示:
图1-1 LED与MCU的IO对应关系电路
我们可以通过控制单片机IO口的输出电平状态来控制各个LED灯的亮灭。
开发板上还有2个可操作的按键S1,S2。如图1-2所示。
图1-2 按键电路
我们可以通过读取与按键相连的IO口的输入电平状态来执行相应的操作。此外,S1,S2还可以作为外部中断源,触发中断。
msp430f5529定时器实验
定时器实验
一、实验目的
1、学习MSP430F5529定时器的使用。
2、学习MSP430F5529定时器相应的寄存器的使用。
二、实验任务
LED灯的电路图如图*所示:
图* LED灯的电路图
任务:编程实现LED1 以1Hz频率闪烁。
三、程序流程图
实现LED1 以1Hz频率闪烁的程序流程图如图*所示
四、程序代码
#includ#include<msp430.h>
#define CPU_F ((double)1000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) unsigned char count=0;
int main(void){//定时器口中断控制函数
WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer
P1DIR |= BIT0; //P1.0置为输出
TA0CCTL0 = CCIE; //CCR0中断使能
TA0CCR0 = 50000; //设定计数值
TA0CTL =TASSEL_2+MC_1+TACLR;//SMCLK,增计数模式,清除TAR
_bis_SR_register(LPM0_bits+GIE);//低功耗模式0,使能中断
}
#pragma vector=TIMER0_A0_VECTOR
__interrupt void TIMER0_A0_ISR(void)
MSP430F5529测频法测量信号频率
MSP430F5529测量频率
-----测频法
信号变换电路
过零比较器,lm393输出上拉电阻,两电阻分压
程序
#include <>
#include ""
//测频法,上限1Mhz
//看门狗定时1s,开门狗中断处理程序开启捕获器,捕获1s中所有的上升脉冲,脉冲个数即为频率
/*优化的反向可以将开门够定时1S使用定时器去定时1s
*
*/
long fre=0;
char buf[60]="\0";
void SetVcoreUp (unsigned int level)
{
// Open PMM registers for write
PMMCTL0_H = PMMPW_H;
// Set SVS/SVM high side new level
SVSMHCTL = SVSHE + SVSHRVL0 * level + SVMHE + SVSMHRRL0 * level;
// Set SVM low side to new level
SVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 * level;
// Wait till SVM is settled
while ((PMMIFG & SVSMLDLYIFG) == 0);
// Clear already set flags
PMMIFG &= ~(SVMLVLRIFG + SVMLIFG);
// Set VCore to new level
PMMCTL0_L = PMMCOREV0 * level;
// Wait till new level reached
430实现频率的检测
1 引言
由于频率信号具有抗干扰性强、易于传输、测量准确度较高等优点,因此许多非频率量的传感信号都转换为频率量来进行测量和处理。因此频率测量方法愈来愈引起关注和研究。
频率测量是测量和控制系统领域的最基本测量之一。当今用的最多的测量信号频率的仪器是频率计,由于频率计在测量过程中需要一个时基信号作为测量信号频率的时基。时基信号一般是由本机振荡电路发生的,尽管现在多用石英晶体振荡器,但是仍然不能保证时基信号的精度,因此频率计的测量精度也就成了问题。传统的频率测量方法有两种[1]:一种是测频法,在一定时间间隔T内测出待测信号重复变化次数N,频率即为;另一种方法是测周法,在被测信号的一个周期内测出标准高频信号f的个数N,则被测频率
。
本文介绍了一种测宽法[2],借助光电耦合原理,将交流信号转变成周期脉冲信号,通过捕获脉冲信号的下降沿,由定时器计数,通过二次计数的差值便能得到脉冲信号的周期,进而可以计算出所测交流信号的频率。
2 硬件电路设计
硬件电路完成的任务是:
(1)模拟电路部分的设计,其功能是进行信号的转化。交流信号通过整流桥、光电耦合器等模拟器件便能得到周期脉冲信号。
(2)数字电路部分的设计,其功能是进行信号的检测。MSP430单片机内部的16位定时器A具有脉冲捕获功能,能将脉冲信号的占空比检测出来。
图1为它的基本结构图。
图1 系统的基本结构
2.1 模拟电路部分的设计
图2为模拟部分原理。下面主要阐述该电路的工作原理:
图2模拟部分原理图
考虑到交流信号中可能含有一定的直流信号,而直流信号会引起交流波形的上移或下移,这可能会导致原有交流信号没有零点,这就谈不上过零检测、周期脉冲了,因此要根据交流信号的实际情况,在交流信号的出口处用设个适当的电容,起到隔直的作用。
MPF测周法测量信频率完整版
M P F测周法测量信频
率
HEN system office room 【HEN16H-HENS2AHENS8Q8-HENH1688】
M S P430F5529测量频率
-----测周法信号变换电路
过零比较器,lm393输出上拉电阻,两电阻分压
程序
#include <>
#include ""
#include ""
//测周法,在捕获过程中,定时溢出不能被检测出,选择时钟频率为低频时能测出低频,频率高能测出频率高的部分
/*
*
*/
long long start=0;
//long long int stop=0;
double fre=;
unsigned char i=0;
unsigned char over=0;
void SetVcoreUp (unsigned int level)
{
// Open PMM registers for write
PMMCTL0_H = PMMPW_H;
// Set SVS/SVM high side new level
SVSMHCTL = SVSHE + SVSHRVL0 * level + SVMHE + SVSMHRRL0 * level;
// Set SVM low side to new level
SVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 * level;
// Wait till SVM is settled
while ((PMMIFG & SVSMLDLYIFG) == 0);
// Clear already set flags
标准实验二MSP430F5529_25Hz方波发生及测量实验
电子科技大学
实验报告
学生姓名:学号:指导教师:
邮箱:
一、实验室名称:MSP430单片机实验室
二、实验项目名称:25Hz方波发生及峰值幅度测量
三、实验原理:
(1)通用功能I/O
参见实验一中相关原理介绍。
(2)定时器(Timer)
定时功能模块是MSP430应用系统中经常用到的重要部分,可用来实现定时控制、延迟、频率测量、脉宽测量和信号产生、信号检测等等。一般来说,MSP430所需的定时信号可以用软件和硬件两种方法来获得。
MSP430系列有丰富定时器资源:看门狗定时器(WDT),定时器A(Timer_A),定时器B(Timer_B)和定时器D(Timer_D)等。MSP430系列定时器部件功能,如表2-1所示:
表2-1 MSP430中定时器的功能
(a)看门狗定时器,主要作用在于当“程序跑飞”时,会产生溢出,从而产生系统复位,CPU需要重新运行用户程序,这样程序就可以又回到正常运行状态。MSP430 看门狗模块
具有以下特性:
●8 种软件可选的定时时间
●看门狗工作模式
●定时器工作模式
●带密码保护的WDT 控制寄存器
●时钟源可选择
●为降低功耗,可停止
●时钟失效保护
(b)定时器A由一个16位定时器和多路捕获/比较通道组成。MSP430X5XX / 6XX系列单片机的Timer _A有以下特性:
●带有4 种操作模式的异步16 位定时/计数器
●输入时钟可以有多种选择,可以是慢时钟,快时钟以及外部时钟
●可配置捕获/比较寄存器数多达7 个
●可配置的PWM(脉宽调制)输出
●异步输入和同步锁存。不仅能捕获外部事件发生的时间还可锁定其发生时的高低电平●完善的中断服务功能。快速响应Timer_A中断的中断向量寄存器
Msp430f5529开发板测周期和AD
Msp430f5529开发板测频率和ADC采样电压
必备资料:f5529的中文指导和数据手册(遗憾是汇编语言不是C)中文指导:网上有大侠把英文版的用户指导翻译成中文了
数据手册:还没有出现中文版这种神器,不过多看几遍就OK
一.定时器A一些基本资料
至于寄存器里面含义自己应该可以看懂!
这句话我认为有一个极容易产生一个误区,就是TA有7个比较捕获寄存器,当你查看msp430f5529.h的时候,我就发现只有
TAxCCTL0,TAxCCR0
TAxCCTL1,TAxCCR1
TAxCCTL2,TAxCCR2
它们都是共用一个TACTL。
压根就是没有3~6例如没有TAxCCTL3,TAxCCR3,我认为单片机上肯定是有7个比较捕获寄存器,就是msp430f5529没有对剩余的四个进行宏定义。个人想法。
这个最高级,好像大部分的430单片机写的程序都是优先写它。
特点:增计数模式
连续计数模式
增减计数模式
!!!!!!!这几种模式都能用
例如增计数模式:
TA0CCTL0 = CCIE; // CCR0 interrupt enabled
TA0CCR0 = 50000;
TA0CTL = TASSEL_2 + MC_1 + TACLR; // SMCLK, upmode, clear TAR __bis_SR_register(GIE); // Enter LPM0, enable interrupts 就凭它的权力最多,就应该单独想用一个中断函数与CCTL1,CCTL2区分开来!
// Timer0 A0 interrupt service routine
正弦信号参数测量报告
正弦波参数分析仪
设计报告
摘要
本作品以MSP430单片机为控制核心,由波形变换电路、峰值检测电路、显示电路、单片机自带AD转换电路组成。将信号变为方波后可直接由单片机测出其的频率,其峰值由峰值检测电路转换为直流信号并被单片机测量。
关键字:正弦信号;频率;峰值;MSP430单片机;
Abstract
This design take MSP430 MCU as control core, Provided by the waveform conversion circuit, the Peak detection circuit,the display circuit, AD conversion circuit in MCU. The frequency of Signal can be directly measured by the microcontroller when it is transformed as square wave , its peak by the peak detector circuit is converted into a DC signal and SCM measurements.
Keyword:sinusoidal signal;frequency;Peak;MSP430 microcontroller;
一、系统方案论证与比较
1、频率测量方案选择
方案一:采用计数器芯片74LS161和8253。该计数器芯片可以精确地对矩形波信号进行计数并直接与单片机交换数据,但其测量频率很有限,外围电路复杂,价格较贵。
MSP430f5529中文手册
来执行的。具体的结构我也不罗索了,可以参考430系列手册。 ③时钟模块:系统时钟是一个程序运行的指挥官,时序和中断也是整个程 序的核心和中轴线。430最多有三个振荡器,DCO 内部振荡器;LFXT1外接 低频振荡器,常见的32768HZ,不用外接负载电容;也可接高频450KHZ- 8M,需接负载电容;XT2接高频450KHZ-8M,加外接电容。初学者若要使 用到片中某模块时几乎都要使用不同的时钟。 时钟模块是提供整个单片机 中各模块的时钟发生源,所以这章节是非常强调地要去认真理解的。 ⑴.必须理解430有几种时钟信号:MCLK 系统主时钟,可分频1 2 4 8,供 cpu 使用,其他外围模块在有选择情况下也可使用;SMCLK 系统子时钟, 供外围模块使用,可选则不同振荡器产生的时钟信号;ACLK 辅助时钟,只 能由 LFXT1产生,供外围模块。
②IO 模块:对于 IO 模块可分为初级与提高两阶段,可以不必同一时段内 进行理解。 a 初学者必需了解几个常用寄存器使用如 P1OUT,P1IN,P1DIR,P1SEL 寄存 器。 b 理解 MSP430 IO 口常用编程语法,这些都可以查看参考例程。 c 结合书本介绍和个人理解,然后在开发板上进行实验。例如比如 LED、 响声之类的 初级实验。 d 对于 IO 模块:了解如何使用 IO 中断, 和 IO 中断相关寄存器的使用。 如 果不太必要,可以跳过 IO 中断的使用,而是去学习其他章节的基础部分; 当其他章节基础学习到一定程序时回过头再来学习这部分。另外,我们需 要搞清楚 IO 模块在什么时候为高阻状态?高阻状态时的漏电流为多少? IO 驱动电流能力如何?等等一些常关注的参数时, 我们都需要养成主动查 看器件手册的习惯。
MSP430F5529中文资料
德州仪器MSP430系列微控制器
德州仪器MSP430系列微控制器的体系结构,结合广泛的低功耗模式,优化来达到延长电池寿命在便携式测量的应用。设备功能强大的16位RISC CPU、16位寄存器和最大的代码效率。数控振荡器(DCO)允许在3.5μs(典型的)从低功耗模式唤醒到主动模式。
MSP430F5527,MSP430F5529 MSP430F5525,MSP430F5521单片机配置集成的USB层和物理层支持USB 2.0,四个16位定时器,一个高性能的12位模拟数字转换器(ADC),两个通用串行通信接口(USCI),硬件乘法器、DMA、实时时钟模块与报警功能,和63 I / O口线。
MSP430F5526,MSP430F5528 MSP430F5524,MSP430F5522包括所有这些外设,有47个I / O口线。
MSP430F5519,MSP430F5517,MSP430F5515与集成的USB单片机配置层和物理层支持USB 2.0,4个16位定时器,两个通用串行通信接口(USCI),硬件乘数、DMA、实时时钟模块与报警功能,和63 I / O口线。MSP430F5514和MSP430FF5513包括所有这些外设但有47个I / O口线。
典型的应用包括模拟和数字传感器系统,需要连接的数据记录器等各种USB主机。
家庭成员可以总结在表1。
原理框图,MSP430F5529IPN MSP430F5527IPN MSP430F5525IPN,MSP430F5521IPN
引脚——MSP430F5529IPN MSP430F5527IPN、MSP430F5525IPN MSP430F5521IPN
MSP430F5529测频法测量信号频率
MSP430F5529测量频率
-----测频法信号变换电路
过零比较器,lm393输出上拉电阻,两电阻分压
程序
//
//
率
/*
*main.c
*/
{
//Clearalreadysetflags
PMMIFG&=~(SVMLVLRIFG+SVMLIFG);
//SetVCoretonewlevel
PMMCTL0_L=PMMCOREV0*level;
//Waittillnewlevelreached
if((PMMIFG&SVMLIFG))
while((PMMIFG&SVMLVLRIFG)==0);
//SetSVS/SVMlowsidetonewlevel
SVSMLCTL=SVSLE+SVSLRVL0*level+SVMLE+SVSMLRRL0*level;
//LockPMMregistersforwriteaccess
PMMCTL0_H=0x00;
}
voidinit_clock()
{
SetVcoreUp(0x01);
SetVcoreUp(0x02);
SetVcoreUp(0x03);
UCSCTL3=SELREF_2;//SetDCOFLLreference=REFO
UCSCTL4|=SELA_2;//SetACLK=REFO
__bis_SR_register(SCG0);//DisabletheFLLcontrolloop
UCSCTL0=0x0000;//SetlowestpossibleDCOx,MODx
do
{
}
{
}
{
{
}
}
init_uart()
{
P3SEL|=BIT3+BIT4;//P3.3,4=USCI_A0TXD/RXD
幅度频率测量电路的设计
幅度频率测量电路的设计(H 题)
一、 系统方案:
用单片机实现。目前单片机种类很多,单片机功能越来越强,根据设计要求选用TI 公司的MSP430单片机,该芯片内含2个16为定时/计数器,能最大限度的简化频率计外围器件。MSP430还有全功能串行口、程序存储器等,因此该方案具有硬件构成简单、功能灵活、易于修改等有点。
图1(系统框图)
如图1所示,被测正弦波信号经过放大整形电路,得到方波信号;在通过MSP430G2553单片机进行定时Ts 内产生方波N 个(又f=N/T ),从而达到测频的目的与要求,最后在数码管上显示频率值。
幅度频率测量电路设计任务方框图:
图2(系统框图)
二、单元电路设计
.波形变换电路
采用过零比较器进行波形变换。将输入的正弦波变换为同频率的方波信号。电路简单可以同时满足和5V 的幅值信号输入
且转换出来的方波波 形完全不失真,输出电压为可调改变负载电阻即可
。如附件图2所示,是
用LMV393比较器组成的过零比较器。
因为这款芯片属于TI 公司的,所以是首选。还有就是对这款芯片进行测试测试。当输入1Hz-10MHz 时,输入方波很稳定。
单片机最小系统电路。
幅度测量电路:
幅度测量电路利用幅频转换电路,将幅度转换为频率进行测量,主要利用AD820芯片、AD654芯片完成。电路框图如图l 所示。
图1幅频转换电路框图AD820[1】是单双电源、低功耗、精密场效应输人的运算放大器,采带通滤波器 幅度—频率测量电路 显示 正弦信号产生器
放大 整形 电路 MSP430G2553控制电路 显示 输入 信号
MSPF测频法测量信频率
MSP430F5529测量频率
-----测频法信号变换电路
过零比较器,lm393输出上拉电阻,两电阻分压
程序
#include
#include "stdio.h"
//测频法,上限1Mhz
//看门狗定时1s,开门狗中断处理程序开启捕获器,捕获1s中所有的上升脉冲,脉冲个数即为频率
/*优化的反向可以将开门够定时1S使用定时器去定时1s
* main.c
*/
long fre=0;
char buf[60]="\0";
void SetVcoreUp (unsigned int level)
{
// Open PMM registers for write
PMMCTL0_H = PMMPW_H;
// Set SVS/SVM high side new level
SVSMHCTL = SVSHE + SVSHRVL0 * level + SVMHE + SVSMHRRL0 * level;
// Set SVM low side to new level
SVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 * level;
// Wait till SVM is settled
while ((PMMIFG & SVSMLDL YIFG) == 0);
// Clear already set flags
PMMIFG &= ~(SVMLVLRIFG + SVMLIFG);
// Set VCore to new level
PMMCTL0_L = PMMCOREV0 * level;
// Wait till new level reached
标准实验三MSP430F5529_传感器实验
电子科技大学
实验报告
学生姓名:学号:指导教师:
邮箱:
一、实验室名称:MSP430单片机实验室
二、实验项目名称:基于I2C接口的数据采集
三、实验原理:
(1)I2C接口简介
IIC(Inter-Integrated Circuit,常被称为I2C)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。它是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,高速I2C总线一般可达400kbps以上。
I2C总线在传送数据过程中共有三种类型信号,它们分别是:开始信号、结束信号和应答信号。
●开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
●结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。
●应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉
冲,表示已收到数据。
CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。
这些信号中,起始信号是必需的,结束信号和应答信号,都可以不要。I2C总线时序图如图3.1所示:
图3.1 I2C总线时序图
在MSP430系列单片机中,硬件I2C接口是通过通用串行通信接口(universalserialcommunicationinterface,USCI)来实现的,通用串行通信接口在一套硬件模块上支持多种串行通信模式,例如SPI接口、I2C接口、UART接口等。配置通用串行通信接口的工作模式是通过为一系列寄存器赋值来实现的,接下来将介绍将通用串行通信接口配置为I2C模式涉及的一系列寄存器。
Msp430f5529开发板测频率和ADC采样电压
//****************************************************************************//// 项目名称: MSP-EXP430F5529 交直流电压频率测试 // 毕设学校: 南昌航空大学 // 毕设学院: 信息工程学院 // 班级学号: 09xxxx // 程序设计: 蒋xx //****************************************************************************///******************************************************************************** 第一: 页面设计* 第二: ADC12的电压采样* 第三: TIMERA的使用测量周期* 第三: 采集到得数据进行整理液晶显示******************************************************************************/#include #include #include "HAL_PMM.h"#include "HAL_UCS.h"#include "HAL_Board.h"#include "HAL_Buttons.h"#include "HAL_Cma3000.h"#include "HAL_Dogs102x6.h"#include "stdlib.h"/***************************************************************************************************所有的全局变量*电压采样值和测频是采样到得个数****************************************************************************************************/uint16_t timeoutCounter;uint32_t results[10];uint32_t sum=0,com,acom,flag=0;uint32_t cap,newdata,olddata,data;uint32_t num;/***************************************************************************************************设置时钟源*****************************************************************************************************/void int_clk(){P2DIR |= BIT2; // SMCLK set out to pinsP2SEL |= BIT2;P7DIR |= BIT7; // MCLK set out to pinsP7SEL |= BIT7;P5SEL |= BIT2+BIT3; // Port select XT2UCSCTL6 &= ~XT2OFF; // Enable XT2UCSCTL3 |= SELREF_2; // FLLref = REFO// Since LFXT1 is not used,// sourcing FLL with LFXT1 can cause// XT1OFFG flag to setUCSCTL4 |= SELA_2+SELS_5 + SELM_5;// Loop until XT1,XT2 & DCO stabilizes - in this case loop until XT2 settlesdo{UCSCTL7 &= ~(XT2OFFG + XT1LFOF
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MSP430F5529测量频率
-----测周法信号变换电路
过零比较器,lm393输出上拉电阻,两电阻分压
程序
#include
#include "stdio.h"
#include "math.h"
//测周法,在捕获过程中,定时溢出不能被检测出,选择时钟频率为低频时能测出低频,频率高能测出频率高的部分
/*
* main.c
*/
long long start=0;
//long long int stop=0;
double fre=0.0;
unsigned char i=0;
unsigned char over=0;
void SetVcoreUp (unsigned int level)
{
// Open PMM registers for write
PMMCTL0_H = PMMPW_H;
// Set SVS/SVM high side new level
SVSMHCTL = SVSHE + SVSHRVL0 * level + SVMHE + SVSMHRRL0 * level;
// Set SVM low side to new level
SVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 * level;
// Wait till SVM is settled
while ((PMMIFG & SVSMLDL YIFG) == 0);
// Clear already set flags
PMMIFG &= ~(SVMLVLRIFG + SVMLIFG);
// Set VCore to new level
PMMCTL0_L = PMMCOREV0 * level;
// Wait till new level reached
if ((PMMIFG & SVMLIFG))
while ((PMMIFG & SVMLVLRIFG) == 0);
// Set SVS/SVM low side to new level
SVSMLCTL = SVSLE + SVSLRVL0 * level + SVMLE + SVSMLRRL0 * level;
// Lock PMM registers for write access
PMMCTL0_H = 0x00;
}
void init_clock()
{
SetVcoreUp (0x01);
SetVcoreUp (0x02);
SetVcoreUp (0x03);
UCSCTL3 = SELREF_2; // Set DCO FLL reference = REFO
UCSCTL4 |= SELA_2; // Set ACLK = REFO
__bis_SR_register(SCG0); // Disable the FLL control loop
UCSCTL0 = 0x0000; // Set lowest possible DCOx, MODx
UCSCTL1 = DCORSEL_7; // Select DCO range 50MHz operation UCSCTL2 = FLLD_0 + 609; // Set DCO Multiplier for 25MHz
// (N + 1) * FLLRef = Fdco
// (762 + 1) * 32768 = 25MHz
// Set FLL Div = fDCOCLK/2 __bic_SR_register(SCG0); // Enable the FLL control loop
__delay_cycles(782000);
do
{
UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);
// Clear XT2,XT1,DCO fault flags SFRIFG1 &= ~OFIFG; // Clear fault flags
}while (SFRIFG1&OFIFG); // Test oscillator fault flag
}
void send_char(char sc)
{
UCA0TXBUF=sc;
while(!(UCA0IFG&UCTXIFG));
void send_string(char *s)
{
while(*s!='\0')
{
send_char(*s++);
}
}
init_uart()
{
P3SEL |= BIT3+BIT4; // P3.3,4 = USCI_A0 TXD/RXD
UCA0CTL1 |= UCSWRST; // **Put state machine in reset**
UCA0CTL1 |= UCSSEL__SMCLK; // SMCLK
UCA0BR0 = 173; // 1MHz 115200 (see User's Guide)
UCA0BR1 = 0; // 1MHz 115200
UCA0MCTL |= UCBRS_5 + UCBRF_0; // Modulation UCBRSx=1, UCBRFx=0 UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
UCA0IE |= UCRXIE; // Enable USCI_A0 RX interrupt
send_string("CLS(0);\r\n");
}
int main(void) {
char buf[60]="\0";
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
init_clock();
init_uart();
P1DIR &= ~BIT2; // P1.2 in
P1SEL |= BIT2; //捕获输入
TA0CTL = TASSEL_2 +ID__8 + MC_2 + TACLR+TAIE; // SMCLK, 连续mode, clear TAR 8分频下限可以测到8Hz。上限200K左右
TA0CCTL1 =CM_1 +SCS +CAP +CCIE;
__bis_SR_register( GIE); // Enter LPM0, enable interrupts
while(1)
{
sprintf(buf,"DS16(0,60,'频率:%1.1f',4);\r\n",fre);
send_string( buf);
__delay_cycles(314574);
}
}