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/TDC7201-ZAX-EVM:TDC720x-ZAX-EVM 的 GUI 和 CCS 代码都有问题

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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/675584/ccs-tdc7201-zax-evm-tdc720x-zax-evm-having-issues-with-both-the-gui-and-the-ccs-code

器件型号:TDC7201-ZAX-EVM

工具/软件:Code Composer Studio

我正在使用 TDC720x-ZAX-EVM 来确定这是否是正确的 ToF 微芯片、我正在处理评估模块的一些问题。 我通过函数发生器在 GUI 上获得了出色的读数、然后开始使用 TI 在 demo_apps 文件夹中提供的 code composer 代码进行实验、 没有成功地使任何东西工作、唯一发生的事情是 LED102和 LED101会亮起并保持亮起状态。 我决定将 TDC720x-ZAX-EVM 重新插入函数波发生器并再次测试 TDC1、即使我的设置没有改变、TDC1也不再读取任何测量值。 我使用 TDC2尝试了相同的设置、并且能够顺利读取测量值。 我更改了代码以使用 TDC2而不是 TDC1、然后尝试通过 GUI 进行测量、并注意到 TDC2不再进行任何测量。 是否有人曾遇到过此问题并找到了解决方法?  

这是我使用的 TI 代码。  

//
//演示应用01用于 MSP430/TDC720x 接口代码库 v1.0
//字节读取/字节写入 TDC720x 寄存器
//
MSP430F5529
// --------
// /|\| XIN|-
// || |
// -|RST XOUT|-
// | |
// | P3.0/UCB0SIMO|->SDI
// | P3.1/UCB0SOMI|<- SDO
// | P3.2/UCB0CLK|->CLK
// | P2.6|->CSB
// | P2.4|
// | |
// | P1.2|
//
Vishy Natarajan
// Texas Instruments Inc.
// 2013年3月
//使用 IAR 嵌入式工作平台构建版本:5.5x
//*********
//版权所有2011-2012 Texas Instruments Incorporated。 保留所有权利。

重要说明:您对本软件的使用仅限于

下载软件的用户、其雇主(必须是您的雇主)和
德州仪器(TI)公司("许可")之间根据软件许可协议条款授予的特定权利。
除非您同意遵守许可条款、否则不得使用本软件。 许可证限制
了您的使用、并且您承认、除非
将本软件嵌入
到产品中集成的德州仪器微控制器上、否则不得对其进行修改、复制或分发。 除上述目的


外、您不得出于任何目的使用、复制、复制、复制、准备本软件和/或其文档的衍生作品、修改、分发、执行、展示或销售本软件和/或其文档。

您进一步确认并同意软件和文档
按“原样”提供,不提供任何明示或暗示的担保,
包括但不限于对适销性、所有权、
非侵权性和特定用途适用性的任何担保。 在任何情况下、德州
仪器或其许可人都不应根据合同、
疏忽、严格责任、贡献、违反保修、 或其他法律
公平理论任何直接或间接损害或费用、包括但不
限于任何偶然、特殊、间接、惩罚性或后果
性损害、利润损失或数据丢失、采购替代产品、
技术、服务的费用、 或第三方的任何索赔(包括但不
限于其任何抗辩)或其他类似费用。

如果您对使用本软件的权利有任何疑问、
请通过 www.ti.com 联系德州仪器公司。
秘书长的报告 /#include


#include "TI_TDC720x.h"
#include "TI_MSP430.h"
#include "TI_MSP430_hardware_board.h"
#include "TI_MSP430_SPI.h"


void Init_Clock (void);
void InitMCU (void);


//测试 Td720x 寄存器读/写

/tdct_t8、uintx_uint_clt/uintx]


= tuint_cluint_clu_cluintx_cluint_cluintx_clt/uint_clt_cluint_clt/t/uintsize_transl/ t/t/uint_uint8;t/uintuint_int_uint_uint_uint_int_intx_uint_int_int_

