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.

[参考译文] CCS/TDC1000-C2000EVM:TDC1000和 C2000之间的通信

Guru**** 2966500 points

Other Parts Discussed in Thread: TDC1000, TDC1000-C2000EVM

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/941222/ccs-tdc1000-c2000evm-communication-between-tdc1000-and-c2000

器件型号:TDC1000-C2000EVM
主题中讨论的其他器件:TDC1000、

工具/软件:Code Composer Studio

您好!

我一直在与 TDC100-C2000EVM 合作进行一个项目、以确定容器内液体浓度何时发生变化。 在我的测试设置中、我有两个相互连接的超声波换能器。 当我打开 TDC1000-C2000 GUI 并启动图形时、我可以实时看到飞行时间(ToF)的变化。

我在该项目中的目标是将 C2000微控制器中的值写入 Arduino,以便通过 Arduino 的串行监视器功能读取 ToF 值。 我无法确定如何使 TDC1000和 C2000相互通信。 我购买了 XDS110调试探针并下载了 code composer studio 以尝试调试 C2000、从而使其正常工作。

有8个 GPIO 可直接连接。 每个都有一个可切换至的特定输出外设。 下面是我为此编写的代码:

//将 GPIO0启用为 EPWM1A - ePWM1输出 A (O)
//
GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0;//在 GPIO0
GpioDataRegs.GPASET.BIO0 = 1上启用上拉;//加载输出锁存
器 GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1;// GPIO0 = GPO0 =
1;// GPIO0 = GPIPB.GPIO0 = 0 = 1;/ GPIO0 = GPB.GPIO0 = 1

//
//启用 GPIO1作为 EPWM1B - ePWM1输出 B (O)

//
GpioCtrlRegs.GPAPUD.bit.GPIO1 = 0;//在 GPIO1 GpioDataRegs.GPASET.BIO1 = 1上启用上拉;//加载输出锁存
器 GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0;// GPIO1 = GPIPB=1
= GPIPM1/ GPIO1.GPIO1.BO1 = 1输出

//
//启用 GPIO3作为 EPWM2B - ePWM2输出 B (O)
//
GpioCtrlRegs.GPAPUD.bit.GPIO3 = 0;//启用 GPIO3
GpioDataRegs.GPASET.BIO3上的上拉;//加载输出锁存
器 GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 0;// GPIO3 = 1
= GPIPB/ GPIO3 = 1;/ GPIO3 = GPIPB.GPIO2 = 1

//
//启用 GPIO7作为 EPWM4B - ePWM4输出 B (O)
//
GpioCtrlRegs.GPAPUD.bit.GPIO7 = 0;//在 GPIO7
GpioDataRegs.GPASET.BIO7上启用上拉;//加载输出锁存
器 GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 0;// GPIO7 = GPIPO7 =
1;//输出锁存器 GPIPM7.GPIO= GPB.GPIO7 = GPIPM7 = GPB.GPIO7

//
// EGPIO30只有输入外设

// GpioCtrlRegs.GPAPUD.bit.GPIO30 = 0;//在 GPIO30上启用上拉
// GpioDataRegs.GPASET.bit.GPIO30 = 1;//加载输出锁存
// GIOoRegs.GPAMUX1
= 1/ GPIO30 = 1;


// GPIO30 = 0 / GPIO30 = 1 / GPIO30 = GPIO30 / GPIO30 = GPIO30 = GPIO30 / GPIO30 = GPIO30 / GPIOP.GPIO30 = GPIO30 / GPIO30
//
GpioCtrlRegs.GPAPUD.bit.GPIO31 = 0;//在 GPIO31
GpioDataRegs.GPASET.BIO31上启用上拉电阻;//加载输出锁存
器 GpioCtrlRegs.GPAMUX2.bit.GPIO31 = 1;// GPIO31 = 1
;// GPIO31 = GPO31 = 1;//将 GPIO31作为 GPIO31的输出


