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:"sysctl"和"->"在一个诸如 sysctl->RCC =(sysctl->RCC &0xF83FFFFF)的语句中的起源| 0x800;

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/589681/tm4c123gh6pm-what-is-the-origin-of-sysctl-and---in-a-statement-like-sysctl--rcc-sysctl--rcc-0xf83fffff-0x800

器件型号:TM4C123GH6PM

我一直在寻找答案、但找不到答案。

"sysctl"来自哪里。 它不在数据表中、因此我猜它是在头文件中创建的、或者是在头文件中创建的。

语句中"->""的含义是什么。

我知道 RCC 寄存器、但不知道 SYSCTl->来自哪里。

我敢打赌、一旦有人向我展示了光、它就会变得很简单。

Keith、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Keith、
    也许您可以让我们知道您从哪里获得该信息? 哪个库或示例? 我没有在我的任何代码中定义普通 sysctl。。。
    通常、在 C 语言中、所有这些 CAP 项都是宏。 如果您使用的是 CCS、请按住 CTRL 并单击该条目、CCS 将打开另一个选项卡、其中包含定义此类宏的文件。
    当您引用声明结构内的元素、但在将变量用作指针的函数内时、->在 C 中使用(否则、您将使用该点、而不是->)。 我甚至不能用一个合适的句子来解释它、您可能会在 C 教程中找到更详细的解释。
    此致
    布鲁诺
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请允许我提供一个观察-然后提出建议-旨在"快速、轻松和增强"您的 MCU"学习"(第一)-随后您的掌握。

    现在您已经两次了解(相对)次要和/或模糊的 MCU 详细信息。   (位带提前到达)

    通过询问"每一个/每一个"(对您来说是新的)细节、您的理解是否会支离破碎、延迟和效率低下?   (这是我的小公司、相当成功的技术公司和其他人的信念)

    或许另一种方法(更自然地)可以更好地回答许多这样的"MCU 详细信息")?   综合阅读 MCU 手册、"外设驱动程序用户指南"和(许多)供应商提供的代码示例(找到@"外设/示例") -所有"开放和随时可用"-当您运行供应商提供的代码示例时-到目前为止已证明-最顶尖的学习工具@我的公司!  (及其他)

    您可能会"太早"注意到 MCU 的"相对重要性"。   如果(而是)对该供应商的努力(他们最熟练、对您的成功感兴趣)(基本上基于 MCU 外设)"进行"分类"、并通过"示例"代码条目-代码流-和代码执行寻求您的积极参与、这是否会更有效?   这个供应商的 API 是广泛、详细的、极具"尝试/真实/测试"性的、并且"新/奇怪"概念或描述的"发生"往往会被注意和解释。  (即此类"新项目"的数量(提及/出现次数)通常反映其重要性)

    我在这里的尝试是提供一条不同的(改进的)路线-但却是到相同的-成功的目的地...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Keith、
    您能否告诉您在哪里阅读语句 sysctl->RCC =(sysctl->RCC & 0xF83FFFFF)| 0x800;
    SYSCTL 将是一个宏、定义为指向 RCC 是其中一个元素的结构的指针。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我必须"抗议"我之前的文章中明显的“亚克”!

    Amit 长期以来一直敦促不要使用 DRM -到目前为止、人们已经注意到 DRM 示例正在被删除。 立即在这一张"邀请"上发布新海报、进入 DRM 沼泽!

    供应商不一致不能表达强烈的组织意识-如果不能在此处加以识别和介绍-情况如何?

    工作人员已编程(除一个"宽计数器"外),以获取该员额存在的"持续时间"。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 CB1、
    我对海报的回复绝不是对 DRM 的认可。 我相信我过去曾在其他帖子中阻止人们使用 DRM。 我只是想知道海报在哪里找到了这种 DRM 使用、并要求澄清。 我可以理解、有些人想要了解微控制器编程的螺母和螺栓。 我可以指导海报不要使用 DRM、但他的好奇心将会一直未得到解答。 我只是想在这里提供帮助。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    查尔斯

    谢谢您-我之前的帖子(必须)正在接受"审核"。 (像过去一样,大律师学校的参加者——我应该精通“逃脱”这一要求。)

    显示的代码海报显然是 DRM -因此输入了一个非常"滑坡"(与 MCU 几乎没有关系(直接))-它是否?

    "赞同"和"默示接受"之间存在差异,但这种差异(往往)很小,因此并不总是能被发现。

    我的"标记此问题"部分源于我对该论坛(尤其是供应商代理)的(长期)关注、他们经常被"超越"主流、MCU 使用情况下的"任务/细节! 这阻碍并减慢了论坛响应速度、并"邀请"其他人"扩展"主流...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    CB1、Charles、
    似乎我们都在这里的同一页上、但从角度来看... 我的第一个回答是"你在哪里看到了这一点?" ——我只想从那时起谴责这些登记——或者不谴责。
    不过、在我看来、这个问题与其说与 MCU 相关、更像是 C 语言问题。。。
    同样:在单击变量时按住 CTRL 会让从未尝试过的用户感到惊奇。
    (对于今天下午的认真工作来说太累了)
    布鲁诺
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢你、Bruno、我们三个人都投入了时间/精力。

    但不确定、"全部在同一页上"。   我看到海报-虽然聪明且充满动力-他的学习效率"被"扣为"有趣"-但不是"超级关键"、也不是(甚至)主流 MCU 问题。   

    由于时间/努力是有限的-"严肃、专注和进步"学习所用的时间(赦免)必须从可用的时间中减去"杂草"所花费的时间。  (不源于关键字!)

    曾参加过许多此类大学级别的课程、并通过"关键字"(无论多么诱人)进行学习、并不是一种高效的学习机制。   海报当然可以自由接受/拒绝此观察/建议-但"趋势"得到了充分注意-我不相信它符合此海报(或其他人)的最佳兴趣...   这-也许-值得我的评论...

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

    Keith Scott  

    上午5:39 (0分钟前)
    添加到 TM4C_论坛
    感谢您的回答。
    我知道有 Tivaware 库、但一些学习资源似乎使用直接寄存器方法、"sysctl->"是我多次遇到的问题。 我在开始篇文章中的示例来自书籍《ARM Cortex M3最终指南》第20章。 看起来 uVISION 3是 IDE。  
    这些 YouTube 教程也使用此方法 https://www.youtube.com/channel/UCMOgTxgkrWUZ4HUtc-4JwkA
    我遇到过更多地方/书籍、但我现在不得不去找工作、因此无法在这一点上挖掘它们。
    我不得不承认、我很难不对直接注册理解感兴趣。 我刚开始使用 Arduino、但感觉我不知道微控制器发生了什么、而是"被"压住"了、无法了解 AVR 中发生的情况。 因此、我更改为使用"实数" C 语言进行编程、并使用具有单步执行和调试功能的"实数" IDE。 更困难、但能力要大得多。
    现在我觉得不使用(或至少理解)直接寄存器是朝另一个方向发展、但同时臂束成形术中的直接寄存器要比 AVR (LOL)中的直接寄存器复杂得多。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好。
    下面可能给出一个答案: www.microdigitaled.com/.../15B_pwm_servo.txt
    John
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Keith、

    我看到它的方式:寄存器就在那里、并且必须由处理 MCU 的人员理解。 它们是大量的开关集合、可打开或关闭功能-并且功能非常复杂和互锁、从而增加了对许多"配置开关"的需求。

    但无需在代码中单独打开或关闭每个开关,因为供应商提供的内容更类似于英语(或人的语言,因为这是值得的),可以执行“PropertySetAllSwitchedRequiredForTimerAToWork()”; 这就是驱动程序库(TivaWare)的作用。

    SYSCTL 实际上是该代码中另一个变量的宏(昵称)... John 的 PWM_伺 服示例显示正在使用-但未声明。 有人刚刚完成了将一个系统控制寄存器分割成许多小块的工作、每个小块都有 RCGCGPIO、RCC 等名称。 但所有这些都必须映射到某个位置。 如果您更改器件型号、映射很可能不再适合您。

    Tivaware "更接近"解决这个问题-至少、当然、在您继续使用这个供应商的产品系列时-因为一旦您定义了您正在使用的器件、任何 Tivaware 函数内受影响的寄存器自动指向正确的位置。 它们更容易被人眼阅读。 不过,不要做太多梦,我想知道是否有英语教师会理解以下内容:

    ADCSequenceConfigure (ADC0_BASE、1、ADC_TRIGGER_processor、0);
    ADCSequStepConfigure (ADC0_BASE、 1、0、ADC_CTL_TS);
    ADCSequenceStepConfigure (ADC0_BASE、1、 1、ADC_CTL_TS | ADC_CTL_IE | ADC_CTL_END);
    ADCSequenceEnable (ADC0_BASE、1); 

    DRM? 尝试使用寄存器配置 ADC -即使代码工作正常、您的代码也会变得无法读取的严重破坏。

    谢谢


    布鲁诺

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

    HA HA、

    我想我正在减弱、但至少我在2009年 LOL 中发现了另一个提出类似问题的人:

    http://www.keil.com/forum/15726/     除此之外,我还能找到有关这个问题的邮政编码。

    我真的很恼火,我找不到一个简单的前向解释,说明在哪里声明了 sysctl,或者在我看到的代码示例中,在"->""之前的所有其他宏。 但我想现在是时候让它运行并给予 Tivaware 更多关注了。

    好的、如果我仍然想惩罚自己、在使用 Tivaware 时、我会一直回到 DRM 学习。

    感谢大家的所有投入。

    Keith、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Keith、
    我相信、一旦您获得了 TivaWare、您一定会喜欢它。 TivaWare API 是促进软件开发的好方法。 如 Bruno 所示、借助一些 API 函数、您可以使用其预期配置创建工作模块、否则、使用 DRM 等其他方法可能会花费很长时间。 对于其他 TI MCU、还提供图形(GUI)工具来配置模块的预期用途。 只需点击几下按钮、即可生成代码。 每种方法都有其自身的优点和缺点。 对于 TM4C、TivaWare 是您的不一之道。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Keith、 

    我不想讨论直接寄存器写入的问题、但我也不想暗示存在任何隐藏或秘密。 您所创建的书的示例代码适用于较旧的器件、并使用了我没有的 include 文件。 但是、我可以很好地猜测代码在做什么。

    SYSCTL 被定义为指向一个地址等于控制寄存器基地址的结构体的指针:

    typedef volatile struct systemBase
    {
    uint32 DID0_R; /* 0x0000 */
    
    。} systembase_t;
    
    #define sysctl ((systembase_t *) 0x400FE000)
    

    然后、"sysctl->RCC"的值将求值到地址0x400FE060处的 RCC 寄存器

    当前 TivaWare 头文件对寄存器的定义不同:

    #define SYSCTL_RCC_R (*((volatile uint32_t *) 0x400FE060))
    

    您看到的示例:

    sysctl->RCC =(sysctl->RCC & 0xF83FFFFF)| 0x800; 

    读取地址0x400FE060处的寄存器 RCC、使用0xF83FFFFF 对读取的值进行与  0x800对结果的或操作、然后将结果写回 RCC 寄存器。

    也许这种详细的解释会使我们更强烈地建议使用 TivaWare API 而不是直接写入寄存器。 我至少觉得以下函数调用更易于理解、即使没有注释也是如此:

    SysCtlClockSet (SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
    SYSCTL_XTAL_16MHz);
    

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

    公司/我有确切的书-和 pgs。 315、316显示-几乎正如 Bob 所说:  (我扫描它-但背景是深灰色-对比度较差)

    SYSCTRL 本身从未定义或引用。   并且-(始终)所有此类"sysctrl"运算都使用"赋值"(=)从不使用指针!  (在我的书中)

    #define SYSCTRL_RCC *(volatile unsigned long *)(0x400FE060)
    #define SYSCTRL_RIS *(volatile unsigned long *)(0x400FE050)
    #define SYSCTRL_RCGC1 *((volatile unsigned long *)(0x400FE104))
    #define SYSCTRL_RCGC2 *((volatile unsigned long *)(0x400FE108))

    然后在"SYSCTRL_RCC"上执行5个操作。  我们的海报列出了一张- Bob Detailed -其他的海报使我的手指变得更硬、"从主排坠落"。

    这就是 DRM 的实现、"hello.c"-如 Joseph Yu's'中列出的那样输出到 UART、"ARM Cortex-M3的最终指南"。  (第二版)

    正如供应商的 Bob 所说的-对 SysCtlClockSet()的 API 调用-是如此的用户友好、易于理解并且有可能成功。
    我无法报告这种进入 DRM 的意外导致的"高层建筑的飞跃、手腕吊死或单车死亡"的数量...   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢 Bob 的解释、我已将其复制并粘贴到 Word 文件中。

    在我上一篇文章之后、我转到了 Tivaware PDF、并浏览了一些功能和说明。 是的、我一定会选择这条路线。

    我还在 AVR 论坛上聊天、发现许多其他 ARM 供应商也有诸如 Tivaware 的高级库、因此这似乎是一种典型的方法、毫无疑问、这是由于很多人告诉我的复杂性。

    感谢每个人对我的 LOL 有某种意义。