enviando datos con cc2510

0

Hy, estoy intentando enviar un paquete simple de 1 byte con cc2510dk-mini. La idea es presionar el botón en el dispositivo y el led en el otro se enciende. Estoy atascado con el problema, cuando intento enviar datos, la radio se desborda y simplemente envía un preámbulo.

aquí está mi código (escrito en IAR)

#include <ioCC2510.h>
#include <ioCC2510_bitdef.h>

unsigned int i,s_1,s_2;

int S1(void){

if(P1_2 == 0){
   for(i=0;i<2000;i++);
   if(P1_2 == 0){
     return 1;
     }
   else 
     return 0;
 }
 else
   return 0;

}

int S2(void){

if(P1_3 == 0){
  for(i=0;i<20000;i++);
  if(P1_3 == 0){
   return 1;
   }
  else 
    return 0;
  }
else
  return 0;  

}

int main(void)
{ 


P1DIR       =0x03;
P1_0 = 0;
P1_1 = 0;

// Set the system clock source to HS XOSC and max CPU speed,
// ref. [clk]=>[clk_xosc.c]

SLEEP &= ~SLEEP_OSC_PD;
while( !(SLEEP & SLEEP_XOSC_S) );
CLKCON = (CLKCON & ~(CLKCON_CLKSPD | CLKCON_OSC)) | CLKSPD_DIV_1;
while (CLKCON & CLKCON_OSC);
SLEEP |= SLEEP_OSC_PD;


/* Setup radio with settings from SmartRF® Studio. The default settings are
 * used, except that "unmodulated" is chosen in the "Simple RX tab". This
 * results in an umodulated carrier with a frequency of approx. 2.433 GHz.
 */

FSCTRL1   = 0x0A;   // Frequency synthesizer control.
FSCTRL0   = 0x00;   // Frequency synthesizer control.
FREQ2     = 0x5D;   // Frequency control word, high byte.
FREQ1     = 0x93;   // Frequency control word, middle byte.
FREQ0     = 0xB1;   // Frequency control word, low byte.
MDMCFG4   = 0x86;   // Modem configuration.
MDMCFG3   = 0x83;   // Modem configuration.
MDMCFG2   = 0x30;   // Modem configuration.
MDMCFG1   = 0x22;   // Modem configuration.
MDMCFG0   = 0xF8;   // Modem configuration.
CHANNR    = 0x00;   // Channel number.
DEVIATN   = 0x00;   // Modem deviation setting (when FSK modulation is enabled).
FREND1    = 0x56;   // Front end RX configuration.
FREND0    = 0x10;   // Front end RX configuration.
MCSM0     = 0x14;   // Main Radio Control State Machine configuration.
FOCCFG    = 0x16;   // Frequency Offset Compensation Configuration.
BSCFG     = 0x6C;   // Bit synchronization Configuration.
AGCCTRL2  = 0x03;   // AGC control.
AGCCTRL1  = 0x40;   // AGC control.
AGCCTRL0  = 0x91;   // AGC control.
FSCAL3    = 0xA9;   // Frequency synthesizer calibration.
FSCAL2    = 0x0A;   // Frequency synthesizer calibration.
FSCAL1    = 0x00;   // Frequency synthesizer calibration.
FSCAL0    = 0x11;   // Frequency synthesizer calibration.
TEST2     = 0x88;   // Various test settings.
TEST1     = 0x31;   // Various test settings.
TEST0     = 0x09;   // Various test settings.
PA_TABLE0 = 0xFE;   // PA output power setting.
PKTCTRL1  = 0x00;   // Packet automation control.
PKTCTRL0  = 0x00;   // Packet automation control.
ADDR      = 0x00;   // Device address.
PKTLEN    = 0x01;   // Packet length.
MCSM1     = 0x30;
/* Settings not from SmartRF® Studio. Setting both sync word registers to
 * 0xAA = 0b10101010, i.e., the same as the preamble pattern. Not necessary,
 * but gives control of what the radio attempts to transmit.
 */
SYNC1     = 0xAA;
SYNC0     = 0xAA;

//RFD = 0x00;


while (1){

  s_1 = S1();
  s_2 = S2();

  while( ( s_1 == S1() )  &&   ( s_2 == S2() ) ); 



  if(s_1){
                /* Put radio in TX. */
              RFST      = RFST_STX;


              /* Wait for radio to enter TX. */

               while (!(RFTXRXIF));

               RFD = 0x01;

               RFTXRXIF &= 1;


              //for(i=0;i<60000;i++);
              P1_0 = 1;
              //RFST = RFST_SIDLE;

        }
  else
      {
              RFST      = RFST_STX;


              /* Wait for radio to enter TX. */

               while (!(RFTXRXIF));

               RFD = 0x00;

               RFTXRXIF &= 1;

               P1_0 = 0;
      }

  if(s_2){
               RFST      = RFST_STX;


              /* Wait for radio to enter TX. */

               while (!(RFTXRXIF));

               RFD = 0x02; 

               RFTXRXIF &= 1;

                P1_1 = 1;

              //RFST = RFST_SIDLE;
              //while ((MARCSTATE & MARCSTATE_MARC_STATE) != MARC_STATE_ENDCAL);
        }

 else
      {

              RFST      = RFST_STX;


              /* Wait for radio to enter TX. */

               while (!(RFTXRXIF));

               RFD = 0x00; 

               RFTXRXIF &= 1;

                P1_1 = 0;

        }


  if(RFIF_IRQ_TXUNF){
    while(1){
      P1_0 = ~P1_0;
      P1_1 = ~P1_1;
      for(i=0;i<10000;i++);
    }
  }



}

return 0;
}
    
pregunta user34886

1 respuesta

1

No estoy familiarizado con ese chip pero tengo una experiencia con cc1101. No sé cuál es su configuración, pero poner un resumen de la configuración de smartrf ayudará enormemente a las personas a dar sugerencias.

Mirando el código, parece que no está colocando ningún dato en el búfer tx, por lo tanto, obtiene el desbordamiento. Lo que normalmente hago es colocar los datos en el búfer de tx y luego estrobo la radio para tx. Espero que cc1101 comparta las mismas similitudes con la que está utilizando.

    
respondido por el newbie programmerz

Lea otras preguntas en las etiquetas