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.
您好!
我采用了 CC4306147的 EVB 以及通过外部晶振32.768kHz + FLL 以2.45MHz 的频率运行 MCLK 的代码示例
我用示波器测量了 MCLK、我注意到抖动为10ns、我测量了 ACLK、32.768kHz 看起来非常好。
您是否看到代码有任何问题?
此抖动是否 正常?
我想以4.194MHz 的 MCLK 工作以用于 UART 目的(误差更小),我更改了代码中以蓝色标记的2条代码,并得到了具有抖动的4.194MHz 代码
还可以吗? 或者我需要更改代码中的更多值
谢谢 Hadi
请参阅以下代码:
#include
int main (空)
{
WDTCTL = WDTPW + WDTHOLD; //停止看门狗计时器
P1DIR |= BIT0; // P1.0输出
PMAPPWD = 0x02D52; //获取对端口映射寄存器的写入访问
P2MAP0 = PM_ACLK; //将 ACLK 输出映射到 P2.0
P2MAP2 = PM_MCLK; //将 MCLK 输出映射到 P2.2
PMAPPWD=0; //锁定端口映射寄存器
P2DIR |= BIT0 + BIT2; // ACLK、MCLK、SMCLK 设置为引脚
P2SEL |= BIT0 + BIT2; // P2.0、2用于调试。
//初始化 LFXT1
P5SEL |= 0x03; //选择 XT1
UCSCTL6 |= XCAP_3; //内部负载电容
//循环直到 XT1故障标志被清除
操作
{
UCSCTL7 &=~XT1LFOFFG; //清除 XT1故障标志
} while (UCSCTL7&XT1LFOFFG); //测试 XT1故障标志
//将 DCO 初始化为2.45MHz
_bis_SR_register (SCG0); //禁用 FLL 控制环路
UCSCTL0 = 0x0000; //设置可能的最低 DCOx、MODx
UCSCTL1 = DCORSEL_3; //将 RSELx 设置为 DCO = 4.9MHz
UCSCTL2 = FLLD_1 + 74; //将 DCO 乘法器设置为2.45MHz
// UCSCTL2 = FLLD_1 + 127; //将 DCO 乘法器设置为4.194MHz
//(N + 1)* FLLRef = Fdco
//(74 + 1)* 32768 = 2.45MHz
//设置 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 2.45MHz / 32、768Hz = 76563 = DCO 稳定的 MCLK 周期
_DELAY_CYCLES (76563);
//__delay_cycles (131072);
//循环直到 XT1、XT2和 DCO 故障标志被清除
操作
{
UCSCTL7 &=~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);
//清除 XT2、XT1、DCO 故障标志
SFRIFG1 &=~OFIFG; //清除故障标志
} while (SFRIFG1&OFIFG); //测试振荡器故障标志
while (1)
{
P1OUT ^= BIT0; //切换 P1.0
_DELAY_CYCLES (600000); //延迟
}
}
[引述 USER="Hadi Shvartz"]我用示波器测量了 MCLK、发现抖动为10ns、我测量了 ACLK、32.768kHz 看起来非常好。[/引述]
除非调制器关闭、否则预期 DCO 输出中会出现抖动。 调制器在 DCO 的两个离散频率之间切换、产生的平均频率由调制位计数器决定。 如果您需要干净的 MSP430时钟、则应使用 XT2高频晶体振荡器(在可用的芯片上)。