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.

TDC7201: How to get ToF data from TDC7201 to MSP430f5529 without GUI connection?

Part Number: TDC7201
Other Parts Discussed in Thread: MSP430F5529, ENERGIA

Hi,

I would like to know, how can I get the tof data from the TDC7210 to MSP430f5529 without gui connection. In this EVM firmware, how can I add modified function?

//******************************************************************************
//  Demo Application01 for MSP430/TDC720x Interface Code Library v1.0
//  Byte Read/ Byte Write TDC720x Registers
//
//                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.
//   March 2013
//   Built with IAR Embedded Workbench Version:  5.5x
//******************************************************************************
/*  Copyright 2011-2012 Texas Instruments Incorporated. All rights reserved.

  IMPORTANT: Your use of this Software is limited to those specific rights
  granted under the terms of a software license agreement between the user who
  downloaded the software, his/her employer (which must be your employer) and
  Texas Instruments Incorporated (the "License"). You may not use this Software
  unless you agree to abide by the terms of the License. The License limits your
  use, and you acknowledge, that the Software may not be modified, copied or
  distributed unless embedded on a Texas Instruments microcontroller which is
  integrated into your product. Other than for the foregoing purpose, you may
  not use, reproduce, copy, prepare derivative works of, modify, distribute,
  perform, display or sell this Software and/or its documentation for any
  purpose.

  YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE
  PROVIDED 鄭S IS� WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
  INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE,
  NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL TEXAS
  INSTRUMENTS OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT,
  NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL
  EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT
  LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL
  DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS,
  TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT
  LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.

  Should you have any questions regarding your right to use this Software,
  contact Texas Instruments Incorporated at www.TI.com.
*******************************************************************************/
#include <stdio.h>
#include <stdint.h>
#include "TI_TDC720x.h"
#include "TI_MSP430.h"
#include "TI_MSP430_hardware_board.h"
#include "TI_MSP430_spi.h"
#include "HAL_PMM.h"

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


// Test TDC720x Register Read/Write & Conversion
uint32_t clk_count;
uint8_t read_val[3], all_data[TDC720x_ALL_DATA_SIZE], byte_data;
uint32_t tout = 0;

uint8_t TDC720x_Parallel_Read = 1;
//******************************************************************************
void main(void)
{


  WDTCTL = WDTPW+WDTHOLD;                                                      // Stop WDT 

  TI_TDC720x_GLED_PxOUT |= TI_TDC720x_GLED_PIN;                                // Set LED ON
  TI_TDC720x_GLED_PxDIR |= TI_TDC720x_GLED_PIN;                                // Set pin direction is output

  TI_TDC720x_RLED_PxOUT &= ~TI_TDC720x_RLED_PIN;                                // Set RLED OFF
  TI_TDC720x_RLED_PxDIR |= TI_TDC720x_RLED_PIN;                                // Set pin direction

  TI_TDC720x_OSCENABLE_PxOUT |= TI_TDC720x_OSCENABLE_PIN;                    // Set pin high: enable afe osc
  TI_TDC720x_OSCENABLE_PxDIR |= TI_TDC720x_OSCENABLE_PIN;                    // Set pin direction is output

  
  TI_TDC720x_ENABLE1_PxOUT |= TI_TDC720x_ENABLE1_PIN;                            // Enable device
  TI_TDC720x_ENABLE1_PxDIR |= TI_TDC720x_ENABLE1_PIN;                            // Set pin direction output

#if 0
  TI_TDC720x_FLAG_PxOUT |= TI_TDC720x_FLAG_PIN;                                // Flag Input Pull up enable
  TI_TDC720x_FLAG_PxREN |= TI_TDC720x_FLAG_PIN;                                // Flag Input Resistor enable
  TI_TDC720x_FLAG_PxDIR &= ~TI_TDC720x_FLAG_PIN;                               // Set pin direction input
#endif
  
  // configure Port Pin to handle Interrupt Bar Output (INTB) from TDC720x
  TI_TDC720x_INTB_PxDIR &= ~TI_TDC720x_INTB1_PIN;                               // Set up port pin for INTB
  TI_TDC720x_INTB_PxOUT |= TI_TDC720x_INTB1_PIN;                                // INTB Input Pull up enable
  TI_TDC720x_INTB_PxREN |= TI_TDC720x_INTB1_PIN;                                // INTB Input Resistor enable
  TI_TDC720x_INTB_PxIES |= TI_TDC720x_INTB1_PIN;                                // Interrupt Edge Select
  TI_TDC720x_INTB_PxIFG &= ~TI_TDC720x_INTB1_PIN;                               // Clear Interrupt Flag
//  TI_TDC720x_INTB_PxIE |= TI_TDC720x_INTB1_PIN;                               // Enable Port interrupt
  
  // oscillator fail if LED keeps flashing after InitMCU     
  InitMCU();

  TI_TDC720x_SPISetup();                                                       // Initilaize MSP430 SPI Block

// Test TDC720x Register Read/Write & Conversion
  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);
  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
  // read config1 register
  byte_data = TI_TDC720x_SPIByteReadReg(TI_TDC720x_CONFIG1_REG, TDC720x_TDC1);
  // set mode 2 & start measurement bit
  byte_data |= 0x03;
  TI_TDC720x_SPIByteWriteReg(TI_TDC720x_CONFIG1_REG, byte_data, TDC720x_TDC1);

  //wait for INTB pin to go low
  tout = 0;
  while(TI_TDC720x_INTB_PxIN & TI_TDC720x_INTB1_PIN)
  {
    tout++;
    if (tout >= TIMEOUT_VALUE)
       break;
  }
  TI_TDC720x_SPIAllReadReg(all_data, TDC720x_TDC1);
  clk_count = TI_TDC720x_SPILongReadReg(0x11, TDC720x_TDC1);

