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.

[参考译文] TMS320F28027:RTC BQ32000通过 I2C 与 TMS320F28027连接。

Guru**** 2540720 points
Other Parts Discussed in Thread: TMS320F28027, BQ32000, C2000WARE, CONTROLSUITE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/609314/tms320f28027-rtc-bq32000-interface-with-tms320f28027-via-i2c

器件型号:TMS320F28027
Thread 中讨论的其他器件:BQ32000C2000WAREcontrolSUITE

您好!

我设计了一个通过 I2C 与 TMS320F28027连接的 RTC BQ32000接口电路。 为了测试 I2C 函数、我使用 了示例工程中的" example_2802xI2C_EEPROM.c"并运行。 我遇到以下错误。

说明资源路径位置类型
未解析的符号仍为11072017 38pinprocessorRTC 写入 C/C++问题
未解析的符号_InitPieCtrl、首先在./example_2802xI2C_EEPROM.obj 11072017 38pinprocessorRTC 写入 C/C++问题中引用
未解析的符号_InitPieVectTable、首先在./example_2802xI2C_EEPROM.obj 11072017 38pinprocessorRTC 写入 C/C++问题中引用
未解析的符号_InitI2CGpio、首先在./example_2802xI2C_EEPROM.obj 11072017 38pinprocessorRTC 写入 C/C++问题中引用
链接期间遇到错误;"Example_F2802xSci_Echoback.out"不是11072017 38pinprocessorRTC 写入 C/C++问题

请支持我解决此问题。

此致、

