工具/软件:Code Composer Studio
您好!
我使用的是 MSP430F6638 MCU、我想测试 ADC12。 我已经编写了一些代码来实现它、我的代码中有一个 ADC12_ISR。 我在 ISR 内部放置了一个断点、以了解代码是否在其中输入、这意味着转换已完成。 遗憾的是、程序永远不会进入 ADC12_ISR、因此我无法测试 ADC。 因此、我尝试找出问题所在、并首先检查为 ADC12CLK 提供源的 SMCLK 是否具有正确的频率。 MSP430F6638有一个引脚、此引脚可被配置为用作 SMCLK (引脚3.4)。 因此、我配置了该引脚、以便选择 SMLCK 功能并测试我是否具有正确的频率。 在我的设计中、我有两个外部晶体:一个用于 XT1的32、768 kHz 晶体和一个用于 XT2的8 MHz 晶体。 我已经配置了 UCSCTL4寄存器、所以 ACLK 来源于 XT1、SMCLK 来源于 XT2。 因此、在我执行代码后、我注意到我在 P3.4上根本没有8MHz 时钟信号。 下面是示波器上的结果图片。
MCU 有一个3.3V 电源、这里我只有1V 的振幅、绝对不是8MHz 的频率。 8MHz 晶体的数据表显示负载电容为18pF。 我使用了33pF 外部电容器、因为 http://www.ti.com/lit/an/slaa322d/slaa322d.pdf 的公式(3) 显示 Cload =(CL1 +寄生)/2 =(33pF + 2pF)/2 = 17.5pF、非常接近18pF。 我真的不理解这个结果。 以下是我的代码:
int main (空)
{
WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器
_BIS_SR (GIE);
UCSCTL4|=SELA_XT1CLK|SELESS_XT2CLK; //从 XT1获取 ACLK、从 XT2获取 SMCLK
UCSCTL6&=~XT2DRIVE_3; // 00b、范围为4到8MHz、因为 XT2上的外部晶振是8MHz
UCSCTL6|=XCAP_0; // 1pF 内部电容
UCSCTL6&=~XT2OFF; //打开 XT2
UCSCTL6&=~XT1OFF; //打开 XT1
P3SEL|= BIT4; //选择 P3.4的 SMCLK 函数
P3DIR|= BIT4; //配置为输出
}
此外、在程序中、如果在调试时有正确的值、我不会看到任何错误、主要是我在寄存器中检查了。 有人可以帮助吗? 我真的不知道是什么问题、如果有错误、我也不知道。
谢谢、
此致、
Mike