#endif
  // test if byte write/read values match
  if (read_val[1]  == 0x40)
  {
     while (1)                                                                 // no error: blink LED continuously
    {
      __delay_cycles(250000);
      __delay_cycles(250000);
      TI_TDC720x_GLED_PxOUT ^= TI_TDC720x_GLED_PIN;
    }
  } else
  {
    TI_TDC720x_GLED_PxOUT &= ~TI_TDC720x_GLED_PIN;                             // error: Set LED OFF
  }

  __bis_SR_register(LPM0_bits + GIE);                                          // Enter LPM0, enable interrupts
  __no_operation();                                                            // For debugger

}
//******************************************************************************
//******************************************************************************
/**
* @brief Function Name: Init_Clock .
* @brief Description  : Initializes MSP430 clock module.
* @param parameters   : none                                                    
* @return Value       : none                                                    
*/
//******************************************************************************
void Init_Clock(void)
{
//  UCSCTL3 = SELREF_2;                       // Set DCO FLL reference = REFO
//  UCSCTL4 |= SELA_2;                        // Set ACLK = REFO
  // Enable XT2 XIN/XOUT Pins
  P5SEL |= 0x0C;                            // Select XIN, XOUT on P5.3 and P5.2
  UCSCTL6 &= ~XT2OFF;                       // Enable XT2  
  UCSCTL6 |= XT2DRIVE_3; 
  
  P5SEL |= BIT4+BIT5;                       // Select XT1

  UCSCTL6 &= ~(XT1OFF);                     // XT1 On
  UCSCTL6 |= XCAP_3;                        // Internal load cap
  UCSCTL3 = 0;                              // FLL Reference Clock = XT1

  // Loop until XT1,XT2 & DCO stabilizes - In this case loop until XT1 and DCo settle
  do
  {
    UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);
                                            // Clear XT2,XT1,DCO fault flags
    SFRIFG1 &= ~OFIFG;                      // Clear fault flags
    TI_TDC720x_RLED_PxOUT ^= TI_TDC720x_RLED_PIN;                              // Toggle LED
    __delay_cycles(250000);
  }while (SFRIFG1&OFIFG);                   // Test oscillator fault flag
  
  UCSCTL6 &= ~(XT1DRIVE_3);                 // Xtal is now stable, reduce drive strength

  UCSCTL4 |= SELA_0;                        // ACLK = LFTX1 (by default)

  __bis_SR_register(SCG0);                  // Disable the FLL control loop
  UCSCTL0 = 0x0000;                         // Set lowest possible DCOx, MODx
  UCSCTL1 = DCORSEL_7;                      // Select DCO range 50MHz operation
  UCSCTL2 = FLLD_0 + 747;                   // Set DCO Multiplier(762/498) for 25MHz/16MHz
                                            // (N + 1) * FLLRef = Fdco
                                            // (762 + 1) * 32768 = 25MHz
                                            // Set FLL Div = fDCOCLK/2
  __bic_SR_register(SCG0);                  // Enable the FLL control loop

  // Worst-case settling time for the DCO when the DCO range bits have been
  // changed is n x 32 x 32 x f_MCLK / f_FLL_reference. See UCS chapter in 5xx
  // UG for optimization.
  // 32 x 32 x 25 MHz / 32,768 Hz ~ 780k MCLK cycles for DCO to settle
  __delay_cycles(782000);

  // Loop until XT1,XT2 & DCO stabilizes - In this case only DCO has to stabilize
  do
  {
    UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);
                                            // Clear XT2,XT1,DCO fault flags
    SFRIFG1 &= ~OFIFG;                      // Clear fault flags
    TI_TDC720x_RLED_PxOUT ^= TI_TDC720x_RLED_PIN;                              // Toggle LED
    __delay_cycles(250000);    
  }while (SFRIFG1&OFIFG);                   // Test oscillator fault flag  

  UCSCTL4 = SELA__XT1CLK + SELS__DCOCLKDIV + SELM__DCOCLKDIV;                  // SMCLK=MCLK=

  // Loop until XT1,XT2 & DCO stabilizes - In this case only DCO has to stabilize
  do
  {
    UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);
                                            // Clear XT2,XT1,DCO fault flags
    SFRIFG1 &= ~OFIFG;                      // Clear fault flags
    TI_TDC720x_RLED_PxOUT ^= TI_TDC720x_RLED_PIN;                              // Toggle LED
    __delay_cycles(250000);    
  }while (SFRIFG1&OFIFG);                   // Test oscillator fault flag  
     
  TI_TDC720x_RLED_PxOUT &= ~TI_TDC720x_RLED_PIN;                                // turn off red  

}
//******************************************************************************
/**
* @brief  Local functions.
*/

/**
* @brief Function Name:  InitMCU.
* @brief Description  :  Initializes the MSP430 peripherals and modules.
* @param parameters   :  none
* @return Value       :  none
*/
//******************************************************************************
void InitMCU(void)
{

  __disable_interrupt();                                                       // Disable global interrupts
    SetVCore(3);
    Init_Clock();                                                              //Init clocks
  __enable_interrupt();                                                        // enable global interrupts

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

Thank you.

Ahmed Syed Fahin