原创 【博客大赛】MSP430F5438单片机时钟设置实验程序(持续更新ing)

2013-8-17 19:36 4093 16 19 分类: MCU/ 嵌入式
//================================================================//
//                                                                                                                                                     //
// 文件:  MAIN.C                                                                                                                        //
// 说明:  MSP430F5438开发板单片机时钟设置实验程序                                                  //
//         设置单片机时钟为外部高频晶振或外部低频晶振+DCO,                                       //
//         并将辅助时钟、主时钟和子主时钟通过IO引脚输出,                                              //
//         可通过插针将信号引出并用示波器观察。                                                                  //
//                                                                                                                                                   //
//                      MSP430F5438                                                                                                  //
//                  -----------------                                                                                                          //
//              /|\|              XIN|-                                                                                                          //
//               | |                 | XTAL1 = 32.768k                                                                               //
//               --|RST          XOUT|-                                                                                                 //
//                 |                 |                                                                                                              //
//                 |            XT2IN|-                                                                                                       //
//                 |                 | XTAL2 = 16Mhz                                                                                  //
//                 |RST        XT2OUT|-                                                                                               //
//                 |                 |                                                                                                              //
//                 |            P11.0|-->ACLK                                                                                         //
//                 |            P11.1|-->MCLK                                                                                        //
//                 |            P11.2|-->SMCLK                                                                                     //
//                                                                                                                                                 //
// 编译:  CCS5.2                                                                                                                    //
// 日期:  2013.08.08                                                                                                              //
//                                                                                                                                                  //
//==============================================================//
 
#include "msp430x54x.h"
#include
#include
#include "PIN_DEF.H"
 
// 主时钟设置选项,可选择内部DCO或外部高频晶振二者之一
#define  INTERNAL_HF_OSC                                                     // 内部DCO时钟
//#define  EXTERNAL_HF_OSC                                                   // 外部高频时钟
 
#ifdef   INTERNAL_HF_OSC
#define  INTERNAL_HF_OSC
#endif
 
#ifdef   EXTERNAL_HF_OSC
#define  EXTERNAL_HF_OSC
#endif
 
 
#define  FLL_FACTOR     549                                                  // FLL_FACTOR: DCO倍频系数
 
 
//***************************************************************************//
//                                                                                                                             //
//                       初始化主时钟: MCLK = XT2                                                     //
//                                                                                                                            //
//***************************************************************************//
#ifdef   EXTERNAL_HF_OSC
void Init_CLK(void)
{
  WDTCTL     = WDTPW + WDTHOLD                                   ; // 关看门狗
  P5SEL     |= 0x0C                                                                   ; // 端口功能选择振荡器
  UCSCTL6   &= ~XT2OFF                                                     ; // 振荡器使能
  UCSCTL3   |= SELREF_2                                                    ; // FLLref = REFO
  UCSCTL4   |= SELA_2                                                          ; // ACLK=REFO,SMCLK=DCO,MCLK=DCO
  do
  {
    UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG)    ; // 清除 XT2,XT1,DCO 错误标志
    SFRIFG1 &= ~OFIFG                                                         ;
  }while(SFRIFG1&OFIFG)                                                    ; // 检测振荡器错误标志
  UCSCTL6   |= XT2DRIVE0 + XT2DRIVE1                        ; // XT2 驱动模式 24~32MHz
  UCSCTL4   |= SELS_5 + SELM_5                                    ; // SMCLK = MCLK = XT2
}
#endif
 
//***************************************************************************//
//                                                                                                                             //
//                 初始化主时钟: MCLK = XT1×(FLL_FACTOR+1)                         //
//                                                                                                                             //
//***************************************************************************//
#ifdef   INTERNAL_HF_OSC
void Init_CLK(void)
{
  WDTCTL     = WDTPW + WDTHOLD                                  ; // 关看门狗
  P7SEL     |= 0x03                                                                 ; // 端口选择外部低频晶振XT1
  UCSCTL6   &=~XT1OFF                                                      ; // 使能外部晶振
  UCSCTL6   |= XCAP_3                                                      ; // 设置内部负载电容
  UCSCTL3   |= SELREF_2                                                    ; // DCOref = REFO
  UCSCTL4   |= SELA_0                                                      ; // ACLK   = XT1
  __bis_SR_register(SCG0)                                                  ; // 关闭FLL控制回路
  UCSCTL0    = 0x0000                                                      ; // 设置DCOx, MODx
  UCSCTL1    = DCORSEL_7                                                ; // 设置DCO振荡范围
  UCSCTL2    = FLLD__1 + FLL_FACTOR                           ; // Fdco = ( FLL_FACTOR + 1)×FLLRef = (549 + 1) * 32768 = 18.0224MHz
  __bic_SR_register(SCG0)                                                  ; // 打开FLL控制回路
  __delay_cycles(1024000)                                                  ;
  do
  {
    UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG)                 ; // 清除 XT2,XT1,DCO 错误标志
    SFRIFG1 &= ~OFIFG                                                      ;
  }while(SFRIFG1&OFIFG)                                                    ; // 检测振荡器错误标志
}
#endif
 
 
//***************************************************************************//
//                                                                                                                             //
//                 主程序: 设置时钟并输出至P11.0~2                                               //
//                                                                                                                              //
//***************************************************************************//
 