Mahesh K.R.

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

    您是否直接从 C2000ware 中提取了 example_2802xI2C_EEPROM.c 示例程序? 您是否更改了程序、或者在尝试以原始状态编译工程时遇到了这些错误?

    当您缺少某些头文件/库或未正确将它们包含在代码中时、通常会出现"未解析符号"错误。 如果从更新最新版的 C2000ware 中提取、您的项目应已包含您所需的所有内容、并且在构建时不会出现任何问题。

    有关 正确链接和包含过程的更多信息、请阅读 processors.wiki.ti.com/.../Include_paths_and_options。

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

    尊敬的 Kevin:

      我将 example_2802xI2C_EEPROM.c 文件复制到了我的项目中。 我没有更改程序。 是的、 我在尝试以原始状态编译工程时收到错误消息。
    是的、我缺少某些头文件/库、或者没有正确地将它们包含在代码中。
    我不知道 头文件/库 、包括  InitPieCtrl、 InitPieVectTable 和 InitI2CGpio、  
    请告诉我 有关头文件/库 的信息、包括  InitPieCtrl、 InitPieVectTable 和 InitI2CGpio、
    此致、
    Mahesh K.R.
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Mahesh K. R.、

    在进入您的项目并添加所有必要的头文件/库和 include 目录之前、我建议您确保正确导入您的项目、因为它会为您设置所有这些内容。 我会从 CCS 工作区中删除您拥有的项目并重新开始。

    阅读此 wiki 页面 processors.wiki.ti.com/.../Importing_Projects_into_CCS 的"导入现有项目"部分。

    如果您执行此操作、并且在尝试构建项目时仍遇到错误、则需要通过转到项目的属性将以下目录添加到#include 路径中。

    C:\ti\ccsv7\tools\compiler\ti-cgt-C2000_16.9.3.LTS \include

    C:\ti\c2000\C2000Ware_1_00_01_00\device_support\f2802x\headers\include

    C:\ti\c2000\C2000Ware_1_00_01_00\device_support\f2802x

    C:\ti\c2000\C2000Ware_1_00_01_00\device_support\f2802x\common\include

    C:\ti\c2000Ware_1_00_01_00\libraries\math\IQmath\c28\include

    此外、您还应该在工作区的"Projects"选项卡下具有以下文件。

    最棒的

    Kevin

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

    尊敬的 Kevin:

     我按照示例"Example_2802xI2C_EEPROM.c"中的两个导入项目进行了操作。 尝试构建、我遇到了以下错误。 然后、我将上述所有内容都包括在内、但没有任何改进。 我收到以下错误消息。

    说明资源路径位置类型
    无效的项目路径:未找到包含路径(C:\ti\libs\math\IQmath\v15c\include)。 示例_F2802xI2C_EEPROM 路径入口路径问题
    无效的项目路径:未找到包含路径(\packages/ti\xDAIS)。 示例_F2802xI2C_EEPROM 路径入口路径问题
    无效的工程路径:未找到包含路径(C:\ti\ccsv7\tools\compiler\ti-cgt-C2000-16.9.3.LTS \include)。 示例_F2802xI2C_EEPROM 路径入口路径问题
    此工程是使用当前未安装的编译器版本创建的:6.1.0 [c2000]。 编译器的另一个版本将在编译期间使用:6.2.5。 请转到 CCS App Center 以安装所需版本的编译器、或通过调整工程属性将工程迁移到可用的编译器版本之一。 示例_F2802xI2C_EEPROM 属性问题
    无法解析编译变量'XDAIS_CG_ROOT'。 示例_F2802xI2C_EEPROM 属性问题
    未解析的符号_InitI2CGpio、首先在./example_2802xI2C_EEPROM.obj example_F2802xI2C_EEPROM C/C++ problem 中引用
    未解析的符号_InitPieCtrl、首先在./example_2802xI2C_EEPROM.obj example_F2802xI2C_EEPROM C/C++问题中引用
    未解析符号>>、首先在编译示例 F2802xI2C_EEPROM C/C++问题中引用
    未解析的符号_I2caRegs、首先在./example_2802xI2C_EEPROM.obj example_F2802xI2C_EEPROM C/C++ problem 中引用
    未解析的符号_PieCtrlRegs、首先在./example_2802xI2C_EEPROM.obj example_F2802xI2C_EEPROM C/C++ problem 中引用
    未解析的符号_PieVectTable、首先在./example_2802xI2C_EEPROM.obj example_F2802xI2C_EEPROM C/C++ problem 中引用
    未解析的符号_InitPieVectTable、首先在./example_2802xI2C_EEPROM.obj example_F2802xI2C_EEPROM C/C++ problem 中引用
    未解析的符号_InitSysCtrl、首先在./example_2802xI2C_EEPROM.obj example_F2802xI2C_EEPROM C/C++问题中引用
    入口点符号"code_start"未定义 Example_F2802xI2C_EEPROM C/C++问题
    链接期间遇到错误;"Example_F2802xI2C_EEPROM.OUT"不是 Example_F2802xI2C_EEPROM C/C++问题
    未解析的符号 CODE_START Example_F2802xI2C_EEPROM C/C++问题
    未解析的符号仍然存在 Example_F2802xI2C_EEPROM C/C++问题

    此致、

    Mahesh K.R.

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

    CCS 似乎没有找到您添加的 include 目录。 在 CCS 之外使用文件资源管理器时、您可以找到 C:\ti\libs\math\IQmath\v15c\include 和 C:\ti\ccsv7\tools\compiler\ti-CGT-C2000_16.9.3.LTS \include 目录吗? 它们应该被物理保存到您的计算机上。

    如果您截取了您的 include 和项目工作区的屏幕截图、也可能有助于我了解您缺少的内容。 您应该在工作区中拥有我之前屏幕截图中的所有文件。

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

    尊敬的 Kevin:

     很抱歉耽误你的时间。 下面给出了屏幕截图。

    此致、

    Mahesh K.R.

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

    Mahesh K.R.、

    您似乎在工作区的 include 中拥有了所有正确的目录、但它们可能没有正确链接。

    您能否在项目属性中检查链接的资源? (与下图比较)

    此外、您还可以检查路径变量。

    查看这些内容后、右键单击项目并选择"Index => Rebuild"、为您的标题建立索引。

    希望这对您有所帮助、

    Kevin

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

    尊敬的 Kevin:

      情况是一样的。 不是 误差。  

    此致、

    Mahesh K.R.

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

    Mahesh K.R.、

    我想您应该再次尝试导入此示例的新副本。 如果您使用更新最新版的 C2000ware 代码示例正确执行此操作、程序应在不进行任何更改的情况下生成/运行。 请按照以下步骤操作...

    1.从工作区中删除示例程序,选择“Delete Project contents on disk”(删除磁盘上的项目内容)将其完全删除。 然后关闭 CCS。

    2.使用最新的示例代码将计算机上的 C2000ware 更新为最新版本。

    3.重新打开 CCS。 选择 Project => Import CCS Projects...

    4.浏览到 C2000ware 中所需的程序示例文件夹并选择该文件夹。 确保您看到在 Discovered projects 窗口中选择的工程文件夹。

    5.选中"Copy projects into workspace"复选框、然后选择"Finish"

    这应该会将准备好构建/运行的示例程序导入到您的工作区中。

    希望这对您有所帮助、

    Kevin

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

    尊敬的 Kevin:

     示例_F2802xI2C_EEPROM 项目在 C2000ware 中未出现。 Example_F2802xI2C_EEPROM 项目出现在项目-示例中。 我无法导入项目。 现在我被震撼了。  

    我的要求是通过 I2C、我必须在 RTC BQ32000中设置日期和时间、然后在需要时通过 I2C 读取时间。 我想知道、如何初始化 I2C、写入 BQ32000、读取32000。 如果您有任何工作示例、请为我提供支持。

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

    您好、Mahesh K.R.、

    EEPROM 示例代码位于 C2000ware 的以下目录中:

    C:\ti\c2000Ware_1_00_01_00\device_support\f2802x\examples\structs\i2c_eeprom

    该示例似乎具有设置 I2C 和向器件读取/写入数据所需的所有函数、但它是由中断驱动的、对于不熟悉 I2C 的人而言、可能会有点困惑。 理想情况下、您确实希望使用 I2C 外设的中断、以便 SCL/SDA 线路不会经常被使用。 但是、这不一定是自行了解或初始测试器件的最佳方法。

    浏览 C2000ware 和 controlSUITE 我没有看到我们提供的另一个示例、但我可以向您指出其中的重要功能。 此外、您还可以通过查看前一个论坛帖子中有关使用 I2C 的内容:

    e2e.ti.com/.../221249

    Example_2802xI2C_EEPROM 中的重要功能:

    InitI2CGpio(); //设置 SDA/SCL 行
    
    I2CA_Init(); //初始化 I2C 设备,您需要在此更改参数以满足特定设备
    
    I2CA_WriteData (struct I2CMSG *msg)的要求; //将数据/命令写入设备(从设备)
    
    I2CA_ReadData (struct I2CMSG *msg); //从设备读取数据
    

    您需要参考特定器件的寻址/寄存器数据表、以便正确发送和接收数据。 www.ti.com/.../bq32000.pdf

    希望这对您有所帮助、

    Kevin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Kevin:
    如果我从"struct"导入工程、则默认配置为"Debug"。 我需要闪存。 如何将配置从调试更改为闪存? 这就是我无法写入目标的原因。

    我看到、如果我从"驱动程序"导入工程、则默认配置为"闪存/RAM"。

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

    Mahesh K.R.、

    通过 F2802x_generic_ram.cmd 导入时、example_2802xI2C_EEPROM 示例程序被设定为从 RAM 运行。

    如果要从闪存运行程序、则必须更改此.cmd 文件或替换该文件。 有关从闪存运行应用程序的更多信息、请查看以下内容:

    http://www.ti.com/lit/an/spra958l/spra958l.pdf

    您可以使用以下 C2000ware 目录中的 F2802x_generic_flash.cmd 或 F28027.cmd (我建议您的特定器件使用此文件)替换.cmd 文件:

    C:\ti\c2000Ware_1_00_01_00\device_support\f2802x\con\cmd

    希望这对您有所帮助、

    Kevin

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

    尊敬的 Kevin:

      正如您在电子邮件中所解释的那样 没有更好的了。 下面给出了我要查找的是有源闪存而不是有源调试。 我认为这必须通过项目设置来完成。 请提供您的想法。

    此致、

    Mahesh K.R.

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

    Mahesh K.R.、

    我对您尝试实现的目标感到困惑。 您所指的是活动的"编译配置"、这是为[Active - Debug]配置保存的编译选项。 无论您是编程到 RAM 还是闪存、CCS 都将始终打开调试会话。

    有关“build configurations”的详细信息,请参阅以下内容: http://processors.wiki.ti.com/index.php/Project_Build_Configurations

    查看您的 EEPROM 示例项目工作区、您缺少命令链接器文件、您的项目将无法构建、因为编译器不知道您的程序应该位于何处(RAM 或闪存)。 您需要将 F2802x_general_ram.cmd 或 F28027.cmd 复制到您的项目中。

    最棒的

    Kevin

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

    我对您尝试实现的目标感到困惑。 您所指的是活动的"编译配置"、这是为[Active - Debug]配置保存的编译选项。 无论您是编程到 RAM 还是闪存、CCS 都将始终打开调试会话。

    有关“build configurations”的详细信息,请参阅以下内容: processors.wiki.ti.com/.../Project_Build_Configurations

    查看您的 EEPROM 示例项目工作区、您缺少命令链接器文件、您的项目将无法构建、因为编译器不知道您的程序应该位于何处(RAM 或闪存)。 您需要将 F2802x_general_ram.cmd 或 F28027.cmd 复制到您的项目中。

    最棒的

    Kevin

    尊敬的 Kevin:
    我正在重放您的上述电子邮件

    我要完成的是设置 I2C 肛门、初始化、写入并从与其相连的器件读取数据。 我的方向是错误的。 如果您有任何用于 I2C 查纳、初始化、写入和读取的工作代码。 请支持我。

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

    Mahesh K.R.、

    EEPROM 程序是唯一可用的 I2C 示例代码。 我之前提到过它的函数、这些函数将对您有用。 您必须仔细查看它们并了解如何使用它们。 我建议参考《2802x I2C 参考指南》、以帮助您了解这些函数的工作原理以及 I2C 协议的工作原理。

    http://www.ti.com/lit/ug/sprufz9d/sprufz9d.pdf

    example_2802xI2C_EEPROM.c 中的有用函数:

    InitI2CGpio(); //设置 SDA/SCL 行
    
    I2CA_Init(); //初始化 I2C 设备,您需要在此更改参数以满足特定设备
    
    I2CA_WriteData (struct I2CMSG *msg)的要求; //将数据/命令写入设备(从设备)
    
    I2CA_ReadData (struct I2CMSG *msg); //从设备读取数据 

    希望这对您有所帮助、

    Kevin

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

    尊敬的 Kevin:

     非常感谢您的支持。 我能够初始化 I2C 并通过 SCLA 获取脉冲、并通过 SDAA 查看写入日期。  下面给出了我使用的代码。

    GPIOInit();

    EALLOW;

    GpioCtrlRegs.GPAPUD.bit.GPIO28 = 0;//启用 GPIO28的上拉电阻(SDAA)
    GpioCtrlRegs.GPAPUD.bit.GPIO29 = 0;//启用 GPIO29的上拉电阻器(SCLA)

    GpioCtrlRegs.GPAQSEL2.bit.GPIO28 = 3;//异步输入 GPIO28 (SDAA)
    GpioCtrlRegs.GPAQSEL2.bit.GPIO29 = 3;//异步输入 GPIO29 (SCLA)

    GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 2;//为 SDAA 配置 GPIO28
    GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 2;//为 SCLA 配置 GPIO29

    EDIS;

    空 I2CA_Init()

    EALLOW;

    I2caRegs.I2CMDR.bit.IRS = 0;
    SysCtrlRegs.PCLKCR0.bit.I2CAENCLK = 1;// I2C
    //初始化 I2C
    I2caRegs.I2CSAR = 0x68;//从器件地址- EEPROM 控制代码

    // I2CCLK = SYSCLK/(I2CPSC+1)
    #IF (CPU_FRQ_40MHz||CPU_FRQ_50MHz)
    I2caRegs.I2CPSC.all = 4;//预分频器-模块时需要7-12MHz
    #endif

    #IF (CPU_FRQ_60MHz)
    I2caRegs.I2CPSC.all = 6;//预分频器-模块时需要7-12MHz
    #endif

    I2caRegs.I2CCLKL = 125;//注意:必须为非零
    I2caRegs.I2CCLKH = 125;//注:必须为非零
    I2caRegs.I2CIER.ALL = 0x24;//启用 SCD 和 ARDY 中断

    I2caRegs.I2CMDR.ALL = 0x0020;//使 I2C 退出复位
    //挂起时停止 I2C

    I2caRegs.I2CFFTX.ALL = 0x6000;//启用 FIFO 模式和 TXFIFO
    I2caRegs.I2CFFRX.ALL = 0x2040;//启用 RXFIFO、清除 RXFFINT、
    I2caRegs.I2CMDR.bit.IRS = 1;
    I2caRegs.I2CMDR.bit.STP= 0;

    EDIS;

    空 I2CA_WriteData()

    I2caRegs.I2CMDR.bit.MST = 1;//作为主器件发送启动
    I2caRegs.I2CMDR.bit.TRX = 1;//作为发送器发送启动信号

    //等待直到 STP 位从任何先前的主设备通信中清零。
    //模块清除该位的操作被延迟到 SCD 位之后
    //设置。 如果在启动新消息之前未选中此位
    // I2C 可能会被混淆。
    IF (I2caRegs.I2CMDR.bit.STP==1)


    //检查总线是否占线
    IF (I2cRegs.I2CSTR.bit.BB = 1)

    //设置从地址
    I2caRegs.I2CSAR = 0x68;

    //设置要发送的字节数
    // MsgBuffer +地址
    I2caRegs.I2CCNT = 0x03;
    I2caRegs.I2CMDR.bit.STT = 1;

    //设置要发送的数据

    //while (I2cRegs.I2CSTR.bit.XRDY = 0){};

    I2caRegs.I2CDXR = 0x55;

    // while (I2caRegs.I2CSTR.bit.nack = 1){};

    // while (I2cRegs.I2CSTR.bit.XRDY = 0){};

    I2caRegs.I2CDXR = 0x55;

    // while (I2caRegs.I2CSTR.bit.nack = 1){};

    // while (I2cRegs.I2CSTR.bit.XRDY = 0){};

    I2caRegs.I2CDXR = 0x55;

    // while (I2caRegs.I2CSTR.bit.nack = 1){};

    I2caRegs.I2CMDR.bit.STP= 1;

    I2caRegs.I2CMDR.bit.STP= 0;

    此致、

    Mahesh K.R.