历史上的今天
返回首页

历史上的今天

今天是:2024年10月24日(星期四)

正在发生

2019年10月24日 | 【MSP430】MSP430深入研究 之 时钟

2019-10-24 来源:eefocus

    MSP430即MSP430单片机,MSP430系列单片机是美国德州仪器(TI)1996年开始推向市场的一种16位超低功耗、具有精简指令集(RISC)的混合信号处理器(Mixed Signal Processor)。

    称之为混合信号处理器,是由于其针对实际应用需求,将多个不同功能的模拟电路、数字电路模块和微处理器集成在一个芯片上,以提供“单片机”解决方案。该系列单片机多应用于需要电池供电的便携式仪器仪表中。


——摘自百度百科


    MSP430说起使用的时间,也有1年半了,之前都是看着别人的代码,看看datasheet的研究的很肤浅。现在有点时间,就花一段时间来把msp430重新研究下!这次会设计到msp430的每个模块的每个寄存器!今天就先从时钟开始!毕竟你想让MCU运行起来嘛!

figure1. system clock


首先明确一点,让MCU运转的是MCLK(Main System Clock),从figure1上可以看出有三路,一路来自于XT1,另一路来自XT2,第三路来自DCOCLK,至于具体选哪路,我们就要配置BCSCTL2(Basic Clock System Control)

figure 2. Register of BCSCTL2(Basic Clock System Control )


如果你现在还在疑问有些书上说的默认MCLK = 1M,原因是默认选择的是DCOCLK,DCOCLK是msp430内部集成的数控晶振,默认为1M,最高可以配置成10M,这个我们后面再说!我们通常选择的是XT2高速时钟,稳定期间如果是msp430f14x的话,建议选择的时候再450K~8M直接,这属于稳定的范围!


所以我们的配置如下:BCSCTL2 |= SELM1;


这时候只是配置了主时钟(MCLK),但是我们经常在外设中要用到SMCLK,或者是ACLK;


ACLK的时钟源为XT1,一般都是接的32768Hz的晶振,我们也可以对他进行1/2/4/8分频;


SMCLK有两个时钟源,一个是DCOCLK,另一个是XT2,至于具体想选哪个那就看你自己了,具体配置在BCSCTL2,默认是选择DCOCLK;


使用DCOCLK缺点是不是很稳定,优点是输出频率可调,当我们在用到可变频率的时候我们就可以使用DCOCLK!


选择XT2就这样配置:BCSCTL2 |= SELS;//默认为8M的输出,当然我们也可以进行1/2/4/8分频;




DCOCLK研究


DCOCTL是一个8位的DCO控制寄存器。该寄存器的位分配图如figure3。


figure 3. Register of DCOCTL(Digital Colck Output Control)


其中DCOx选择内部DCO产生的8中频率之一,可分段条件DCOCLK频率,相邻两个频率相差10%,而频率由注入直流发生器的电流定义。


MODx定义32个DCO周期中插入的频率等于Fdco+1周期的个数。如果DCO常数为7,表示已经选择最高频率,此时不能利用MODx进行频率调整。

figure 4. DCOx & RSELx for frequency


实例代码:

#include

 

void init_sysclk()

{

    unsigned char i = 0;

    

    // XT2 默认是关闭的,为了方便多次修改时钟

    // 这里我们把他加上

    BCSCTL1 &= ~XT2OFF;

    

    // MCLK 默认是选择 DCOCLK

    // 所以我们要选择 XT2

    BCSCTL2 |= SELM1;

    // SMCLK 默认也是选择 DCOCLK

    // 这里我也让他以 XT2 为时钟源

    BCSCTL2 |= SELS;

    // 这样,SMCLK,MCLK的时钟的输出都是8MHz了

    do{

        // 清除时钟震荡错误标志

        // 由于修改了MCLK的时钟源

        // 需要等待输出时钟与XT2同步

        IFG1 &= ~OFIFG;

        // 延时一下

        for(i=0; i<100; i++)

          _NOP();

    }while((IFG1 & OFIFG) != 0);

    // 当晶振出错标志位为0,则说明已经矫正完成

    // 可以正常工作了

    

    IFG1 &= ~OFIFG;

}

 

#define SMCLK_DIV1   0x00

#define SMCLK_DIV2   0x02

#define SMCLK_DIV4   0x04

#define SMCLK_DIV8   0x06

#define MCLK_DIV1  0x00

#define MCLK_DIV2  0x10

#define MCLK_DIV4  0x20

#define MCLK_DIV8  0x30

void mclk_div(unsigned char div)

{

    // 设置分频

    BCSCTL2 |= div;

    // 重新初始化一下

    init_sysclk();

}

void smclk_div(unsigned char div)

{

    // 设置分频

    BCSCTL2 |= div;

    // 重新初始化一下

    init_sysclk();

}

推荐阅读

史海拾趣

巴丁微公司的发展小趣事

随着技术的不断进步和市场的不断变化,巴丁微始终保持着敏锐的市场洞察力。公司不断推出新产品,以满足不同领域的需求。其中,巴丁微的电机驱动控制、霍尔传感器等产品因其高性能、高品质而受到了广泛好评。

同时,巴丁微也积极拓展市场,与多家知名企业建立了合作关系。公司的产品不仅在国内市场占据了一席之地,还逐渐打开了国际市场的大门。通过不断的创新和市场拓展,巴丁微在电子行业的地位日益稳固。

