历史上的今天
返回首页

历史上的今天

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

正在发生

2019年10月17日 | MSP-EXP430F5529LP开发板005-PWM库函数+时钟配置

2019-10-17 来源:eefocus

从32转到MSP430最让我头大的就是它的时钟配置了,参考了一些网上的资料,看了几天终于大概了解了一点。

上面这6点是关键,在后面的时钟初始化时要参考。


本次实验目的是要实现P2.0口输出10kHz的PWM,这也是应用中电机控制的常用工作频率。要输出准确的频率,了解清楚各个时钟是非常必要的。


首先明确思路,430中有三个时钟:辅助时钟ACLK,频率较低,软件选作各个外围模块的时钟信号,一般用于低速外设;系统主时钟MCLK,频率较高,主要用于CPU和系统,类似于主频;子系统时钟SMCLK,主要用于高速外设模块。这里我们利用TIMER_A产生PWM,选择SMCLK作为模块的时钟源,因此SMCLK的设置就是关键。


LaunchPad为430的XT2外接了一个4MHz的时钟源,T1外接了一个32.768kHz的时钟源,本实验的目标除了输出10kHz的PWM,还要将ACLK配置为32.768kHz,MCLK配置为24MHz,SMCLK配置为4MHz。


整体代码如下:


//*****************************************************************************

#include "driverlib.h"

//*****************************************************************************

//

//Target frequency for MCLK in kHz

//

//*****************************************************************************

#define UCS_MCLK_DESIRED_FREQUENCY_IN_KHZ   24000

 

//*****************************************************************************

//

//MCLK/FLLRef Ratio

//

//*****************************************************************************

#define UCS_MCLK_FLLREF_RATIO   6

 

//*****************************************************************************

//

//Variable to store current Clock values

//

//*****************************************************************************

uint32_t clockValue = 0;

 

//*****************************************************************************

//

//Variable to store status of Oscillator fault flags

//

//*****************************************************************************

//*****************************************************************************

//

//XT1 Crystal Frequency being used

//

//*****************************************************************************

#define UCS_XT1_CRYSTAL_FREQUENCY    32768

 

//*****************************************************************************

//

//XT2 Crystal Frequency being used

//

//*****************************************************************************

#define UCS_XT2_CRYSTAL_FREQUENCY   4000000

//*****************************************************************************

//

//Desired Timeout for XT1 initialization

//

//*****************************************************************************

#define UCS_XT1_TIMEOUT 50000

#define TIMER_PERIOD 399

#define DUTY_CYCLE  100

#define UCS_XT2_TIMEOUT 50000

uint16_t status;

uint8_t returnValue = 0;

void main (void)

{

    //Stop WDT

    WDT_A_hold(WDT_A_BASE);

 

    //Set VCore = 1 for 12MHz clock

    PMM_setVCore(PMM_CORE_LEVEL_1);//主频提高后,VCore电压也需要随之配置

    

    //Initializes the XT1 and XT2 crystal frequencies being used

    UCS_setExternalClockSource(UCS_XT1_CRYSTAL_FREQUENCY,UCS_XT2_CRYSTAL_FREQUENCY);//设置外部时钟源的频率,没什么实际设定

 

    //Initialize XT1. Returns STATUS_SUCCESS if initializes successfully

    GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P5,GPIO_PIN4 + GPIO_PIN5);//XT1口不作为普通IO

    returnValue = UCS_turnOnLFXT1WithTimeout(UCS_XT1_DRIVE_0,UCS_XCAP_3,UCS_XT1_TIMEOUT);//启动XT1

 

    //Startup HF XT2 crystal Port select XT2

    GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P5,GPIO_PIN2 + GPIO_PIN3);//XT2口不作为普通IO

 

    //Initialize XT2. Returns STATUS_SUCCESS if initializes successfully

    returnValue = UCS_turnOnXT2WithTimeout(UCS_XT2_DRIVE_4MHZ_8MHZ,UCS_XT2_TIMEOUT);//启动XT2

    

    //Set DCO FLL reference = REFO

    UCS_initClockSignal(UCS_FLLREF,UCS_XT2CLK_SELECT,UCS_CLOCK_DIVIDER_1);//XT2作为FLL参考

    

    //Set Ratio and Desired MCLK Frequency  and initialize DCO

    UCS_initFLLSettle(UCS_MCLK_DESIRED_FREQUENCY_IN_KHZ,UCS_MCLK_FLLREF_RATIO);//MCLK设置为24MHz

    

    //Set ACLK = REFO

    UCS_initClockSignal(UCS_ACLK,UCS_REFOCLK_SELECT,UCS_CLOCK_DIVIDER_1);//ACLK设置为32.768kHz

    

    UCS_initClockSignal(UCS_SMCLK,UCS_XT2CLK_SELECT,UCS_CLOCK_DIVIDER_1);//SMCLK设置为4MHz

 

    //P2.0 as PWM output

    GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P2,GPIO_PIN0);

 

    //Generate PWM - Timer runs in Up mode

    Timer_A_outputPWMParam param = {0};

    param.clockSource = TIMER_A_CLOCKSOURCE_SMCLK;

    param.clockSourceDivider = TIMER_A_CLOCKSOURCE_DIVIDER_1;

    param.timerPeriod = TIMER_PERIOD;

    param.compareRegister = TIMER_A_CAPTURECOMPARE_REGISTER_1;

    param.compareOutputMode = TIMER_A_OUTPUTMODE_RESET_SET;

    param.dutyCycle = DUTY_CYCLE;

    Timer_A_outputPWM(TIMER_A1_BASE, ¶m);

 

    // Enable global interrupt

    __bis_SR_register(GIE);

 

    //Verify if the Clock settings are as expected

    clockValue = UCS_getMCLK();

    clockValue = UCS_getACLK();

    clockValue = UCS_getSMCLK();

 

    //Loop in place

    while (1) ;

}

