SparkFun Forums 

Where electronics enthusiasts find answers.

Discussions on how to get your MSP JTAG programmer up and running.
By nick836
#57664
Hello.

I'm implementing two software for two msp430 connected with CC1100. I'm using 2 smartrf04EB, i eliminated 0 ohms resistors 114,115,116,117, 121, 122 and i have connected on the P11 msp430f427. I used MSP430 Interface to CC11002500 Code Library, but i change file main.c, TI_CC_msp430.h, TI_CC_hardware board.h. I can't trasmitt packet between the two transceivers. What is it wrong? here is the two main file:

MAIN TX:

#include "include.h"


static unsigned int results; // Variable to store SD16 conversion results
static unsigned char ADCH, ADCL; //Variable to store first and second 8 bit ADC conversion

char txBuffer[4];

void main (void)
{

WDTCTL = WDTPW + WDTHOLD; // Stop WDT
FLL_CTL0 |= XCAP14PF; // Configure load caps

TI_CC_SPISetup(); // Initialize SPI port

TI_CC_PowerupResetCCxxxx(); // Reset CCxxxx
writeRFSettings(); // Write RF settings to config reg
TI_CC_SPIWriteReg(TI_CCxxx0_PATABLE, 0xC0);//Write PATABLE

SD16CTL = SD16REFON+SD16SSEL0; // 1.2V ref, SMCLK
SD16INCTL2 = SD16INTDLY_1; // Interrupt on 3rd sample
SD16CCTL2 = SD16IE; // Enable interrupt
for (i = 0; i < 0x3600; i++); // Delay for 1.2V ref startup

_EINT(); // Enable general interrupts

SD16CCTL2 |= SD16SC; // Set bit to start conversion

_BIS_SR(LPM3_bits + GIE); // Enter LPM3, enable interrupts
}


#pragma vector=SD16_VECTOR
__interrupt void SD16ISR(void)
{

switch (SD16IV)
{
case 2: // SD16MEM Overflow
break;
case 4: // SD16MEM0 IFG
break;
case 6: // SD16MEM1 IFG
break;
case 8: // SD16MEM2 IFG
results = SD16MEM2; // Save CH2 results (clears IFG)
ADCH= (results >> 8) & 0x00FF;
ADCL= results & 0x00FF;

// Build packet
txBuffer[0] = 2; // Packet length
txBuffer[1] = ADCH; // first 8 bit
txBuffer[2] = ADCL; // second 8 bit

RFSendPacket(txBuffer, 3); // Send value over RF
P2IFG &= ~TI_CC_GDO0_PIN; // After pkt TX, this flag is set. // Clear it.
break;
}
}



MAIN RX:

#include "include.h"

static char rxBuffer[2];

void main (void)
{

WDTCTL = WDTPW + WDTHOLD; // Stop WDT
TI_CC_LED_PxDIR = TI_CC_LED1 + TI_CC_LED2; //Outputs
TI_CC_SPISetup(); // Initialize SPI port

TI_CC_PowerupResetCCxxxx(); // Reset CCxxxx
writeRFSettings(); // Write RF settings to config reg
TI_CC_SPIWriteReg(TI_CCxxx0_PATABLE, paTable);//Write PATABLE

TI_CC_SPIStrobe(TI_CCxxx0_SRX); // Initialize CCxxxx in RX mode.
_BIS_SR(LPM3_bits + GIE); // Enter LPM3, enable interrupts
}


// The ISR assumes the int came from the pin attached to GDO0 and therefore
// does not check the other seven inputs. Interprets this as a signal from
// CCxxxx indicating packet received.
#pragma vector=PORT2_VECTOR
__interrupt void port2_ISR (void)
{
char len=2; // Len of pkt to be RXed (only addr
// plus data; size byte not incl b/c
// stripped away within RX function)
RFReceivePacket(rxBuffer,&len); // Fetch packet from CCxxxx

P2IFG &= ~TI_CC_GDO0_PIN;

return;

}
By nick836
#57832
The software is blocked in this point: (CC1100-CC2500.c)

void RFSendPacket(char *txBuffer, char size)
{
TI_CC_SPIWriteBurstReg(TI_CCxxx0_TXFIFO, txBuffer, size); // Write TX data
TI_CC_SPIStrobe(TI_CCxxx0_STX); // Change state to TX, initiating
// data transfer

while (!(TI_CC_GDO0_PxIN&TI_CC_GDO0_PIN));
// Wait GDO0 to go hi -> sync TX'ed
while (TI_CC_GDO0_PxIN&TI_CC_GDO0_PIN);

Why pin GDO0 doesn't go hi?