This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] EK-TM4C123GXL:时钟初始化和配置

Guru**** 2350610 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/612787/ek-tm4c123gxl-clock-initialization-and-configuration

器件型号:EK-TM4C123GXL
主题中讨论的其他器件:TM4C123

我正在尝试将 Launchpad 配置为以80MHz 的频率运行。

我没有为此使用 TivaWare。

我将按照 231 5.3页的初始化和配置进行详细介绍
但我没有成功、因为时钟显然没有以80MHz 的频率运行。

这是我在 main 函数中做的第一件事。

也许有人可以发现错误! Thx。

void clockSetup(){
//运行模式时钟配置(RCC)复位值0x078E3AD1

//获取值
unsigned int RCC_I = sysctl->RCC;
unsigned int RCC2_i = sysctl->RCC2;
unsigned int MOSCCTL = sysctl->MOSCCTL;

SYSCTl->RCC = 0x078E3AD1U;//重置寄存器
unsigned int RCC_r = sysctl->RCC;//应读取0x078E3AD1U

SYSCTL->RCC &=~(0x01U <<11);// PLL 旁路(0x0使用 PLL)

//主振荡器禁用(MOSCDIS)
// 0启用(默认值),1禁用

SYSCTl->RCC |=(0x01U <<22);//启用系统时钟分频器
SYSCTl->RCC |=(0x15U <<6);//设置 XTAL 值16MHz

unsigned int RCC_c = sysctl->RCC;

//运行模式时钟配置2 (RCC2)复位值0x07C06810
SYSCTl->RCC2 = 0x07C06810;//复位寄存器

unsigned int RCC2_r = sysctl->RCC;

sysctl->RCC2 |=(0x01U <<31);//使用 RCC2
SYSCTL->RCC2 |=(0x01U <<30);//将 PLL 分频为400 MHz
sysctl->RCC2 &=~(0x01U <<13);//掉电 PLL (覆盖 RCC)
sysctl->RCC2 &=~(0x01U <<11);// PLL 旁路(覆盖 RCC)
SYSCTl->RCC2 &&μ~(0x07U << 4);//振荡器源(覆盖 RCC)选择主振荡器(MOSC)
SYSCTl->RCC2 |=(0x02U <<23);//系统时钟分频值 |
SYSCTL->RCC2 &=~(0x01U <<22);// SYSDIV2的附加 LSB | 80MHz

unsigned int RCC2_c = sysctl->RCC2;
unsigned int RCC_f = sysctl->RCC;
unsigned int RCC2_f = sysctl->RCC2;


//等待16ms 将被推迟到呼叫方

} 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Michele Gavazzeni"]我没有为此使用 TivaWare。

    米歇尔

    出于上述原因、您可能会因为对该帖子的批评而遭到轰炸。

    不要浪费宝贵的时间以错误的方式行事。 您不会从该练习中学到任何有用的内容、会让您的想法变得疲惫、并会增加代码的不必要复杂性。 只需为 TM4C123使用正确的 TivaWare 配置:

    SysCtlClockSet (SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHz | SYSCTL_OSC_MAIN);

    如果您更愿意坚持这条路由、那么请享受后果并亲自解决问题-因为 Tivaware 的其中一个用途是完全避免浪费 时间寻找寄存器配置错误或拼写错误!

    现在、如果您想了解不同的时钟配置(例如是否使用 PLL 以及其他)、这可能会很有趣-但仍然请坚持使用 Tivaware 驱动程序。 您可以始终查看 IDE 中的寄存器值以查看发生了什么情况!

    谢谢

    布鲁诺

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Bruno、

    谢谢你。 完全同意。 TivaWare 的存在为了避免这些问题、请利用它 Michele。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    虽然“不”轰炸——这是否可以成为布鲁诺和拉尔夫海报建议的第3次投票? 虽然“现在禁止”,但每位先生都有两种“喜欢”。

    有人声称通过直接注册进行"更深入的学习"。 然而-不可避免-这种"学习"仅限于" DRM 是一种时间和精力的饮食"、并且最常产生"不起作用!"

    如果必须、您可以通过供应商的(优秀) API、始终检查注册操作-已正确完成。

    (除了供应商的 Ralph:- Fire/I 早已注意到、MCU 手册"从不"提到 API -实际上其中的少数代码示例-是通过"drumberT"实现的(drumberT")。   我们可能不会像我们所相信的那样"无辜"-通过"阻止"任何/所有提到 API -在定义 MCU 文档中...   当然这不是你的工作-但它很好奇-也不有帮助-你不同意吗?)