主题中讨论的其他器件:MSP430F5438A
我尝试使 MSP430F5438A 在没有任何振荡器的情况下以20MHz 运行、只使用 REFO 和 DCO。 我尝试按如下方式配置 DCO:
DCORSELx=4、DCOx=31、MODx=0 (对于12.3-28.2MHz 范围)(从数据表中的第5.20秒)
空 InitClock (空)
{
//统一时钟系统初始化
UCSCTL6 |= XT1OFF; //关闭 XT1
UCSCTL6 |= XT2OFF; //关闭 XT2
P11DIR |= 0x07; // ACLK、MCLK、SMCLK 设置为引脚
P11SEL |= 0x07; // P11.0、1、2用于调试。
UCSCTL3 = SELREF_2; //设置 DCO FLL 基准= REFO
UCSCTL4 = SELA_2 + SELM_4 + SELESS_3; //设置 ACLK = REFO
_bis_SR_register (SCG0); //禁用 FLL 控制循环
SetVcoreUp (PMMCOREV_3); //针对20MHz 时钟设置 VCORE = 1.85V
UCSCTL0 =(0x1000 + 0x0800 + 0x0400 + 0x0200 + 0x0100);//选择 DCOx = 31、MODx = 0
UCSCTL1 = DCORSEL_4; //选择 DCO 范围12.3 - 28.2MHz 运行
UCSCTL2 = 609; //将 DCO 乘法器设置为20MHz
_DELAY_CYCLES (625000);
//循环直到 XT1、XT2和 DCO 故障标志被清除
操作
{
UCSCTL7 &=~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);
//清除 XT2、XT1、DCO 故障标志
SFRIFG1 &=~OFIFG; //清除故障标志
} while (SFRIFG1&OFIFG); //测试振荡器故障标志
然而、无论 DCO 乘法器被设定为什么、输出频率最高可达18.5MHz 左右。 但是、我可以通过在550附近放置一个较小的乘法器来使它小于18 .5 MHz。 此外、OSC 故障标志永远不会清除、并且我永远不会从 DO while 循环结束
出于好奇、我更改了 UCSCTL1 = DCORSEL_7、并注释了 UCSCTL0 = DCO_31;以使其保持加电值。 然后 MCLK 以20MHz 的频率运行、但故障标志问题仍未解决。
是否有一个代码示例说明如何设置 MSP 以实现更快的速度、或者有人能不能建议我做了些什么?
工具:使用了 TI SDK (MSP-TS430PZ25x100)和具有 TI FET + IAR 编译器版本7.12.1的 MSP430F5438AEP。
