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;
}