HALO Electronics公司的发展小趣事

深圳市巴丁微电子有限公司,简称巴丁微,自创立之初便专注于高性能模拟集成电路的研发与销售。公司的创始人及核心团队由一群在集成电路行业拥有丰富经验的专家组成,他们看中了电子行业的巨大潜力,决心以技术创新为驱动力,推动模拟集成电路的发展。

在创立初期,巴丁微面临着资金短缺、市场竞争激烈等诸多挑战。然而,凭借着对技术的深刻理解和不懈追求,巴丁微成功研发出了一系列具有竞争力的产品,并逐渐在电机驱动和电源管理等电子领域获得了市场认可。

杰力(EMC)公司的发展小趣事

为了确保产品质量和客户满意度,杰力建立了一套完善的质量管理体系。公司从原材料采购、生产制造到产品检测等各个环节都实行严格的质量控制和管理。同时,杰力还引进了先进的检测设备和技术手段,对产品质量进行全面检测和评估。这些措施使得杰力的产品在质量上得到了有效保障,并赢得了客户的信赖和好评。

Discrete Semiconductor Industries公司的发展小趣事

“创新动力”是Discrete Semiconductor Industries公司中一家以创新驱动发展的典范。该公司注重研发投入,积极引进和培养科技人才,建立了完善的研发体系。通过不断的技术创新和产品升级,创新动力不断推出具有市场竞争力的新产品。同时,公司还积极探索新的应用领域和市场机会,不断拓展业务范围。这种创新驱动的发展战略使得创新动力在激烈的市场竞争中保持了强劲的发展势头。

EMI Filter Company公司的发展小趣事

Panasonic作为电子行业的巨头,对EMI滤波器市场也早有布局。他们采取的是多元化的产品战略,针对不同行业和应用场景,推出了多种类型的EMI滤波器。无论是用于消费电子产品的片式滤波器,还是用于工业设备的大功率滤波器,Panasonic都能提供高质量的产品。这种多元化的产品战略,使得Panasonic在EMI滤波器市场上占据了重要的地位。他们的产品广泛应用于家电、汽车电子、工业自动化等领域,为全球电子行业的发展做出了重要贡献。

eLED.com Corp公司的发展小趣事

eLED.com Corp是一家专注于LED(发光二极管)领域的电子公司,成立于XX世纪初。公司创始人XX先生,在半导体行业拥有多年的研发经验,他看到LED技术在照明和显示领域的巨大潜力,于是决定创立eLED.com Corp。公司初期主要致力于LED产品的研发和生产,凭借其高效率和长寿命的特点,逐渐在市场上获得认可。

为了进一步提升产品质量和技术水平,eLED.com Corp不断投入研发资金,引入先进的生产设备和技术人才。通过与高校和研究机构的合作,公司成功开发出一系列具有自主知识产权的LED产品,逐渐在行业中树立了良好的口碑。

问答坊 | AI 解惑

这样的WinCE平台的项目,怎么编译?

请问: 假设建立一个WinCE平台的项目,当我完成该WinCE项目后,怎么使得该项目编译成一个可以在WinCE环境下运行的程序?(C#实现一个简单的Form界面实例,有一个Button和一个TextBox,触发Button事件,TextBox.Text=“Hello world”生成一个exe文 ...…

查看全部问答>

请教一个问题:在vxworks中得到主板CPU等关键芯片的温度,电压信息呢?

如题: 现在不知道如何能够得到这些信息,目前在windows下已经实现了,但是是在有驱动支持的情况下完成的 请各位帮忙看看怎么解决好呢?…

查看全部问答>

希望有机会尝试尝试3517上的powervr SGX的威力

这个图形加速器的驱动TI给出了现成的module,基于Linux的 里边基本全了,module源文件,app-test,看看README就都明白啦 还没尝试过POWERVR的杀伤力到底有多强 不知道SEED提供的底板是否有LCD,如果有就基本完美啦,否则还得自己想办法弄L ...…

查看全部问答>

stm32串口1,2,3,4为什么1,2可以,3,4就不行啊。

USART_InitStructure.USART_BaudRate = 115200;     USART_InitStructure.USART_WordLength = USART_WordLength_8b;     USART_InitStructure.USART_StopBits = USART_StopBits_1;     USART_InitStructure. ...…

查看全部问答>

求教高手版主3个UART不够,用TIMER模拟115200bps可靠否?

                                 最多可能要用到5-6个,不知道用定时器来做3个115200bps的收发怎么样?主要是稳定性可靠性。…

查看全部问答>

大家帮我找个lwip中的文件。

文件名应该是sio.c,移植的时候在src/include/lwip下面有个sio.h文件,里面有一些sio_read,sio_write等声明函数。我想找到函数的实体部分,找了N久还是找不到。害的我程序老是编译不通过。…

查看全部问答>

跪求ICETEK-2812-B板资料

如题,哪位大神用过这个板子,有原理图、程序之类的资料吗?…

查看全部问答>

新手求教

新手求教,我的 xilinx platform cable USB 插电脑上,无法识别,我下载了一个ug344驱动,安装时总是出错,我用的是9.1的ise和10.impact,求教各位大神指导呀.... …

查看全部问答>