c - FRDM-KL46Z 内部引用时钟为 48 MHz?

标签 c embedded arm clock

我正在为 FRDM-KL46Z 平台开发 IAR 编译器。 我想使用内部时钟并将其设置为 48 MHz(或尽可能最大值)。 到目前为止,我已经在提供的示例 sysinit.c 文件和函数 sysinit() 中完成了以下步骤。

#define NO_PLL_INIT

#if defined(NO_PLL_INIT)
mcg_clk_hz = 48000000;     // It only works on 21000000 Hz, otherwise I get garbage prints on UART0.
SIM_SOPT2 &= ~SIM_SOPT_PLLFLLSEL_MASK
uart0_clk_khz = (mcg_clk_hz) / 1000;
#else
....

在 FEI 模式下,如果我使用 FBI 模式或 BLPI 模式,我获得的 MCU 时钟会非常少。 我希望 MCU clk 在内部时钟中尽可能高。 (根据数据表我认为它是支持的,但我不知道如何?)

任何人都可以解释一下或任何代码引用,非常感谢。

最佳答案

通过这样做修复了它

#define NO_PLL_INIT

#if defined(NO_PLL_INIT)

MCG_C4 |= (MCG_C4_DRST_DRS(1) | MCG_C4_DMX32_MASK);
mcg_clk_hz = 48000000;

SIM_SOPT2 &= ~SIM_SOPT_PLLFLLSEL_MASK
uart0_clk_khz = (mcg_clk_hz) / 1000;

#else
....

关于c - FRDM-KL46Z 内部引用时钟为 48 MHz?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24260806/

相关文章:

c - 获取密码的隐窝是添加一些奇怪的 foobar 东西,所以它不等于

c - 合并 C Dll 的最简单方法。有来源

c++ - C/C++ 链接器 CALL16 reloc at xxxxx not against global symbol

linux - 如何在 Linux 中获取进程保存的寄存器(ARM 架构)

c - ARM 检测中断何时占用过多 CPU 时间

c++ - 如何使用变量作为其大小来声明 char 数组?

c - RLIMIT_STACK 包含环境变量和命令行参数或独占

c++ - 超出芯片组允许的最大数据类型。 C++

c - 为什么引导加载程序是在汇编中?

assembly - 磁盘 IO 操作在内核级程序集中通常如何看待?