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.

SIMPLICITI: SMPL_SendOpts() API has in-built CCA feature?

Part Number: SIMPLICITI
Other Parts Discussed in Thread: CC2500, MSP430F5529

Hi,

 I have established the simpliciti protocol between two ez430-rf2500 usb modules. I want to know if by using SMPL_SendOpts(), the clear channel assessment is automatically taken care of. The API guide of simpliciti states that "By default the transmit attempt always enforces CCA."  

 

Thanks

  • Vignesh,

    Yes, SimpliciTI includes CCA.

    Regards,
    /TA
  • Hi,

    Thanks for the reply. I'm facing another issue. I'm using a custom board with MSP430F5529 with CC2500 and running Simpliciti on it. Simple peer to peer application is working fine. Now, I want to use the accelerometer on board (NXP's MMA8452Q ) that talks with the MCU via I2C. Accelerometer initialization is done properly  and independently without the presence of Simpliciti it is working fine. But when I try to integrate the accelerometer code with the Simpliciti, there seems to be some issue with the declaration of ISR for the accelerometer. I get the following error:

    #10056 symbol "__TI_int47" redefined: first defined in "./main_TX.obj"; redefined in "./Components/mrfi/mrfi.obj" MSP430F5529_simpliciti_v3 C/C++ Problem

    Please find the code below:

    #include <msp430.h>
    #include "bsp.h"
    #include "mrfi.h"
    #include "nwk_types.h"
    #include "nwk_api.h"
    #include "bsp_leds.h"
    #include "bsp_buttons.h"
    #include "driverlib.h"
    #include "app_remap_led.h"
    #include "hal.h"
    #include "ACCEL_hal.h"
    
    void initUART(void);
    void UART_write(volatile unsigned char txdata_u8); 
    
    void toggleLED(uint8_t);
    
    static linkID_t sLinkID1 = 0;
    
    
    
    /******** SIMPLICITI VARIABLES *******/
    uint8_t ack;
    uint16_t i=0;
    uint8_t j=0;
    uint16_t k=0;
    uint8_t l=0;
    uint8_t pkt_data[10];
    uint32_t smclk;
    uint32_t mclk;
    uint32_t aclk;
    uint8_t ack_status=0;
    
    /******** ACCELEROMETER VARIABLES *******/
    uint8_t accelScale = 0x00;
    uint8_t accelDataRate = 0x00;
    uint8_t accelNOB = 0x00;
    uint8_t accelPwrMode = 0x00;
    uint8_t inputVector[3]={0};
    uint8_t numberOfBytesInIV = 0x00;
    uint8_t *pInputVector = inputVector;
    volatile uint8_t bAccelDataReady_event = FALSE;
    
    void main (void)
    {
       BSP_Init();
       do {
         if (BSP_BUTTON1() || BSP_BUTTON2())
         {
           break;
         }
       } while (1);
       BSP_TURN_ON_LED1();
       pInputVector = inputVector;
       ACCEL_initI2C();
       ACCEL_setInterruptPolarity(ACCEL_INT_ACTIVE_HIGH);	// set accelerometer INT event to be active high
       ACCEL_setInterruptMap(ACCEL_INTERRUPT_DRDY);	// route INT_DRDY to pin INT1
       ACCEL_enableInterrupt(ACCEL_INTERRUPT_DRDY);	// enable INT_DRDY
       ACCEL_setGPIOInterrupt();
       ACCEL_initAccel(ACCEL_SCALE_8G,ACCEL_DR_50,ACCEL_NOB_8B,ACCEL_PWR_MODE_NORMAL);
       SMPL_Init(NULL);
         while (SMPL_SUCCESS != SMPL_Link(&sLinkID1))    // link to Rx
         {
           BSP_TOGGLE_LED1();                      // toggle red for not linked
         }
         __delay_cycles(2000000);
      // __enable_interrupt();
      
       for(k=0;k<1000;k++)
       {
    	   ACCEL_active();
    	 //  __bis_SR_register(LPM3_bits + GIE);
    	   while(!bAccelDataReady_event);
    	   bAccelDataReady_event = FALSE;
    	   ACCEL_disableInterrupt(ACCEL_INTERRUPT_DRDY);
    	   numberOfBytesInIV = ACCEL_readAccelData( inputVector, accelNOB );
    	   ACCEL_enableInterrupt(ACCEL_INTERRUPT_DRDY);
    	   ACCEL_standby();
    	   ack = SMPL_SendOpt(sLinkID1, (uint8_t *)&inputVector, sizeof(inputVector),SMPL_TXOPTION_ACKREQ);
    	   while(ack==SMPL_NO_ACK)
    	   {
     		ack = SMPL_SendOpt(sLinkID1, (uint8_t *)&pkt_data, sizeof(pkt_data),SMPL_TXOPTION_ACKREQ);
    
    	   }
       }
    
    }
    
    void toggleLED(uint8_t which)
    {
      if (1 == which)
      {
        BSP_TOGGLE_LED1();
      }
      else if (2 == which)
      {
        BSP_TOGGLE_LED2();
      }
      return;
    }
    
    //******************************************************************************
    //This is the PORT_VECTOR interrupt vector service routine
    //******************************************************************************
    #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
    #pragma vector=PORT1_VECTOR
    __interrupt
    #elif defined(__GNUC__)
    __attribute__((interrupt(PORT1_VECTOR)))
    #endif
    void Port_1(void)
    {
    	switch(_even_in_range(P1IV, 0x0E)){
    //	case 0x00: break;
    //	// P1.0 interrupt from CC2500 GDO0
    	case 0x02:break;
    	case 0x04: break;
    //	case 0x06: break;
    //	// P1.3 interrupt from push button
    //	case 0x08: break;
    	case 0x0A: break;
    	case 0x0C: break;
    	case 0x0E: break;
    	// P1.7 interrupt from accelerometer INT1
    	case 0x10:{
    		bAccelDataReady_event = TRUE;
    		//__bic_SR_register_on_exit(LPM3_bits);       // Exit LPM0
    		break;
    	}
    	default:_never_executed();
    		}
    	}
    

  • This indicates that you created two definitions for the same resource. In this case you have added two definitions on Interrupt vector 47. You will need to find the two definitions in your complete project and then merge the definitions to have what you need in one definitions.

    /TA