int main( void )
{
 
  WDTCTL = WDTPW + WDTHOLD                                                 ; // 关闭看门狗
  Init_CLK()                                                                                           ;
  P11DS  = TACK + TMCK + TSMCK                                             ; // 选择驱动强度
  P11SEL = TACK + TMCK + TSMCK                                             ; // 选择引脚功能,ACK、MCK、SMCK输出至P11.0/1/2
  P11DIR = TACK + TMCK + TSMCK                                             ; // 设置引脚IO方向为输出
  MAIN_POWER_ON                                                            ; // 点亮VCC指示灯,指示时钟初始化成功,无其它意义
  while(1)                                                                                             ;
}
 
// end of file
 
 
 
 
 
PARTNER CONTENT

文章评论3条评论)

登录后参与讨论

用户377235 2015-9-22 19:13

UCSCTL0=0 的时候UCSCTL7 中DCOFFG 就清除不了,这是什么原因?有办法可以解决?

baohua.lv_497455161 2015-4-13 12:01

虚心接受你们的批评!

用户1689604 2015-4-8 08:55

学习了

用户465116 2015-4-7 10:21

作为工程师,严谨是必须的,至少不该有什么错别字。 但还是支持技术知识共享,再接再厉。

东莞元宝代理Microchip长电二三极管 2015-4-3 13:40

技术高手!佩服!

用户377235 2015-4-3 06:32

要是编辑是再稍微认真一点点,不要写错关键的几个字眼,就是一篇很有用的小技术短文,好遗憾。

用户1612016 2015-3-17 13:38

学习一下,谢谢,怎么就一个.h文件?

用户1772590 2014-7-21 16:59

学习学习!刚好这块挺迷糊的!
相关推荐阅读
chen_zs2012_704941858 2014-03-19 17:49
学习LabVIEW要记住的几句话
学习LabVIEW要记住的几句话1. LabVIEW是门程序设计语言,不是画图工具!2. 不要以为LabVIEW很简单,设计个庞大工程难度不亚于C++!3. 语言本身永远只是招式,请注意修炼内功:数据...
chen_zs2012_704941858 2014-01-24 23:46
【博客大赛】易络盟-飞思卡尔MCU大赛_KL25Z
【博客大赛】易络盟-飞思卡尔MCU大赛    Element14、Embest、Freescale三方联合推出的FRDM-KL...
chen_zs2012_704941858 2014-01-24 23:20
《深入理解Altera FPGA 应用设计》赠书已到,感谢EDNChina和coyoo博主
《深入理解Altera FPGA 应用设计》赠书已到,感谢EDNChina和coyoo博主         //深圳 ...
chen_zs2012_704941858 2014-01-20 20:08
【博客大赛】单片机软件抗干扰的几种常见方法
【博客大赛】单片机软件抗干扰的几种常见方法       在提高硬件系统抗干扰能力的同时,软件抗干扰以其设计灵活、节省硬件资源、可靠性好越来越受到重视。下面以MCS-51单片机系统为例,...
chen_zs2012_704941858 2014-01-19 21:19
【博客大赛】说说单片机、PSOC、FPGA之间的主要区别
【博客大赛】说说单片机、PSOC、FPGA之间的主要区别   现在的单片机一般是mcu+有限的固定的模拟或数字外围;FPGA是可编程数字外围电路;PSoC 相当于MCU+可编程模拟外围电路...
chen_zs2012_704941858 2014-01-19 16:13
你知道你的个人隐私在互联网上有多么的多不堪一击吗?
你知道你的个人隐私在互联网上有多么的多不堪一击吗?     //听着就恐怖,看着就可怕!我已经开始清理我在互联网的个人隐私了,你呢?   最近我废弃了两个加起来用了十几年的QQ...
EE直播间
更多
我要评论
3
16
关闭 站长推荐上一条 /3 下一条