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.

[参考译文] TMS320F28P559SJ-Q1:直接写入代码中的微控制寄存器

Guru**** 2609895 points
Other Parts Discussed in Thread: C2000WARE, SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1564085/tms320f28p559sj-q1-writing-directly-to-microcontrolle-registers-in-the-code

器件型号:TMS320F28P559SJ-Q1
Thread 中讨论的其他器件:C2000WARESysConfig

工具/软件:

您好、  

我正在尝试处理新的 LaunchPad 、并且我已设置代码。  但是、我无法直接写入微控制器寄存器。   

我收到下面的警告消息:

#10247-D:创建不带 SECTIONS 规范的输出段“AdccRegsFile\",“,</s>、

代码无效。

如何在无需通过器件库的情况下直接写入微控制器寄存器。

谢谢

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

    您好:

    我建议查看 C2000ware 中的一些示例代码。 根据工程样式 (bitfield 或 driverlib — 请参阅此处的说明) 、可以通过不同的方式直接读取/写入寄存器。

    • 驱动程序库
      • 路径:[C2000ware INSTALL]\driverlib\f28p55x\driverlib 中的.c 和.h 文件提供了 driverlib 读取/写入的示例
      • 写入示例:  HWREGH(base + ECAP_O_ECCTL1) =
        (HWREGH(base + ECAP_O_ECCTL1) & ~(1U << shift)) |
        ((uint16_t)polarity << shift);
      • 阅读示例: uint32_t  count = HWREG(base + ECAP_O_CAP1);
    • 位域
      • 路径中每个文件夹的.c 和.h 文件: C2000ware INSTALL]\device_support\f28p55x\examples 显示了位字段读取/写入的示例
      • 写入示例:  AdcaRegs.ADCCTL1.bit.INTPULSEPOS = 1;
      • 阅读示例:   adcAResults[index++] = AdcaResultRegs.ADCRESULT0;

    此致、

    Delaney

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

    尊敬的 Delaney:

    感谢您的答复。

    这就是我实现对微控制器寄存器直接写入的方式

    写入寄存器行  

            PieCtrlRegs.PIEACK.ALL = INTERRUPT_ACK_group10;
    我将 f28p55x_globalvariabledefs.c 复制到了我的工程中。
     
    但是我仍然收到警告信息。   
    我没有看到任何你提到的 Bitfield 类型的例子。  您能给我一个具体的例子吗?
    谢谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Abayomi:

    这看起来您正在使用位域代码。 我建议从 C2000ware 中的一个示例工程或空工程示例(路径:C2000ware INSTALL]\device_support\f28p55x\examples)   开始。 这将确保所有头文件都已正确输入。 然后、您可以针对特定应用对此工程进行修改。

    此致、

    Delaney  

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

    尊敬的 Delaney:

    感谢您的反馈。

    以上步骤就是我在项目开始时所使用的步骤。

    这是否意味着 C2000ware 文件夹中没有示例?

    谢谢

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

    我现在见过一个例子。  我会在解决问题时更新您。  谢谢

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

    您好、   

    我一直无法解决这个问题、因为使用 Bitfield 的示例未使用 SysConfig、并且 SysConfig 的示例未使用 Bitfield。  我在工程中使用 SysConfig。

    我认为这个问题与将寄存器地址映射到微控制器本身的链接器命令文件有关。

    我还能尝试什么。   

    谢谢

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

    尊敬的 Abayomi:

    我看到、我不知道您在使用 SysConfig。 在这种情况下、我建议使用内置 SysConfig 支持的 driverlib 样式工程进行开发。 这是我们最易用的软件。 您能否尝试运行 [C2000ware INSTALL]\driverlib\f28p55x\examples 中的一个示例?

    此致、

    Delaney

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

    尊敬的 Delaney:

    感谢您的答复。  是的、我正在为我的工程使用 SysConfig。

    我想 在您的回复中阐明“使用 driverlib 样式工程进行开发“。

    由于我的工程已生成、如何针对上述情况修改我的工程?

    第二、你能否请我指出一个具体的例子。

    谢谢。

    此致、

    Yomi

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

    尊敬的 Yomi:

    [引述 userid=“516880" url="“ url="~“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1564085/tms320f28p559sj-q1-writing-directly-to-microcontrolle-registers-in-the-code/6026512

    由于我的工程已生成、如何针对上述情况修改我的工程?

    [/报价]

    这是指 SysConfig 选择已经 完成、还是您已经编写了应用程序代码(位域格式)?

    此致、

    Delaney

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

    您好、  

    我是说我已经完成了 SysConfig 选择和配置。  我还编写了用于处理 ISR 的代码。

    谢谢

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

    尊敬的 Yomi:

    我可以看到、在这种情况下、您可以轻松地将.syscfg 文件的内容复制到新项目的.syscfg 文件中、方法是右键点击>>使用>>通用文本编辑器打开。 我建议采取以下措施:

    1. 导入[C2000ware INSTALL]\driverlib\f28p55x\examples\empty_project
    2. 将.syscfg 文件的内容复制到空工程的 c2000.syscfg 文件中
    3. 在主文件中添加 board.h 的 include、并调用 Board_init ()(如果尚未在空工程中)
    4. 复制 ISR 代码并转换为 driverlib 格式

    此致、

    Delaney

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

    您好、

    很抱歉晚才回复。

    我还没有让它发挥作用。 奇怪的是、CCS 20 版不提供这一重要功能

    谢谢

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

    尊敬的 Abayomi:

    您到底遇到了什么问题?  

    如果您要向我发送您的 SysConfig 文件 (.syscfg) 和 ISR 代码、我可以根据需要为您将其整合在一起。

    此致、

    Delaney

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

    您好、

    感谢您的答复。

    我真的想使用直接写入寄存器、因为这样代码运行得更快。

    这是我想直接对寄存器进行写入的首选方法  

    if (AdccRegs.ADCEVTSTATT.bit.PPB2TRIPHI)  

    但我使用的是以下表单  

    UINT16_t intStatus = HWREGH ((HWREGH (myADCGrpA_BASE + ADC_O_EVTSTAT)>>((uint16_t) myADCGrpA_ADCAPPB4VacCurr * 4U)) 和 0x7U)
    我认为上述做法构成了一种复杂的做法。
    我想使用更简单的方法- (AdccRegs.ADCEVTSTATT.BIT.PPB2TRIPHI)。
    如何导入变量名称以便链接器识别我。
    谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Abayomi:

    HWREG 访问实际上应该运行得更快、因为这些访问使用编译器内在函数在编译时而不是运行时查找寄存器地址。 位域样式 (AdccRegs.ADCEVTSTATT.bit.PPB2TRIPHI) 使用的结构会占用器件上的额外存储器、并需要额外的周期才能访问、因此该选项在运行时的性能应该会更差。

    尽管如此、如果您仍然希望在 SysConfig 中使用位字段样式、请告诉我。  

    此致、

    Delaney

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

    尊敬的 Delaney:

    感谢您的答复。   

    我现在将关闭 TT。

    此致、

    Yomi