大家好、
我在配置时钟系统以使用外部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;
}有人可以提供帮助吗?
