历史上的今天
今天是:2025年06月22日(星期日)
2021年06月22日 | MSP430F5438单片机时钟设置实验程序
2021-06-22 来源:eefocus
//================================================================//
// //
// 文件: 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
史海拾趣
|
汽车牌照识别是基于图像分割和图像识别理论,对含有汽车牌照的图像进行分析处理,从而确定汽车牌照在图像中的位置,并进一步提取和识别出文本字符。从不同车牌图像中分割出的字符图像各式各样,尺寸变化范围大,增加了识别的难度。尽管可以采用图像 ...… 查看全部问答> |
|
现在很多旧的电脑电源都浪费了,其实用于驱动LED灯比较好。 但是如果直接用限流电阻的话,效率较低。由于电脑电源是开关电源,它先把220V 交流电整流变换成频率较高的振荡,然后整流成5V、 12V等,可在5V 、12V的次级线圈上,整流管之前引出高频的 ...… 查看全部问答> |
|
我的开发板有做好的BSP包,我想屏蔽去掉一些驱动,写上自己的驱动,然后烧到板子里去,怎么做自己的镜像呢? 新手,求指教!!!! 我的驱动也写好了,屏蔽原有的驱动是不是直接删掉DRIVERS下的驱动文件就可以了呢???… 查看全部问答> |
|
大家好,请问这里有过英蓓公司 EDUKIT-III ARM 开发箱子吗?加我QQ 请教、交流,学习, 大家好,请问这里有过英蓓公司 EDUKIT-III ARM 开发箱子吗?加我QQ 请教、交流,学习,… 查看全部问答> |
|
我想用定时器b来做iar里面定时器a的演示程序功能。但是我把程序改好之后,一直不能正常运行,从右面的disassem××y窗口里面看不到数据。请问为何。程序那里有错?谢谢大侠!!! #include <msp430x14x.h> void main(void) { P1DIR |= 0x0 ...… 查看全部问答> |
|
我从来没有用过仿真器,真不会用。 iar环境加lanuchpad自带的仿真器。 哪位朋友可以举个小例子,一步一步查看变量的值吗? 或者,仿真器可以查到每个端口的状态吗? 有图文教程就好了,太笨了。… 查看全部问答> |




