msp430F 5438时钟配置为25M时
MSP430F5438uCOSII移植
MSP430F5438uCOSII移植******************************** MSP430F5438 uCOSII 移植 ********************************1. MSP430F5438是TI公司的超低功耗微控制器,供电电压变态低,功耗也是变态低,CPU可以跑到18Mhz到25Mhz,说性能是比不上ARM的了,可能指令的密度也不及ARM。
但是MSP430超低功耗的特点使它能够应用在那些功耗敏感的应用,如手持设备,模拟数字传感系统等。
MSP430F5438是比较新的芯片(相对于1,2,3,4系列),外部资源很丰富,功耗比以前的系列更低了。
2. MSP430F5438的CPU很特别,里面大部分的寄存器都是20bit(只有SR为16bit),使用20bit主要是要扩大寻址范围,MSP430本身是16bit-RISC的MCU,由于内部flash大,外围资源丰富,于是就扩展了额外的4bit。
个人认为,还不如直接把MSP430做成32bit的CPU,因为在移植ucos-II,设计各个任务的堆栈的时候,20bit其实还是需要32bit的空间去存储,浪费RAM。
在这次移植中,就因为堆栈溢出的问题,耗了我两天才发现,搞得毫无表情。
不过也让我认识到移植过程中需要注意的问题。
3. MSP430F5438的CPU相对ARM来说比较简单,首先MSP430F5438没有各种模式的切换,因此保存堆栈的时候会比较简单。
MSP430F5438的R12-R15是用于函数传入参数和返回参数用的。
中断跳转时会自动保存PC,SR寄存器的值,而CALLA这类的分支函数跳转只会自动保存PC而已,具体堆栈结构查看datasheet。
4. 移植uCOS-II有几个函数需要修改,分别如下:l)开关中断函数OS_ENTER_CRITICAL()OS_EXIT_CRITICAL()2)任务堆栈初始化函数OS_STK *OSTaskStkInit (void (*task)(void *p_arg), void *p_arg, OS_STK *ptos, INT16U opt);3)开始就绪任务的函数void OSStartHighRdy(void);4)任务级的调度函数void OSCtxSw(void);5)中断级的调度函数void OSIntCtxSw(void);6)时钟中断服务函数TIMER1_A0_IS5. 开关中断函数声明及宏定义:-----------------------------------------------------------------------------------------------#define OS_CRITICAL_METHOD 3#if OS_CRITICAL_METHOD == 3#define OS_ENTER_CRITICAL() (cpu_sr = OSCPUSaveSR())#define OS_EXIT_CRITICAL() (OSCPURestoreSR(cpu_sr))#endif-----------------------------------------------------------------------------------------------函数实现:-----------------------------------------------------------------------------------------------OSCPURestoreSRMOV.W R12, SRRETAOSCPUSaveSRMOV.W SR, R12DINTRETA-----------------------------------------------------------------------------------------------对于MSP430这类的单片机,使用了方法3去开关中断,最合适不过了。
MSP430时钟设置程序
MSP430时钟设置程序MSP430时钟设置程序1/void main (void){unsigned int i;WDTCL = WDTPW+WDTHOLD; //停止看门狗P5DIR = 0x10; //设置P5.4输出P5SEL = 0x10; //设置P5.4口为外围模块用作MCLK信号输出BCSCTL1 &= ~XT2OFF; //使TX2有效,TX2上电时默认为关闭的.do{IFG1 &= ~OFIFG; //清振荡器失效标志for(i= 0xff; i>;0; i--); //延时,待稳定.}while ((IFG1 & OFIFG)!=0); //若振荡器失效标志有效BCSCTL2 |= SELM1; //使MCLK = XT2for(;;);}2/#include ;void main(void){unsigned int i;WDTCTL = WDTPW + WDTHOLD; //停止看门狗BCSCTL1 |= XTS;//设置时基寄存器1,使ACLK = LFXT1 = HF XTAL,也就是高频模式.P2DIR|= 0x01; //设置P2.0方向寄存器为输出P2SEL |= 0x01; //设置P2.0口为外围模块用作ACLK信号输出P1DIR |= 0x02; //设置P1.1方向寄存器为输do{IFG1 &= ~OFIFG; //清振荡器失效标志for (i = 0xFF; i >; 0; i--); //延时,待稳定}while ((IFG1 & OFIFG)); //若振荡器失效标志有效? BCSCTL2 |= SELM_3;//设置时基寄存器2,使主时钟信号MCLK = LFXT1 (可靠的) for (;;) //无穷循环{P1OUT |= 0x02; // P1.1 = 1P1OUT &= ~0x02; // P1.1 = 0}}1-LFXT1CLK:低频/高频时钟源.由外接晶体振荡器,而无需外接两个振荡电容器.较常使用的晶体振荡器是32768HZ。
关于(单片机)msp430的时钟资料
msp430f5419/38学习笔记之时钟系统(2011-11-30 10:41:30)分类: msp430标签:msp430f541xmsp430f543xucs时钟系统注:msp5419/38中,如果你使用SMCLK做TIMER_A的时钟,那么进入低功耗3或低功耗4是不会把SMCLK关掉的,这点5系列和其他系列的不一样。
UCS模块是一个低成本超低功耗系统,通过选择使用3个内部时钟信号,用户可以得到性能和功耗的最佳平衡点。
UCS可以由软件配置其工作模式,如配置成:不需要任何外部器件、使用1或 2个外部晶振等。
一、时钟系统UCS模块具有5个时钟源:XT1CLK:低频/高频振荡器,既可以与低频 32768HZ钟振、标准晶振、外部振荡器,又可以与外部4M-32MHZ时钟源一起使用,XT1CLK可以作为FLL模块内部的参考时钟。
有些芯片XT1CLK只允许使用外部的低频晶振,具体可参考数据手册;XT2CLK:可选高频振荡器,可与标准晶振,振荡器或者 4MHZ~32MHZ外部时钟源一起使用;VLOCLK:内部低功耗、低频振荡器,频率典型值为10KHZ;REFOCLK:内部低频振荡器,典型值为 32768HZ,可作为 FLL基准时钟源;DCOCLK:可以通过 FLL来稳定的内部数字控制振荡器(DCO);DCOCLK经过 FLL分频后可得DCOCLKDIV。
UCS模块可以提供3种时钟信号:ACLK:辅时钟;MCLK:系统主时钟;SMCLK:子系统主时钟。
二、UCS操作PUC之后,UCS的默认配置模式如下:XT1CLK 选择LF模式下的XT1作为时钟源,ACLK 选择 XT1CLK 作为时钟源;MCLK 选择DCOCLKDIV作为时钟源;SMCLK 选择DCOCLKDIV作为时钟源;FLL操作使能,FLL基准时钟(FLLREFCLK)选择XT1CLK;XIN 和 XOUT作普通IO 口使用,禁止了 XT1 功能,直到 I/O 口重新配置为 XT1 模式;如果有 XT2IN 和XT2OUT,则一并配置为普通 IO 口,禁止 XT2 功能。
MSP430的时钟设置
MSP430的时钟设置MSP430大部分都有三时钟脉冲可供运行时选择,这三个时钟是,1)辅助时钟ACLK;2)系统主时钟MCLK;3)子系统时钟SMCLK。
这三种时钟脉冲的选择主要靠下面三个控制寄存器来完成,这三个控制寄存器是1)控制寄存器DCOCT其存储单元地址是56h;2) 基本始终控制寄存器1,BCSCTL1,地址57h;3) 基本始终控制寄存器2,BCSCTL2,地址58h。
下面对这三个寄存器的控制的软件状态状态进行介绍。
1)控制寄存器DCOCTLDCO2;DCO1;DCO0这三位共八个状态,控制时钟脉冲的8个频段。
000~111对应0~7;频率由低到高8个频段。
MOD.4~MOD.0这5为共32种状态,定义在32个周期中插入插入其他频率。
DCO2=0x80;DCO1=0x40;DCO0=0x20;MOD4=0x10;MOD3=0x08;MOD2=0x04;MOD1=0x02;MOD0=0x01其中TX2OFF为0,开启TX2振荡器,为1关闭;XTS=0开启低频模式,1开启高频模式;DIVA1和DIVA0控制分频模式0 0 不分频0 1 2分频1 0 4分频1 1 8分频TX5V一般设置为0RSEL2~RSEL0三位决定八个频段的不同频率,这样,RSEL2~RSEL0和DCO2~DCO0共可实现8*8=64个不同的频率。
由于430没有位操作,所以定义了每一位状态对应的名称:TX2OFF=0x80TXS=0x40DIVA1=0x20DIVA0=0x10TX5V=0x08RSEL2=0x04RSEL1=0x02RSEL0=0x01也就是每位所在的位置为1,其余位为0,这样,要对某一位操作,就可通过运算,在不改变其他位的情况下,对某一位进行置1或清0(如何做后面讲)。
SELM.1- SELM.0DIVM.1- DIVM.0SELS时钟源选择DIVS.1-DIVS.0 DCOR0 0 默认DCOCLK0 0默认MCLK=DCOCLK00 默认SMCLK=MCLK选择电阻0 1选择DCOCLK0 1 2分频选择SMCLK01 MCLK 2分频内电阻1 0 选择XT2CLK1 0 4分频默认选择DCOCLK10 MCLK 4分频或外电阻1 1 选择LFXTICLK1 18分频11 MCLK 8分频SELM1=0x80;SELM0=0x40;DIVM1=0x20;DIVM0=0x10;SELS=0x08;DIVS1=0x04;DIVS0=0x02;DCOR=0x01;下面看如何让在保证其他位不变的情况下给某一位清0或置1.例1要给BCSCTL2的bit3清0。
MSP430时钟配置
MSP430 频率(时钟)配置MSP430时钟:1、在MSP430单片机中一共有四个时钟源:(1)LFXT1CLK,为低速/高速晶振源,通常接32.768kHz晶振(2)XT2CLK,可选高频振荡器,外接标准高速晶振,通常是接8Mhz,也可以接400kHz~16Mhz;(3)DCOCLK,数控振荡器,为内部时钟,由RC震荡回路构成,受温度和电压的影响较大;若外部不接稳定的晶振电路,直接由内部时钟工作,则会因环境变化而导致性能不稳定。
(4)VLOCLK,内部低频振荡器,12kHz标准振荡器。
(要得到标准的12k则必须外接32768等晶振)2、在MSP430单片机内部一共有三个时钟系统:(1)ACLK:辅助时钟,通常由LFXT1CLK或VLOCLK作为时钟源,可以通过软件控制更改时钟的分频系数;(2)MCLK:主时钟,为系统内核提供时钟,它可以通过软件从四个时钟源选择或者从四个时钟源分频后选择为主时钟;(3)SMCLK:子时钟,也是可以由软件选择时钟源。
3、MSP430的时钟设置包括3个寄存器,DCOCTL、BCSCTL1、BCSCTL2、BCSCTL3MOD0~MOD4: Modulation Bit,频率的微调。
一般不需要DCO的场合保持默认初始值就行了。
XT5V: 1.DIVA0~DIVA1:选择ACLK的分频系数。
DIVA=0,1,2,3,ACLK的分频系数分别是1,2,4,8;XTS: 选择LFXT1工作在低频晶体模式(XTS=0)还是高频晶体模式(XTS=1)。
XT2OFF: 控制XT2振荡器的开启(XT2OFF=0)与关闭(XT2OFF=1)。
正常情况下把XT2OFF复位就可以了.DCOR: 0,选择内部电阻;1,选择外部电阻DIVS0~DIVS1: DIVS=0,1,2,3对应SMCLK的分频因子为1,2,4,8SELS: 选择SMCLK的时钟源, 0:DCOCLK; 1:XT2CLK/LFXTCLK.DIVM0~1: 选择MCLK的分频因子, DIVM=0,1,2,3对应分频因子为1,2,4,8.SELM0~1: 选择MCLK的时钟源, 0,1:DCOCLK, 2:XT2CLK, 3:LFXT1CLK我用的时候一般都把SMCLK与MCLK的时钟源选择为XT2。
电子设计竞赛msp430f5438程序技术文档
UCSCTL5|=DIVS_0+DIVM_0;
}
本模块主要完成对 MCLK,SMCLK,ACLK。即系统时钟,子系统时钟,辅助
时钟的配置,通过设定相应的寄存器位来使 msp430f5438 工作在硬件所需要的条
件下。
I/0 口初始化配置子程序:
2
void PORT_Init(void)
//I/O 口初始化配置
第八章 简易频谱仪程序解析 .................................................. 20 8.1 简易频谱仪程序模块功能介绍 ............................................. 20 8.2 简易频谱仪程序模块流程图介绍 ........................................... 21 8.3 简易频谱仪程序主功能模块介绍 ........................................... 22
}
定时器分为 A0,A1 两个需要使用时必须对以上的寄存器进行相应的配置,完成 相应的模块功能包括定时中断,PWM 信号产生。
DAC12 初始化子程序:
void ADC12_Init(void)
{ ADC12CTL0&=~ADC12ENC;
//ADC12 初始化在 ENC=0 下修改
DC12CTL0|=ADC12ON+ADC12REFON+ADC12REF2_5V+ADC12SHT0_0+ADC
UCSCTL6&=~(XT1OFF+XT2OFF);
// 开 XT1,XT2
UCSCTL6|=XCAP_3;
MSP430F5438调试笔记
MSP430F5438调试笔记
MSP430F5438 调试笔记1.JTAG 连接下载问题:
出现问题1:
说明JTAG 没有发现MSP430F5438 设备,JTAG 正确接法是:2 脚接VCC 默认为JTAG 供电,这个供电由USB 馈电得到,注:一般情况下在JTAG 供电时,4 脚需悬空。
在外部供电时2 脚也需接到VCC 上,4 脚悬空或接VCC 均可,一般是悬空,防止外部供电与JTAG 的供电电压不匹配,引起JTAG 异常。
JTAG 的TEST 管脚处理:之前看到利尔达关于IAR 烧写工具的描述,如下图所示:但是这个不适用5 系列的430,但手册中没说,深受其害。
和开发板的人沟通这个只试用与2 系列和4 系列的B 仿真器和并口仿真器不能同时试用。
可能的原因:1)并口FET 不要是什么精简版的没有Test 脚肯定不灵2)RST 引脚上不要有外接的复位片子通用原则3)IAR430 的版本要在4.21 及以上4.20/4.11b 可能也行,没试过;3.x 的版本应该还没有5 系吧...4)电源问题处理好是目标板供电还是并口供电,二选一吧,不要冲突了,这个是
不是决定因素不清楚,但是肯定需要考虑tips:感谢大家的阅读,本文由我司收
集整编。
仅供参阅!。
5438时钟配置
// MSP430F543xA Demo - XT2 sources MCLK & SMCLK
//
// Description: This program demonstrates using XT2 to source MCLK. XT1 is not
do
{
UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);
// Clear XT2,XT1,DCO fault flags
SFRIFG1 &= ~OFIFG; // Clear fault flags
// expected frequency
UCSCTL4 |= SELS_5 + SELM_5; // SMCLK=MCLK=XT2
while(1); // Loop in place
//
// NOTE: if the SMCLK/HF XTAL frequency exceeds 8MHz, VCore must be set
// accordingly to support the system speed. Refer to MSP430x5xx Family User's Guide
SetVCore(PMMCOREV_2); // Set VCore to 1.8MHz for 20MHz
P11DIR = BIT1+BIT2; // P11.1-2 to output direction
msp430设置基本时钟系统
/* DCOCTL 的位定义 */ #define MOD0 (0x01) /* Modulation Bit 0 */ #define MOD1 (0x02) /* Modulation Bit 1 */ #define MOD2 (0x04) /* Modulation Bit 2 */ #define MOD3 (0x08) /* Modulation Bit 3 */ #define MOD4 (0x10) /* Modulation Bit 4 */ #define DCO0 (0x20) /* DCO Select Bit 0 */ #define DCO1 (0x40) /* DCO Select Bit 1 */ #define DCO2 (0x80) /* DCO Select Bit 2 */ /* BCSCTL1 的位定义 */ #define RSEL0 (0x01) /* Resistor Select Bit 0 */ #define RSEL1 (0x02) /* Resistor Select Bit 1 */ #define RSEL2 (0x04) /* Resistor Select Bit 2 */ #define XT5V (0x08) /* XT5V should always be reset */ #define DIVA0 (0x10) /* ACLK Divider 0 */ #define DIVA1 (0x20) /* ACLK Divider 1 */ #define XTS (0x40) /* LFXTCLK 0:Low Freq. / 1: High Freq. */ #define XT2OFF (0x80) /* Enable XT2CLK */ /* BCSCTL1 的 DIVA 的功能定义 */ #define DIVA_0 (0x00) /* ACLK Divider 0: 0x20) /* MCLK Divider 2: /4 */ #define DIVM_3 (0x30) /* MCLK Divider 3: /8 */ /* BCSCTL1 的 SELM 的功能定义 */ #define SELM_0 (0x00) /* MCLK Source Select 0: DCOCLK */ #define SELM_1 (0x40) /* MCLK Source Select 1: DCOCLK */ #define SELM_2 (0x80) /* MCLK Source Select 2: XT2CLK/LFXTCLK */ #define SELM_3 (0xC0) /* MCLK Source Select 3: LFXTCLK */ #endif ///////////////////////////////////////////////// ///////////////////////////////////////////////// //////////////// #include; #include "BoardConfig.h" #include "SetClock.h" // 时钟设置函数// 系统时钟设定 void BCSInit (void) {
MSP430F5438USCI模块的详细介绍
MSP430F5438USCI模块的详细介绍MSP430F5438是一款德州仪器(TI)推出的超低功耗微控制器,搭载了USCI模块,提供多种通信接口,包括UART、SPI和I2C。
本文将详细介绍MSP430F5438的USCI模块的特性和应用。
USCI模块在MSP430F5438上有两个实例,分别称为USCI_A和USCI_B。
每个实例都可以配置为UART、SPI或I2C模式,提供相应的寄存器和功能。
以下将分别介绍每个实例的特性和应用。
CI_A模块:USCI_A模块是一个通用的串行通信模块,可配置为UART、SPI或I2C模式。
它提供了几个寄存器和功能,用于配置串口参数、接收和发送数据。
在UART模式下,USCI_A可以实现异步串行通信,支持多种波特率和数据格式。
在SPI模式下,它可以与其他设备进行高速的全双工通信,支持主从模式和多主模式。
在I2C模式下,USCI_A可以作为主设备或从设备,与其他I2C设备进行双向通信。
应用方面,USCI_A模块可用于实现与外部设备的通信,如串行打印机、传感器、外部存储器等。
通过UART模式,MSP430F5438可以与PC进行通信,进行数据传输和远程调试。
通过SPI模式,可以与其他MSP430微控制器或外部器件进行高速数据传输,如液晶显示屏、无线模块等。
通过I2C模式,可以与其他I2C设备(例如传感器、实时时钟等)进行双向通信,实现数据采集和控制。
CI_B模块:USCI_B模块也是一个通用的串行通信模块,可配置为UART、SPI或I2C模式。
它与USCI_A模块类似,提供了相应的寄存器和功能,用于配置通信参数和执行数据传输。
在UART模式下,USCI_B支持多种波特率、数据格式和校验方式。
在SPI模式下,它支持全双工通信和多种传输模式。
在I2C模式下,USCI_B可以作为主设备或从设备,与其他I2C设备进行双向通信。
应用方面,USCI_B模块与USCI_A模块相似,可应用于串行通信和外设接口。
msp430f5438使用说明
MSP430F5438 开发板使用说明
1.电源
开发板使用DC5V的外部供电,跳线J3实现了开关功能。
电源接通后D6的LED点亮。
2. 复位按键
S13为复位按键。
按下复位按钮,即可将程序复位,从头开始执行。
3.键盘
开发板设有12个按键,为3*4的行列扫描键盘。
使用P3.0到P3.7端口,P3.0、P3.1、P3.2为行线,P3.4、P3.5、P3.6、P3.7为列线。
列线分别由上拉电阻拉到VCC,在行线与列线的每一个交接处有一个按键,按键的两端分别接在行线和列线上。
如果有键按下,则与只相连的行线与列线被连通,即可检测按键。
4.LCD显示
表1:12864LCD的引脚说明
IO口连接
P9.5------RS P9.6------R\W P9.7------E P10.0~10.7--------DB0~DB7 P11.0-------CS1 P11.1-------CS2 P11.2------RST
跳线J4是背光开关;
电位器R13背光亮度调节。
5.LED
P9.0 9.1 9.2 9.3 9.4 口接有LED,设置各口为输出高电平时LED点亮,低电平时熄灭。
6.扩展IO口
开发板两侧的双排插针。
MSP430F5438管脚。
MSP430F5系列单片机时钟系统
UCS 模块方框图
3.2 UCS 模块的操作
PUC 复位后,UCS 模块的默认配置如下:
XT1 处于 LF(低频)模式且 模式且被选为 XT1CLK 时钟源。 时钟源。XT1CLK 被选作 ACLK
MCLK 选择 DCOCLKDIV
SMCLK 选择 DCOCLKDIV
FLL 操作使能, 操作使能,XT1CLK 作为 FLL 的参考时钟 FLLREFCLK
式下 XIN 可以连接外部时钟信号输入,XOUT 可以被配置成普通 I/O 口,PSEL 中与 XOUT 相关的位不予考虑。 一旦 PSEL 中与 XIN 相关的位被清零, 则 XIN 和 XOUT 引脚将会被 配置为普通 I/O 口,XT1 功能被禁止。 当地 XT1 被用作 ACLK、 MCLK 或 SMCLK(SELA=0、 SELM=0 或 SELS=0) 或 FLLREFCLK(SELREF=0)和 (XT1OFF=1) 从 LMP3 模式进入 AM (活动) 模 式 时 XT1 被 允 许 , 否 则 XT1 被 禁 止 。 当 XT1OFF=1 时 置 位 OSCOFF(LMP4),将禁止 XT1。如果应用中希望不管 OSCOFF 置位与否都 要使能 XT1,则只需清零 XT1OFF 就可以了。从 LMP4 模式进入 AM 模 式将是 XT1 使能。
对UCS模块进行配置。 UCS模块可以在程序执行过程中的任意时刻被软件进行配置或重 新配置。 3.2.1 UCS模块低功耗应用特点 UCS模块低功耗应用特点 冲突的要求典型的存在于电池供电的MSP430x5xx系列单片机的 应用中:
较低的时钟频率可以实现 较低的时钟频率可以实现节省能源并保持计时 实现节省能源并保持计时
MCLK 可以被配置为片上 DCO 或由 FLL 稳定后的随意频率的时钟, 当要求中断驱动事件时将被激活。 灵活的时钟分配和分频系统调整频 率使之满足个别的时钟要求。 MCLK 可以选择 XT1CLK、 VLOCLK、 REFOCLK、 DCO 或 XT2CLK 中的任何一个有效的时钟。 SMCLK 可以根据外围的要求被配置为来源于晶振或片上 DCO。灵 活的时钟分配和分频系统调整频率使之满足个别的时钟要求。SMCLK 可以选择 XT1CLK、VLOCLK、REFOCLK,DCO 或 XT2CLK 中的任何一个有 效的时钟。
MSP430F5438A时钟UCS和串口UART配置程序例程
由于430芯片是最新使用的一款芯片,之前使用51单片机都不需要寄存器配置,而这款芯片都需要寄存器配置功能,所以刚开始比较无头绪,现在把一些配置分享给大家,加快开发进度,希望能帮助到大家!主板上使用的是20MHZ晶振,配置XT2晶振起震如下:P5SEL|=BIT2+BIT3;//P5.2和P5.3选择为晶振XT2输入UCSCTL6&=~XT2OFF;UCSCTL3|=SELREF_2;UCSCTL4|=SELA_2;do{UCSCTL7&=~(XT2OFFG+XT1LFOFFG+XT1HFOFFG+DCOFFG);SFRIFG1&=~OFIFG;//清除振荡器失效标志for(i=0xFF;i>0;i--);//延时,等待XT2起振}while(SFRIFG1&OFIFG);//判断XT2是否起振UCSCTL6&=~XT2DRIVE0;UCSCTL4|=SELS_5+SELM_5;//选择MCLK、SMCLK为XT2串口使用的是10.4和5,配置波特率9600如下UCA3CTL1|=UCSWRST;//复位UART状态机UCA3CTL1|=UCSSEL_3;//CLK=MCLKUCA3BR1=0x08;//UCA3BRX=2083UCA3BR0=0x23;//20MHz/9600=3.41UCA3MCTL=UCBRS_2+UCBRF_0;//UCBRSx=2,UCBRFx=0P10SEL|=BIT4+BIT5;//设置P10.45为串口UCA3CTL1&=~UCSWRST;//启动UARTUCA3IE|=UCTXIE;//数据发送中断使能//UCA3IE|=UCRXIE;//数据接收中断使能while(!(UCA3IFG&UCTXIFG));UCA3TXBUF=data[i];。
MSP430编程(一)—— 时钟配置
MSP430编程(一)——时钟配置geweilin 2010.03.13笔者认为这篇文章只适合msp430的初学者,如果你已经熟悉430编程,那么这篇文章对你的用途不大。
msp430的时钟非常灵活,这篇文章将以msp430x1xx为例主要介绍器件的基本时钟模块(Basic Clock Module,以下称:时基模块)及其配置方法(以下所述均是针对msp430x1xx系列,其它系列读者可以参考相应的User’s guide)。
(一) 时基模块简介msp430的时基模块支持低功耗和超低功耗。
使用3个内部时钟信号,用户可以在性能和低功耗之间找到最佳的平衡点。
这个时基模块可以被配置为不使用任何外部元件、使用一个电阻、使用一个或两个晶体振荡器或陶瓷振荡器,所有这些完全可有软件控制。
时基模块包括2个或3个时钟源:□ LFXT1CLK: 低频/高频振荡器,既可以使用低频的32768HZ的手表晶体,也可以使用450KHZ- 8MHZ的标准的晶体振荡器或者陶瓷振荡器。
□ XT2CLK: 可选的高频振荡器,可以使用标准的晶体振荡器或者陶瓷振荡器,也可以使用450KHZ- 8MHZ 的外部时钟源。
□ DCOCLK: 内部RC型数控振荡器。
可以从时基模块获得3个时钟信号:□ ACLK: 辅助时钟,ACLK由LFXT1CLK时钟源经过1、2、4或者8分频得到,他可由软件选择配置到某个特定的外设上。
□ MCLK: 系统主时钟,MCLK可由软件选择LFXT1CLK、XT2CLK(如果可用的话)、或者DCOCLK作为时钟源,经过1、2、4或者8分频后得到,它被用来供CPU和系统使用。
□ SMCLK: 系统子时钟,SMCLK可由软件选择LFXT1CLK、XT2CLK(如果有的话)、或者DCOCLK作为时钟源,经过1、2、4或者8分频后得到,他可由软件选择供某个外设使用。
时基模块的框图如图1所示:注意:对于msp430x11x和msp430x12xx系列的单片机没有XT2振荡器,而是由LFXT1CLK代替XT2CLK。
msp430时钟配置
近期要参加电子设计大赛,我们的微处理器选择了msp430(高性能不说,关键很多系列的芯片可到TI官网免费申请到),本人负责软件,之前并没有深入接触过msp430系列的单片机,但还稍稍有点51的底子,现将本人学习430的一点小心得与大家分享~********************************基于MSP430F169******************************在MSP430单片机中,一个时钟周期 = MCLK晶振的倒数。
如果MCLK是8MHz,则一个时钟周期为1/8us。
MSP430单片机的时钟模块主要包括:三个时钟:辅助时钟ACLK 、主时钟MCLK 、子系统时钟SMCLK三个振荡器:低频时钟源LFXT1 (一般外接32768HZ的手表晶振)、高频时钟源XT2(一般外接8MHZ晶振)、数字控制RC振荡器(系统默认是800KHZ)而MSP430单片机工作所需时钟就是由这些振荡器振荡后经处理产生的。
(1)ACLK:是LFXT1CLK信号经1/2/4/8分频后得到的,主要用作低速外围的时钟(2)MCLK:是LFXT1CLK,XT2CLK,DCOCLK的三者之一决定,由软件选择,然后经1/2/4/8分频后得到,主要用于CPU和系统(3)SMCLK:可由LFXT1CLK和DCOCLK,或者XT2CLK与DCOCLK决定,然后经1/2/4/8分频后得到,主要用于高速外围模块*************************************寄存器配置************************************MSP430的时钟模块由DCOCTL, BCSCTL1, BCSCTL2, IE1, IFG1这五个寄存器来确定,具体的功能如下所示:(1)DCOCTL: DCO控制寄存器,地址为56H,初始值为60H// 7 6 5 4 3 2 1 0// DCO2 DCO1 DCO0 MOD4 MOD3 MOD2 MOD1 MOD0//// DCO0~DCO2: DCO Select Bit,定义了8种频率之一,而频率由注入直流发生器的电流定义// MOD0~MOD4: Modulation Bit,频率的微调(2)BCSCTL1(ACLK): Basic Clock System Control 1,地址为58H,初始值为84H// 7 6 5 4 3 2 1 0// XT2OFF XTS DIVA1 DIVA0 XT5V RSEL2 RSEL1 RSEL0//// RSEL2~RSEL0: 选择某个内部电阻以决定标称频率(0最低,7最高)// XT5V: 1,该比特未用,必须选择复位// DIVA0~DIVA1: 选择ACLK的分频系数。
关于(单片机)msp430的时钟资料
关于(单⽚机)msp430的时钟资料msp430f5419/38学习笔记之时钟系统(2011-11-30 10:41:30)分类: msp430标签:msp430f541xmsp430f543xucs时钟系统注:msp5419/38中,如果你使⽤SMCLK做TIMER_A的时钟,那么进⼊低功耗3或低功耗4是不会把SMCLK关掉的,这点5系列和其他系列的不⼀样。
UCS模块是⼀个低成本超低功耗系统,通过选择使⽤3个内部时钟信号,⽤户可以得到性能和功耗的最佳平衡点。
UCS可以由软件配置其⼯作模式,如配置成:不需要任何外部器件、使⽤ 1或 2个外部晶振等。
⼀、时钟系统UCS模块具有5个时钟源:XT1CLK:低频/⾼频振荡器,既可以与低频 32768HZ钟振、标准晶振、外部振荡器,⼜可以与外部4M-32MHZ时钟源⼀起使⽤,XT1CLK可以作为FLL模块内部的参考时钟。
有些芯⽚XT1CLK只允许使⽤外部的低频晶振,具体可参考数据⼿册;XT2CLK:可选⾼频振荡器,可与标准晶振,振荡器或者 4MHZ~32MHZ外部时钟源⼀起使⽤;VLOCLK:内部低功耗、低频振荡器,频率典型值为10KHZ;REFOCLK:内部低频振荡器,典型值为 32768HZ,可作为 FLL基准时钟源;DCOCLK:可以通过 FLL来稳定的内部数字控制振荡器(DCO);DCOCLK经过 FLL分频后可得DCOCLKDIV。
UCS模块可以提供3种时钟信号:ACLK:辅时钟;MCLK:系统主时钟;SMCLK:⼦系统主时钟。
⼆、UCS操作PUC之后,UCS的默认配置模式如下:XT1CLK 选择LF模式下的XT1作为时钟源,ACLK 选择 XT1CLK 作为时钟源;MCLK 选择DCOCLKDIV作为时钟源;SMCLK 选择DCOCLKDIV作为时钟源;FLL操作使能,FLL基准时钟(FLLREFCLK)选择XT1CLK;XIN 和 XOUT作普通IO ⼝使⽤,禁⽌了 XT1 功能,直到 I/O ⼝重新配置为 XT1 模式;如果有 XT2IN 和XT2OUT,则⼀并配置为普通 IO ⼝,禁⽌ XT2 功能。
MSP5438A时钟模块总结(UCS)讲述
MSP430时钟模块总结最近开始学习MSP430,看过不少视频,读过许多文章,逛过各大论坛之后,以为自己懂得差不多了,等板子回来后便摩拳擦掌跃跃欲试。
先来个LED闪灯程序小试以下,OK没问题。
(我用的芯片是MSP430F5438A)然后开始调试先前写好的大程序,结果不尽如人意,没能通过,不过这很正常。
于是回头开始单步调试,仔细研究。
程序中好多是直接借用的TI官网的例程。
其中程序开始前的一句注释就让我困惑了很久,这句注释如下:MCLK = SMCLK = BRCLK = default DCO = ~1.045MHz都知道MSP430在时钟方面是灵活多变的,它的UCS模块有三个时钟信号(MCLK、SMCLK和ACLK)和五个时钟源(XT1CLK、VLOCLK、REFOCLK、DCOCLK和XT2CLK)。
PUC(上电清零)之后,UCS模块的默认配置如下:● XT1为LF模式,作为XT1CLK时钟源。
XT1CLK作为ACLK。
● DCOCLKDIV 作为MCLK● DCOCLKDIV 作为SMCLK● FLL模块使能。
XT1CLK作为FLL基准时钟FLLREFCLK。
● XIN 和XOUT管脚为普通IO 口,XT1仍然不能用直到I/O口配置为XT1模式。
● XT2IN 和XT2OUT脚作为普通IO 口,XT2禁止。
MCLK = SMCLK = BRCLK = default DCO = ~1.045MHz。
首先我不太清楚1.045MHz是怎么来的,后来在MSP430x5xx Family User's Guide中找到了相关解释。
在第56页有如下英文介绍:As shown above, FLL operation with XT1 is enabled by default. On MSP430x5xx devices, the crystalpins(XIN, XOUT) are shared with general-purpose I/O. To enable XT1, the PSEL bits associated with the crystal pins must be set. When a 32,768Hz crystal is used for XT1CLK, the fault controllogic will immediately cause ACLK to be sourced by the REFOCLK since XT1 will not be stable immediately. See Section 3.2.12 for further details. Once the crystal startup is obtained and settled, the FLL stabilizes MCLK and SMCLK to 1.048576MHz and f DCO=2.097152MHz.这段英文的前半部分正好解释了FLL和XT1上电后的默认状态。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MSP430F5438外接25M晶振。
void initClock(void)
{
// 初始化P7.0(#13)和P7.1(#14)为复用功能, XT1 外部时钟晶体接线
GPIO_setAsPeripheralModuleFunctionInputPin( GPIO_PORT_P7 , GPIO_PIN0 | GPIO_PIN1 );
// 启动XT1
//Initializes the XT1 crystal oscillator with no timeout
//In case of failure, code hangs here.
//For time-out instead of code hang use UCS_LFXT1StartWithTimeout()
UCS_LFXT1Start( UCS_XT1_DRIVE0 , UCS_XCAP_3);
// DCO参考时钟选择XT1,选择了默认参数
//UCS_clockSignalInit( UCS_FLLREF, UCS_XT1CLK_SELECT , UCS_CLOCK_DIVIDER_1 );
// 初始化P5.2(#89)和P5.3(#90)为复用功能, XT2 外部时钟晶体接线
GPIO_setAsPeripheralModuleFunctionInputPin( GPIO_PORT_P5 , GPIO_PIN2 | GPIO_PIN3 );
// 启动XT2
UCS_XT2Start( UCS_XT2DRIVE_24MHZ_32MHZ );
// DCO参考时钟选择XT1,选择了默认参数
//UCS_clockSignalInit( UCS_FLLREF, UCS_XT1CLK_SELECT , UCS_CLOCK_DIVIDER_1 );
// ACLK参考时钟源选择REFO, 32768Hz
//UCS_clockSignalInit(UCS_ACLK,
UCS_REFOCLK_SELECT,UCS_CLOCK_DIVIDER_1);
// DCO参考时钟源选择REFO,32768Hz
//UCS_clockSignalInit(UCS_FLLREF, UCS_REFOCLK_SELECT , UCS_CLOCK_DIVIDER_1);
// DCO时钟16MHz, used as MCLK and SMCLK frequency
// 该函数第1个参数为系统工作频率16384KHz/1024=16MHz,第2个参数为工作频率/DCO参考频率=16*1024*1024/32768=512
#define FRQ_DIV 1
//UCS_initFLLSettle(16384/FRQ_DIV , 512/FRQ_DIV);
//! Initializes the XT2 crystal oscillator, which supports crystal frequencies
//! between 4 MHz and 32 MHz, depending on the selected drive strength. Loops
//! until all oscillator fault flags are cleared, with no timeout. See the
//! device-specific data sheet for appropriate drive settings.
UCS_clockSignalInit(UCS_MCLK,UCS_XT2CLK_SELECT ,UCS_CLOCK_DIVID ER_1);
//SMCLK参考时钟源选择DCO,16MHz/4=4MHz,4*1024*1024=4194304Hz
//UCS_clockSignalInit(UCS_SMCLK,UCS_DCOCLK_SELECT,UCS_CLOCK_DIV IDER_4);
UCS_clockSignalInit(UCS_SMCLK,UCS_XT2CLK_SELECT,UCS_CLOCK_DIVI DER_4);
//延时0.5秒, 让时钟源稳定
delay_ms(500);
UCS_setExternalClockSource(32768,MCLK_FRQ);
cvMCLK = UCS_getMCLK();
cvSMCLK = UCS_getSMCLK();
cvACLK = UCS_getACLK();
}。