This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] msp430F5418A:时钟和定时器初始化

Guru**** 2561130 points
Other Parts Discussed in Thread: MSP430F5418A

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/602568/msp430f5418a-clock-and-timer-init

器件型号:MSP430F5418A

大家好、

我一直在编写一些 MSP430代码来编写一些代码来初始化时钟和计时器。 我使用的是 MSP430F5418A。

这是我的时钟代码片段。 在这里、我已经设置了 FLLD 位、以便 DCOCLKDIV = DCOCLK/2。 默认情况下、SMCLK = DCOCLKDIV、因为我根本不更改它。

void clock_init()

WDTCTL = WDTPW+WDTHOLD;//停止 WDT
SetVcoreUp (PMMCOREV_3);//针对25MHz 时钟设置 VCORE = 1.9V
P1DIR |= BIT0;// P1.0输出
P11DIR |= 0x07;// ACLK、MCLK、SMCLK 设置为引脚
P11SEL |= 0x07;// P11.0、1、2用于调试。

UCSCTL3 |= SELREF_2;//设置 DCO FLL 基准= REFO
UCSCTL4 |= SELA_2;//设置 ACLK = REFO

_bis_SR_register (SCG0);//禁用 FLL 控制循环
UCSCTL0 = 0x0000;//设置可能的最低 DCOx、MODx
UCSCTL1 = DCORSEL_6;//选择 DCO 范围24MHz 运行

//***** 对于 dcoclockdiv = dcoclock/2*****、FLLD_1 //

UCSCTL2 = FLLD_1 + 731;//将 DCO 乘法器设置为24MHz
//(N + 1)* FLLRef = Fdco
//(731 + 1)* 32768 = 24MHz
//设置 FLL Div = fDCOCLK/2
_BIC_SR_register (SCG0);//启用 FLL 控制环路

// DCO 范围位已经存在时、DCO 的最坏情况稳定时间
//已更改 n x 32 x 32 x f_MCLK / f_FLL_reference。 请参阅5xx 中的 UCS 一章
// UG 进行优化。
// 32 x 32 x 25 MHz/32、768Hz = 819200 = DCO 稳定的 MCLK 周期。 我们再增加一些时间
_DELAY_CYCLES (50000);
_DELAY_CYCLES (50000);

//循环直到 XT1、XT2和 DCO 故障标志被清除
操作

UCSCTL7 &=~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);
//清除 XT2、XT1、DCO 故障标志
SFRIFG1 &=~OFIFG;//清除故障标志
} while (SFRIFG1&OFIFG);//测试振荡器故障标志

现在、在计时器初始化中、我已经进行了如下设置。 计时器模块的时钟由 SMCLK 通过设置 TASSEL 位来提供。 那么、计时器时钟应该是 DCOCLKDIV = DCOCLK/2、对吧?  

void timer_init()

///---------------- 计时器 A1 ------------------------------------------------------- //
TA1CCTL0 = CCIE;// CCR0中断被启用//这设置全局定时器中断
TA1CCR0 = 766;// PWM 周期(~32us)//31khz 间隔
TA1CCTL1 = OUTMOD_7;//reset/set
TA1CCTL2 = OUTMOD_7;//reset/set
TA1CCR1 = 0;//TA1.1
TA1CCR2 = 0;//TA1.2
TA1CTL = tassel_2 + MC_1 + TACLR;// SMCLK、upmode、clear TAR

但是、由于我的计时器中断会相应地触发、因此看起来我会得到计时器 clk = DCOCLK = 2 * DCOCLKDIV。 我缺少什么?

提前感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    DCOCLK 和 DCOCLKDIV 的运行方式与用户指南的第5.2.6节中描述的一样。 FLLN 和 FLLD 乘法器都是反馈环路的一部分。

    您已将 DCO 配置为48MHz。