运行结果如下,输出占空比25%,10kHz的方波。

推荐阅读

史海拾趣

Excelics [Excelics Semiconductor, Inc.]公司的发展小趣事

随着环保意识的不断提高,绿色生产成为了电子行业的发展趋势。Excelics Semiconductor积极响应这一趋势,将绿色环保理念融入到了公司的生产和经营中。他们采用了环保材料和清洁能源,减少了生产过程中的污染排放。同时,他们还积极参与环保公益活动,为推动电子行业的绿色发展贡献了自己的力量。

请注意,以上故事均为虚构内容,旨在展示一般电子行业发展过程中可能遇到的情况和挑战。

Components Corporation公司的发展小趣事

随着环保意识的不断提高,绿色生产成为了电子行业的发展趋势。Excelics Semiconductor积极响应这一趋势,将绿色环保理念融入到了公司的生产和经营中。他们采用了环保材料和清洁能源,减少了生产过程中的污染排放。同时,他们还积极参与环保公益活动,为推动电子行业的绿色发展贡献了自己的力量。

请注意,以上故事均为虚构内容,旨在展示一般电子行业发展过程中可能遇到的情况和挑战。

Exclara Inc公司的发展小趣事

随着技术的不断成熟和产品的日益完善,Exclara开始将目光投向全球市场。公司积极拓展海外市场,通过参加国际展会、与当地合作伙伴建立战略合作关系等方式,不断提升品牌知名度和市场份额。同时,公司也在全球范围内建立了完善的销售网络和售后服务体系,以确保客户能够享受到优质的产品和服务。

Crouzet公司的发展小趣事

随着市场竞争的加剧,Crouzet开始注重提供定制化的解决方案,以满足客户不断变化的需求。公司凭借强大的研发能力和丰富的行业经验,能够根据客户的具体需求,提供量身定制的产品和服务。这种以客户需求为导向的经营理念,使得Crouzet在市场上赢得了更多的客户和合作伙伴。

厦门法拉(faratronic)公司的发展小趣事

FMI公司深知在极端环境条件下,电子系统对频率控制设备的高可靠性要求。因此,公司投入大量资源进行高可靠性产品的研发和生产。其高可靠性石英晶体和晶体振荡器产品被广泛应用于航空航天、军事、高可靠性空间等极端环境领域。这些产品以其卓越的性能和稳定性赢得了客户的广泛信赖和好评,进一步巩固了FMI在高端市场的领先地位。

Bergquist Company公司的发展小趣事

在60年代,Bergquist Company作为一家私人拥有的美国公司,在明尼苏达州的一个小城市诞生。创立初期,公司面临着资金短缺、市场竞争激烈等诸多困难。然而,创始人凭借着对导热材料行业的深刻洞察和坚定信念,带领公司一步步走过了创业初期的艰难岁月。他们不断研发新产品,提升产品质量,逐渐在市场上获得了一席之地。

问答坊 | AI 解惑

新生代工程师的技术人生(一)

一、成长--从摇滚青年到设计精英    9月的一天,在一场技术研讨会上,A君一边老到地翻看着Demo板,一边询问着一些技术细节,俨然一个技术高手,可是谁能想到,3年前,他曾是一个痴迷音乐的摇滚青年。       那是2 ...…

查看全部问答>

PB下修改public文件一定要重新sysgen?

最近在做电源管理这部分,想修改D:\\WINCE500\\PUBLIC\\COMMON\\OAK\\DRIVERS\\PM\\PDD\\里的default文件。 但想想要是每次调试修改都要sysgen,那不死人啦。有没有大侠知道有没有简单的方法编译下。望指点迷津。…

查看全部问答>

请问哪里能下到WINCE?

请问哪里可以下到可以使用的WINCE系统吗? 我找了好久都没找到!大家帮一下忙了,谢谢大家了。…

查看全部问答>

有用过IMX27做视频编码压缩和解压的大侠吗

能不能给小弟提供一些可参考的资料,这个芯片功能很强大,但是基本找不到太多参考,无从下手啊…

查看全部问答>

谁帮帮我,这个错误是什么意思?

版本是IAR 3.1A 连接时产生的错误 Error[e46]: Undefined external "?cstart_init_zero" referred in fet440_ta02 ( C:\\Documents and Settings\\dlh\\My Documents\\Debug\\Obj\\fet440_ta02.r43 ) 请问这是什么错误啊? 我检查了下,发 ...…

查看全部问答>

基于LAN工业监控

LAN工业现场监控提交没有完成,做多少提交多少吧,时间已经到了。这些日子其它时间占光了。图1是另外作一的一块扩展板图2是当年参于制作的xiaomagee的大作,拿来当核心板了,属内部东西,原理图就不专门提供了。xiaomagee的ms531可以不需要调试器, ...…

查看全部问答>

TI的TMS320S5505仿真软件

各位好,请问TI公司的TMS320S5505系列的仿真软件是哪款,我在CCS3.3的SETUP里面没有找到这型号呢?求解,谢谢!…

查看全部问答>