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.

[参考译文] TM4C123GH6PM:设置时钟时遇到问题

Guru**** 2456980 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/642577/tm4c123gh6pm-trouble-understanding-setting-clock

器件型号:TM4C123GH6PM

大家好、

这是我第一次在这些论坛上发帖、因此如果这是一篇糟糕的帖子、我很抱歉。 简而言之、我无法理解和为我的应用选择时钟速率。 我想使用计时器以44100hz (44.1kHz CD 音频速率)对 ADC 进行采样、并将其存储到 SD 卡中、然后再读取 DAC。 我在网上花了几个小时尝试找到解释、但我想、没有什么好的答案可以让我完全理解它。 我将使用 Keil v5并使用 driverlib。

例如、在我正在运行的代码中、有该命令

ROM_SysCtlClockSet (SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_16MHz); 

有一条评论说、这会直接从晶体运行时钟、但我不明白该代码是如何实现的? 当他们说晶体时、它们是否意味着主振荡器? 我希望拥有尽可能精确的计时、以确保保真度、并且我的音频频率保持稳定。

如果有人能告诉我使用带有/不带有"ROM_"前缀的命令之间的区别、则可以获得额外的好处。

谢谢!

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

    您好、Joseph、

    感谢您提供有关您尝试实现的目标的大量详细信息。 我将首先回答您的问题、然后回送、以提供有关如何获取所需 ADC 结果的建议。

    [引用用户="Joseph Sarni21"]

    有一条评论说、这会直接从晶体运行时钟、但我不明白该代码是如何实现的?

    [/报价]

    引用的代码是为整个器件设置系统时钟。 所有外设、包括 ADC、将基于系统时钟设置。 因此、您需要首先设置系统时钟、然后再处理外设时钟。

    [引用用户="Joseph Sarni21"]

    当他们说晶体时、它们是否意味着主振荡器? 我希望拥有尽可能精确的计时、以确保保真度、并且我的音频频率保持稳定。

    [/报价]

    是的、主晶体振荡器馈送到 TM4C。 这通常用于为系统时钟提供高精度、前提是正确选择晶体(用于容差等)并具有良好的布局。

    [引用用户="Joseph Sarni21"]

    如果有人能告诉我使用带有/不带有"ROM_"前缀的命令之间的区别、则可以获得额外的好处。

    [/报价]

    区别在于是否使用 TivaWare ROM API。 TM4C 器件在 ROM 中包含较早版本的 TivaWare、并且许多函数未更改、因此可以使用 ROM 版本来节省代码空间。

    不过、利用此功能的最佳方法是使用"map_"前缀、该前缀会自动处理是否可以使用 ROM API 或是否必须调用基于闪存的较新 API!

    好的、现在、进入 ADC!

    ADC 外设的设置方式是、没有特定的时钟被馈送到外设中以用于采样率。 相反、ADC 能够在其根据计时器触发采样的位置进行设置。 然后、定时器被配置为以一个特定的间隔中断、以允许 ADC 以特定的数据速率采样。

    作为这种情况的粗略示例、您可以参考此 E2E 帖子、其中包含一些计时器代码。 请阅读这些回复以及发布的原始代码中有一些您不想重复的错误!: e2e.ti.com/.../506504

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

    您好、Ralph、感谢您的帮助和帮助。

    在我发布这个帖子后、我成功地了解了更多有关这个命令以及时钟如何工作的信息-我通常只是对 XTAL 部分感到困惑。 例如、我最终得到了时钟进行响应、并在调试器中为我返回一个值、我可以对其进行分析。 当我从主示波器驱动它时、为什么需要 XTAL? 不是内部振荡器、而是外部振荡器? 我想、由于 XTAL 代表外部、它将参考一个尚未在电路板上的振荡器。 例如、我正在运行的代码是

    SysCtlClockSet (SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHz); 

    这使用主振荡器来驱动 PLL、然后将 PLL 值分频以使时钟以80MHz 运行、我的整个系统将从此时钟运行、对吧?
    我使用这行代码、但更改了周围的 XTAL 值、它为我提供了不同的 LED 闪烁速率(从计时器闪烁)。 我使用了 XTAL 4Mhz 和 XTAL 25MHz、因为这是我唯一能够获得响应的2个。 当我将 XTAL 设置为25MHz 时、LED 的闪烁速度明显变慢、而当我将其设置为4MHz 时、LED 的闪烁速度明显更快。 我认为这是因为我之前说过、在这里、这个命令告诉 PLL 驱动它的频率是 osc。 由于我使用的是主振荡器、我应该将其设置为16MHz。但是、如果我使用的是另一个外部振荡器(比如、一个不在电路板上的振荡器)、我将使用 XTAL 值中的相应频率。

    2.感谢 ROM_的澄清、我在网上找不到太多关于它的信息! 我一定会尝试使用 MAP_前缀。

    3、ADC 帖子太棒了、感谢您链接、我在搜索中找不到它。 我担心 ADC 采样的 FIFO、但它不会实际记录采样、除非被触发。

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

    [引用 user="Joseph Sarni21"]从主示波器驱动 XTAL 时、为什么需要 XTAL? 不是内部振荡器、而是外部振荡器?[/quot]

    否、这就是 PIOSC (精确内部振荡器)

    [引用用户="Joseph Sarni21"]我认为,由于 XTAL 代表外部,[/quot]

    XTAL 是晶振的缩写

    [引用用户="Joseph Sarni21"]我使用这行代码、但更改了周围的 XTAL 值、它为我提供了不同的 LED 闪烁速率(从计时器闪烁)。 我使用了 XTAL 4Mhz 和 XTAL 25MHz、因为这是我唯一能够获得响应的2个。[/QUERPLET]

    该值必须与您正在使用的实际晶体相匹配。

    Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    那么、如果我想使用 PIOSC、我不需要 XTAL 语句、对吧?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    正确、但您需要包含 PIOSC 的相应定义。 请记住、与外部晶体相比、PIOSC 的精度和稳定性更低。

    我认为您仍然可以使用 PIOSC 和 PLL、但您需要检查文档。

    Robert