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.

CC430 Long transmit time

Other Parts Discussed in Thread: CC430F5137, CC1101, TEST2

Hi everyone,

I'm developing an application using a CC430F5137 in CCS 5.4.0 My trouble is an overly long transmit time using the built in CC1101 based radio. My register settings are below, but to summarize, I have set the device to 200kBaud, and am using 4-FSK modulation. The application does not need multiple channels so I've used close to the maximum allowable bandwidth for the receive filter, and the my deviation is set high for this same reason. At this transmit rate, at 4-FSK, my effective transmit rate should be near 400kBaud. The trouble is, during my testing I am seeing the current consumption spike for roughly 250ms. I am transmitting only 6 bytes, using a 16 bit sync word and the minimum number of preamble bytes. According to my math, at this rate, the 10 byte package should take only .2 ms to transmit, so I'm surprised to see the related current consumption last a full quarter of a second. The project I'm using to test this is a separate one, so there are no bells and whistles, the only thing running is the radio, and a single 1 second timer that contains the code that triggers the transmit, and the transmit is turned off as quickly as possible using the CC1101 interrupt at the end of tx. The rest of the time the CC430 is in LPM4. I would like to know if this is expected behavior, what I might be doing wrong, and appreciate any and all help! Thanks!

#define SMARTRF_SETTING_FREQ2      0x10 // 433.5 MHz
#define SMARTRF_SETTING_FREQ1      0xAC
#define SMARTRF_SETTING_FREQ0      0x0E

#define SMARTRF_SETTING_MDMCFG2    0x41 //4-FSK, 15/16 sync word bits detected

#define SMARTRF_SETTING_MDMCFG1    0x00 //2 preamble bytes
#define SMARTRF_SETTING_MDMCFG0    0xF8
#define SMARTRF_SETTING_DEVIATN       0x74    //near max spacing, 304687 Hz, in 4 FSK adjacent signals are          separated by 2/3rd this amount, or ~254 kHz

#define SMARTRF_SETTING_MDMCFG4    0x00 //BW = 812 kHz, DRATE_E = 12
#define SMARTRF_SETTING_MDMCFG3    0xF8 //DRATE_M = 248, DRATE setting select 200kHz data rate

#define SMARTRF_SETTING_CHANNR     0x00

#define SMARTRF_SETTING_FREND1     0x56
#define SMARTRF_SETTING_FREND0     0x10

#define SMARTRF_SETTING_MCSM0      0x18
#define SMARTRF_SETTING_MCSM1      0x3C
#define SMARTRF_SETTING_MCSM2      0x07
#define SMARTRF_SETTING_FOCCFG     0x16
#define SMARTRF_SETTING_BSCFG      0x6C

#define SMARTRF_SETTING_AGCCTRL2   0x03
#define SMARTRF_SETTING_AGCCTRL1   0x40
#define SMARTRF_SETTING_AGCCTRL0   0x91

#define SMARTRF_SETTING_FSCAL3     0xEA
#define SMARTRF_SETTING_FSCAL2     0x2A
#define SMARTRF_SETTING_FSCAL1     0x00
#define SMARTRF_SETTING_FSCAL0     0x1F
#define SMARTRF_SETTING_FSTEST     0x59

#define SMARTRF_SETTING_TEST2      0x88
#define SMARTRF_SETTING_TEST1      0x31
#define SMARTRF_SETTING_TEST0      0x09


#define SMARTRF_SETTING_FIFOTHR    0x07

#define SMARTRF_SETTING_IOCFG2     0x29
#define SMARTRF_SETTING_IOCFG1     0x2E
#define SMARTRF_SETTING_IOCFG0     0x06

#define SMARTRF_SETTING_PKTCTRL1   0x04//append status set, RSSI will be appended to data payload
#define SMARTRF_SETTING_PKTCTRL0   0x05//0x00

#define SMARTRF_SETTING_ADDR       0x00
#define SMARTRF_SETTING_PKTLEN     0xff

The contents of the transmit function called in the 1 second interrupt:

void Transmit(unsigned char *buffer, unsigned char length)
{

    transmitting = 1;

    receiving = 0;

    WriteSingleReg(PKTLEN,   length);

    WriteBurstReg(RF_TXFIFOWR, buffer, length);

    RF1AIES |= BIT9;
    RF1AIFG &= ~BIT9;                         // Clear pending interrupts
    RF1AIE |= BIT9;                           // Enable TX end-of-packet interrupt

    Strobe( RF_STX );                         // Strobe STX
}

the CC1101 ISR:

__interrupt void CC1101_ISR(void)
{
    switch(__even_in_range(RF1AIV,32))        // Prioritizing Radio Core Interrupt
    {
        case  0: break;                         // No RF core interrupt pending
        case  2: break;                         // RFIFG0
        case  4: break;                         // RFIFG1
        case  6: break;                         // RFIFG2
        case  8: break;                         // RFIFG3
        case 10: break;                         // RFIFG4
        case 12: break;                         // RFIFG5
        case 14: break;                         // RFIFG6
        case 16: break;                         // RFIFG7
        case 18: break;                         // RFIFG8
        case 20:                                // RFIFG9
            if(receiving)                // RX end of packet
            {
                // Read the length byte from the FIFO
                RxBufferLength = ReadSingleReg( RXBYTES );
                ReadBurstReg(RF_RXFIFORD, RxBuffer, RxBufferLength);
   

                // Stop here to see contents of RxBuffer
                __no_operation();
            
            }
            else if(transmitting)                    // TX end of packet
            {
               
                RF1AIE &= ~BIT9;                    // Disable TX end-of-packet interrupt
                transmitting = 0;

                Strobe( RF_SFTX  ); //flush the TX fifo
            }
            else while(1);                 // trap
            break;
        case 22: break;                         // RFIFG10
        case 24: break;                         // RFIFG11
        case 26: break;                         // RFIFG12
        case 28: break;                         // RFIFG13
        case 30: break;                         // RFIFG14
        case 32: break;                         // RFIFG15
    }
    // __bic_SR_register_on_exit(LPM3_bits);
}

  • Hi

    When using 4FSK the preamble and sync word is still transmitted using 2FSK. This means that you have 4x8 bits transmitted at 200 kbps and (6+2)x2 bits transmitted at 400 kbps (the 2 extra bytes is for the payload). This gives a TX time of 320 us

    BR

    Siri