工具/软件:
大家好!
我见过这方面的几个线程、但它们都回到了"读取 TI 示例代码"、然后静默...
简而言之、我有一个 MSP430FR5969、其16MHz 晶体(非振荡器)连接到 HFXT 引脚。 启用 HFXT 时、我总是最终 从 MODCLK (~4.8MHz)运行 SMCLK 和 MCLK、并且 HFXTOFFG 永久设置为1 (不能清除)。
代码:
PJSEL0 |= BIT4 | BIT5 | BIT6 | BIT7; // For XT1 and XT2
// Disable the GPIO power-on default high-impedance mode to activate
// previously configured port settings
PM5CTL0 &= ~LOCKLPM5;
CSCTL0_H = CSKEY >> 8; // Unlock CS registers
CSCTL1 = DCORSEL | DCOFSEL_4; // Set DCO to 8MHz
CSCTL2 = SELA__VLOCLK | SELS__HFXTCLK | SELM__HFXTCLK;
CSCTL3 = DIVA__1 | DIVS__1 | DIVM__1; // Set all dividers to 1
CSCTL4 = HFXTDRIVE_3 | HFFREQ_2;
CSCTL4 &= ~(HFXTOFF);
CSCTL5 &= ~ENSTFCNT1;
do
{
CSCTL5 &= ~(LFXTOFFG | HFXTOFFG); // Clear XT1 and XT2 fault flag
SFRIFG1 &= ~OFIFG;
}while (SFRIFG1&OFIFG); // Test oscillator fault flag
CSCTL0_H = 0; // Lock CS registers
与 TI 示例(msp430fr69xx_cs_04.c)相比、我的更改如下:
第8行-将 DCO 更改为16MHz。 这样可以正常工作、如果我从 DCO 运行所有内容、则没有问题。
第9行-选择了 HFXTCLK 而不是 DCOCLK 来驱动 MCLK、并在 HFXT 不可用时回退到 DCOCLK。 为 ACLK 选择了 VCOCLK、因为我没有 LFXT。
第11行-根据需要删除了 LFXTDRIVE 设置。 添加了 HFFREQ 设置、TI 的示例似乎完全跳过该 设置(使用8MHz 晶体将其设置在16 - 24MHz 范围内、这根本不应该工作)。
第12行-仅强制 HFXT 进入常开模式、因为未安装 LFXT。
第13行-禁用 LFXT 启动计数器、因为没有 LFXT。
这些似乎都是相当明智的改变。 由于 LFXT 不存在、因此几乎所有这些都是必需的。
运行此代码只是会导致 SMCLK 和 MCLK 在~4.8MHz 下运行、并且 结束时的循环(等待故障标志清除)永远不会完成。
有什么想法吗? 我很难责怪硬件,这是永远可能的,但其他人似乎已经发布了类似的问题,然后找到了一个解决办法(或至少沉默).
提前感谢!