void main (void)
{


WDTCTL = WDTPW+WDTHOLD; //停止 WDT

TI_TDC720x_GLED_PxOUT |= TI_TDC720x_GLED_PIN; //在
TI_TDC720x_GLED_PxDIR 上设置 LED |= TI_TDC720x_GLED_PIN; //设置引脚方向为输出
__delay_cycles (250000);
TI_TDC720x_GLED_PxOUT ^= TI_TDC720x_GLED_PIN;
TI_TDC720x_RLED_PxOUT &=~TI_TDC720x_RLED_PIN; //将 RLED 设置为关闭
TI_TDC720x_RLED_PxDIR |= TI_TDC720x_RLED_PIN; //设置引脚方向

TI_TDC720x_OSCENABLE_PxOUT |= TI_TDC720x_OSCENABLE_PIN; //将引脚设置为高电平:启用 afe osc
TI_TDC720x_OSCENABLE_PxDIR |= TI_TDC720x_OSCENABLE_PIN; //设置引脚方向为输出


TI_TDC720x_enable1_PxOUT |= TI_TDC720x_enable1_PIN; //启用器件
TI_TDC720x_enable1_PxDIR |= TI_TDC720x_enable1_PIN; //设置引脚方向输出

#if 0
TI_TDC720x_FLAG_PxOUT |= TI_TDC720x_FLAG_PIN; //标志输入上拉使能
TI_TDC720x_FLAG_PxREN |= TI_TDC720x_FLAG_PIN; //标志输入电阻器使能
TI_TDC720x_FLAG_PxDIR &=~TI_TDC720x_FLAG_PIN; //设置引脚方向输入
#endif

//配置端口引脚以处理来自 TDC720x
TI_TDC720x_INTB_PxDIR 的中断条输出(INTB)&&~TI_TDC720x_INTB1_PIN; //为 INTB TI_TDC720x_INTB_PxOUT 设置端口引脚
|= TI_TDC720x_INTB1_PIN; // INTB 输入上拉使能
TI_TDC720x_INTB_PxREN |= TI_TDC720x_INTB1_PIN; // INTB 输入电阻器使能
TI_TDC720x_INTB_PxIES |= TI_TDC720x_INTB1_PIN; //中断边沿选择
TI_TDC720x_INTB_PxIFG &&~TI_TDC720x_INTB1_PIN; //清除中断标志
// TI_TDC720x_INTB_PxIE |= TI_TDC720x_INTB1_PIN; //启用端口中断

如果在 InitMCU 之后 LED 持续闪烁、//振荡器失败
InitMCU ();


TI_TDC720x_SPIByteWriteReg (TI_TDC720x_config1_REG、0x01、TDC720x_TDC2);

TI_TDC720x_SPISetup(); //初始化 MSP430 SPI 块

//测试 TDC720x 寄存器读取/写入和转换
READ_Val [0]= TI_TDC720x_SPIByteReadReg (0x00、TDC720x_TDC2);
READ_VAL [1]= TI_TDC720x_SPIByteReadReg (0x01、TDC720x_TDC2
);READ_TDC720x_TDC03]= TI_TEVAL TDC720x_TDC2);
TI_TDC720x_SPIByteWriteReg (0x01、0x40、TDC720x_TDC2);
Read_val [0]= TI_TDC720x_SPIByteReadReg (0x00、 TDC720x_TDC2);
Read_val [1]= TI_TDC720x_SPIByteReadReg (0x01、TDC720x_TDC2);
Read_val [2]= TI_TDC720x_SPIByteReadReg (0x03、TDC720x_TDC2);
#if 0
//读取 CONFIG1寄存
器 BYTE_DATA = TI_TDC720x_SPIByteReadReg (TI_TDC720x_CONFIG1_REG、TDC720x_TDC2);
//设置模式2 &开始测量位
BYTE_DATA |= 0x03;
TI_TDC720x_SPIByteReg (TI_TDC720x_TDC2、TDC720x_TDC2);CONFIG1字节

//等待 INTB 引脚变为低电平
TOUT = 0;
while (TI_TDC720x_INTB_PxIN & TI_TDC720x_INTB2_PIN)
{
TOUT++;
if (TOUT >= TIMEOUT_VALUE)
break;
}
TI_TDC720x_SPIALReadReg (ALL_DATA、TDC720x_TDC2);
clk_count = TI_TDC720x_SPILongReadReg (0x11、TDC720x_TDC2);
#endif


//如果
(read_val[1]= 0x40)
{、则测试字节写入/读取值是否匹配
while (1) //无错误:LED 持续闪烁
{
_DELAY_CYCLES (250000);
_DELAY_CYCLES (250000);
TI_TDC720x_GLED_PxOUT ^= TI_TDC720x_GLED_PIN;
}
}否则
{
TI_TDC720x_GLED_PxOUT &=~TI_TDC720x_GLED_PIN; //错误:将 LED 设置为关闭
}
__bis_SR_register (LPM0_bits + GIE); //输入 LPM0,启用中断
__NO_OPERATION (); //调试

