大家好、
我在配置时钟系统以使用外部8MHz 晶体时遇到问题。 我使用的是64VQFN 芯片变体(MSP430FR5043IRGCT)。
晶体振荡器似乎工作正常、当使用示波器进行测量时、我从 HFXIN 引脚上的晶体获得一个干净的8MHz 正弦波。
但是、当我将引脚 P3.3设置为输出 MCLK 时、我会得到频率为4.75MHz 的方波(P3.4和输出 SMCLK 相同)。
我已将 CS 配置为使用 HFXT 作为 MCLK 和 SMCLK 的源、分频器为1、最大驱动强度。 我使用的旁路电容器各为14pF。
即使我只配置 CS 模块、不使用任何其他外设、MCLK/SMCLK 也是在4.75 MHz。
下面是我用于测试 CS 模块的代码:
#include <msp430.h> #include <stdint.h> /** * main.c */ int main(void) { uint16_t i = 0; // Variable for counting down in fault flag clearing loop... WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer PM5CTL0 &= ~(uint16_t)LOCKLPM5; // unlock port pins // initialize external 8 MHz crystal PJSEL0 |= (1 << 6); // configure PJ.6 / PJ.7 to be used as HFXTIN/ HFXTOUT PJSEL1 &= ~(1 << 6); CSCTL0_H = 0xA5U; // Write key to key register, unlock CS module registers CSCTL1 &= (uint16_t)0x0000U; // clear register, we don't need the DCO CSCTL2 = (uint16_t)0x0155U; // Clock sources: ACLK = VLOCLK, SMCLK = HFXT, MCLK = HFXT CSCTL3 = (uint16_t)0x0000U; // All clock dividers = 1 CSCTL4 = (uint16_t)0xC401U; // Max drive strength, no bypass, HFXT always on, HFFREQ > 4...8MHz, LFXT unconfigured / off, SMCLK on CSCTL5 = (uint16_t)0x00C0U; // Enable startup fault counters, clear HFXT/LFXT fault flags CSCTL6 = (uint16_t)0x000FU; do{ // Wait until HFXT fault flag is cleared. CSCTL5 &= ~((1 << 1) | 1); for(i = 0x1FFF; i > 0; i--); } while(CSCTL5 & HFXTOFFG); CSCTL0_H = 0xFF; // Write non-PW value to PW register => lock CS module registers // Configure P3.3 / P3.4 to output MCLK / SMCLK P3DIR |= (BIT3 | BIT4); P3SEL1 &= ~(BIT3 | BIT4); P3SEL0 |= (BIT3 | BIT4); // Do nothing... while(1) { } return 0; }
有人可以提供帮助吗?