引脚/ GPIO31 = 1;/ GPIO31作为 GPIO31引脚(GPO31 = 1)/ GPIO31 - GPIO31 - GPIO31 - GPIO31 - GPIO31 - GPIO31 (作为 GPIO31 - GPIO31 - GPIO31 - GPIO31 - GPIO31 - GPIO31 - GP
//
GpioCtrlRegs.GPBPUD.bit.GPIO32 = 0;//启用 GPIO32
GpioDataRegs.GPBSET.GPIO32上的上拉电阻;//加载输出锁存
器 GpioCtrlRegs.GPBMUX1.bit.GPIO32 = 4;// GPIO32 =



1作为 GPIO32的启动/ GPIO33转换(作为 GPIO32)/ GPIO32 = ADO32位 GPO32 = ADCBOP = 1 (作为 GPIO32)
//
GpioCtrlRegs.GPBPUD.bit.GPIO33 = 0;//在 GPIO33
GpioDataRegs.GPBSET.BIO33上启用上拉电阻;//加载输出锁存
器 GpioCtrlRegs.GPBMUX1.bit.GPIO33 = 4;// GPIO33 =
1;// GPIO33 = 1–GPIO33 = 1–GPIO33–GPIO33–GPIO33–GPIOC.BOP 转换

将这些 GPIO 设置为其适用的输出类型(ePWM、CANTX、ADC 转换启动)后、我不知道在 Arduino 上读取这些值时会输出什么值。 如果我断开传感器与 TX1的连接、该值不会改变。 如果我注释掉 GPIO 代码、我在 Arduino 上读取0。 我正在从板上读取一些内容,但不知道是什么。

在源代码下:"C:\Program Files (x86)\Texas Instruments\TDC1000_C2000\Firmware\TDC1000_C2000EVM_FW-Source-v1.42.zip"。

我找到了一个名为 main_level.c 的文件 下面是该代码的一个片段。

void TI_LMP91400_reg_init (void)
{

// 1MHz 测试单元(绿色)
#if 0
TI_LMP91400_SPIWriteReg (TI_LMP91400_CONFIG0_REG、0x44);// 4个脉冲
TI_LMP91400_SPIWriteReg (TI_LMP91400_config1_REG、0x41);//-> 44至40 (1stoop)
TI_LMP91400_SPIWriteReg (TI_LMP91400_CONFIG2_REG、0x04);// tx2为04、tx1为0
TI_LMP91400_SPIWriteReg (TI_LMP91400_CONFIG3_REG、0x0C);//启用消隐、320mv 阈值
TI_LMP91400_SPIWriteReg (TI_LMP91400_CONFIG4_REG、0x5F);// 5e (组)-> 1e (边沿模式)
TI_LMP91400_SPIWriteReg (TI_LMP91400_TOF1_REG、0x40);
TI_LMP91400_SPIWriteReg (TI_LMP91400_TOF0_REG、0x1E);
TI_LMP91400_SPIWriteReg (TI_LMP91400_ERROR_FLAGS_REG、0x01);
TI_LMP91400_SPIWriteReg (TI_LMP91400_TIMEOUT_REG、0x23);
TI_LMP91400_SPIWriteReg (TI_LMP91400_Cock_RATE _REG、0x01);
#endif
} 

我不确定 TI_LMP91400是什么、但这是我唯一看到 TDC1000中的 TOF0、TOF1和其他寄存器的时间。 我需要弄清楚如何使这些寄存器从 GPIO 输出。

如果有更好的方法来输出这些值、请告诉我。

谢谢、

Colin

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

    我找到了与我尝试执行的操作类似的主题、但他们使用了 TDC1000-TDC7200EVM: https://e2e.ti.com/support/sensors/f/1023/t/720185?CCS-TDC1000-TDC7200EVM-Using-the-board-regardless-GUI 

    他通过 GPIO3使用 UART 将该值写入 Arduino 中。 GPIO12和 GPIO29使用 SCI (即 UART)、但我无法直接连接它们。 我将尝试使用 GPIO31并将其翻转到 CANTXA、看看如果我能够调试代码、这是否起作用。  

    当我尝试将源代码下载到 TSM320f28035微控制器时、出错后会出现错误。 我还很困惑为什么 TDC1000-C2000EVM 的源代码中即使不在电路板上也会经常出现 TI_LMP91400。

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

    Colin、

    看起来 EVM 利用 LMP91400驱动程序与 TDC1000进行通信。

    我想您尝试一次执行太多操作。 代码应在开箱即用的情况下进行编译和运行。 请下载新的未经编辑的代码副本、并运行该副本以使用 GUI 测试您的硬件配置。

    在您开始工作后、您可以开始逐步修改代码以添加所需的其他功能。

    此致、
    Cody  

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

    Cody、  

    您能解释一下如何执行此操作吗? 我已经尝试过几次了、但每次尝试这种方法时、我都会遇到几个蝙蝠的错误。 我修复这些错误只是为了获取更多 错误、等等。 有些东西告诉我、我从一开始就做不对... 我已附加了屏幕当前的外观图片。

    谢谢、

    Colin  

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

    Colin、

    您似乎遇到了链接错误。 这些注释告诉您您已定义了两次"xxyy"。 然后它指向发生该定义的位置。

    论坛应该有几篇关于如何更正链接错误的文章。 此外、C2000专题讨论会还介绍了如何将文件正确链接在一起。

    https://training.ti.com/c2000-f2803x-microcontroller-workshop?context=1137791-1137784 

    此致、
    Cody  

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

    Cody、

    我创建了一个新的 CCS 工程并尝试下载固件、但每次我遇到错误。 我通常尝试添加整个固件文件、但这次我只添加了 TDC1000_LEVEL_PC_Commn 和 LMP_91400_LEVEL 文件中的代码和头文件。  

    以下是固件中提供的所有文件:

    以下是代码下的文件:

    这就是我的 CCS 目前的样子。 我从 TDC1000_level_PC_Commn 和 LMP_91400_level 中打开了两个 main_level.c 文件、并对要使用哪一个文件感到困惑。 LMP 水平在左侧、TDC 水平在右侧。

    我是否需要从固件中添加更多文件?

    我还遇到 TDC1000 host_interface.c 和 main_level.c 错误 它不允许我对这些文件进行更改并保存它们。 我认为这与版权问题有关。

    谢谢、

    Colin

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

    Colin、

    您可以提取文件吗? 如果未将.zip 文件重命名为.piz、则将该文件复制到 windows 中的另一个文件目录中。 然后将文件重命名为.zip、您应该能够解压文件。

    请告诉我、您是否遇到无法编辑文件的问题。 这些文件应该是可编辑的。

    此致、
    Cody

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

    Cody、  

    我可以提取文件并将其保存为 firmware_extract、如上图所示。 当我导入该文件并尝试构建它时、我会遇到一组错误。 我认为最终会有太多文件、因为我必须从编译中排除很多文件以修复错误。 我不知道我是否排除了正确的文件。  

    您是否还可以根据 TDC1000_LEVEL_PC_Commn 和 LMP_91400_LEVEL 文件之间的差异进行触摸? 它们都位于固件文件中、但它无法在何处描述差异。 在电路板上的任何位置也找不到 lmp91400。  

    谢谢、  

    Colin  

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

    Colin、

    我认识到这对您来说可能非常令人沮丧、因此为了帮助您更快地解决此问题、我导入并构建 了 TDC1000_level_PC_Commn 项目。

    在这样做时、我发现了3个问题。

    1. 链接是使用绝对文件路径完成的。
      1. 有两种方法可以解决此问题、纠正此问题以使用相对文件路径、或者只需将绝对文件路径更新到文件系统中文件所在的位置即可。
        1. 在项目浏览器中右键点击项目名称、然后点击"Properties"
        2. 导航至"Build"->"C2000 compilier"->"Include options"
        3. 将"C:\Users\a0415888\Documents\pwd\GIT_repos\c2000\c2000_lmp91400"替换为系统上每个 include 的文件路径
    2. //#include 导致编译错误
      1. 修复:将所有实例(如果我正确记住、则为3)替换为" #include "  

    3. 找不到 IQMath
      1. 您可以链接到此项目或将其"添加"到项目中。
        1. 在项目浏览器中右键点击项目名称、然后点击"Add files"
        2. 导航至"TDC1000_C2000EVM_FW-Source-v1.42\libs\math\IQmath\v160\lib"
        3. 选择 IQmath.lib。
        4. 链接或复制文件正常

    我不知道为什么包含 LMP 文件、但据我所知、您只需要 TDC 文件。


    此致、
    Cody