器}
//*********
//
/**
*@简略函数名称:init_Clock。
*@简要说明:初始化 MSP430时钟模块。
*@参数:无
*@返回值 :无
*//*********

void Init_Clock (void)
{
// UCSCTL3 = SELREF_2; //设置 DCO FLL 基准= REFO
// UCSCTL4 |= SELA _2; //设置 ACLK = REFO
//启用 XT2 XIN/XOUT 引脚
P5SEL |= 0x0C; //在 P5.3和 P5.2
UCSCTL6上选择 XIN、XOUT &=~XT2OFF; //启用 XT2
UCSCTL6 |= XT2DRIVE_3;

P5SEL |= BIT4+BIT5; //选择 XT1

UCSCTL6 &=~(XT1OFF); //
UCSCTL6上的 XT1 |= XCAP_3; //内部负载电容
UCSCTL3 = 0; // FLL 参考时钟= XT1

//循环、直到 XT1、XT2和 DCO 稳定-在本例中循环、直到 XT1和 DCO 稳定


UCSCTL7 &=~(XT2OFFG + XT1LFOFFG + DCOFFG);
//清除 XT2、XT1、DCO 故障标志
SFRIFG1 &=~OFIFG; //清除故障标志
TI_TDC720x_RLED_PxOUT ^= TI_TDC720x_RLED_PIN; //切换 LED
_DELAY_CYCLES (250000);
} while (SFRIFG1&OFIFG); //测试振荡器故障标志

UCSCTL6 &=~(XT1DRIVE_3); // XTAL 现在是稳定的、减少 UCSCTL4的驱动强度

|= SE拉美_0; // ACLK = LFTX1 (默认)

__bis_SR_register (SCG0); //禁用 FLL 控制环路
UCSCTL0 = 0x0000; //设置可能的最低 DCOx、MODx
UCSCTL1 = DCORSEL_7; //选择 DCO 范围50MHz 运行
UCSCTL2 = FLLD_0 + 747; //将 DCO 乘法器(762/498)设置为25MHz/16MHz
//(N + 1)* FLLRef = Fdco
//(762 + 1)* 32768 = 25MHz
//设置 FLL Div = fDCOCLK/2
__BIC_SR_register (SCG0); //启用 FLL 控制环路

// DCO 范围位已
更改时最坏情况下的稳定时间//为 n x 32 x 32 x f_MCLK /f_FLL_reference。
有关优化、请参阅5xx // UG 中的 UCS 一章。
// 32 x 32 x 25MHz / 32、768Hz ~ 780k MCLK 周期、以便 DCO 稳定
__delay_cycles (782000);

//循环、直到 XT1、XT2和 DCO 稳定-在本例中、只有 DCO 必须稳定
执行
{
UCSCTL7 &=~(XT2OFFG + XT1LFOFFG + DCOFFG);
//清除 XT2、XT1、DCO 故障标志
SFRIFG1 &=~OFIFG; //清除故障标志
TI_TDC720x_RLED_PxOUT ^= TI_TDC720x_RLED_PIN; //切换 LED
_DELAY_CYCLES (250000);
} while (SFRIFG1&OFIFG); //测试振荡器故障标志

UCSCTL4 = SELA_XT1CLK + SELESS__DCOCLKDIV + SELM_DCOCLKDIV; // SMCLK=MCLK=

//循环直到 XT1、XT2和 DCO 稳定-在这种情况下,只有 DCO 必须稳定
DO
{
UCSCTL7 &=~(XT2OFFG + XT1LFOFFG + DCOFFG);
//清除 XT2、XT1、DCO 故障标志
SFRIFG1 &=~OFIFG; //清除故障标志
TI_TDC720x_RLED_PxOUT ^= TI_TDC720x_RLED_PIN; //切换 LED
_DELAY_CYCLES (250000);
} while (SFRIFG1&OFIFG); //测试振荡器故障标志

TI_TDC720x_RLED_PxOUT &=~TI_TDC720x_RLED_PIN; //关闭红色

}
//*********
/**
*@本地功能简介。
*/

/**
*@简略函数名称:InitMCU。
*@简要说明:初始化 MSP430外设和模块。
*@参数:无
*@返回值 :无
*//*********

void InitMCU (void)
{

_disable_interrupt (); //禁用全局中断
SetVCore (3);
init_Clock(); //Init 时钟
__ENABLE_INTERRUPT (); //启用全局中断

}
//*********

唯一改变的是选择和使用 TDC2、而不是 TDC1。  

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

    当您说它不再读取任何测量值时、您意味着寄存器未更新、或者由于 SPI 问题、MSP 无法读取寄存器?

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

    嘿、Scott、

    我不能完全确定具体问题是什么。 我设法让 TDC2在 GUI 上进行测量、但 TDC1不会进行任何测量。 我曾尝试将 TDC1与 Arduino UNO 和 MSP430连接、因此我不确定是不是这导致了问题。 我可以在每种情况下发布我用于此目的的代码以及一个粗略的方框图、如果这样做有帮助的话。

    Dan