liuzs09 发表于 2012-4-13 14:57:51

请教一个下 MSP430+CC1101 程序编写问题

小弟我最近在学习CC1101,但是弄了几天还是没什么结果,想用硬件SPI实现的,能设置寄存器也能读出寄存器的值,但是发射接受测验的时候没反应啊,程序是在TI提供的接口库基础上修改过来的,基本上我只改动了硬件接口部分,其他的都没怎么修改,但是就是无法接收到任何东西啊,忘各位大神指点一二

USACH 发表于 2012-4-13 16:16:08

频率对么?你需要用可以正常工作的套件慢慢调,等你都会啦再来。可以问T I 买成品套件。

liuzs09 发表于 2012-4-13 17:29:59

我用的是网上买的模块,现在我手头上有五块,情况都是一样,具体是什么问题还没有找到

liuzs09 发表于 2012-4-13 19:44:10

#include <MSP430x14x.h>

// Configuration Registers
#define CC1101_IOCFG2       0x00      // GDO2 output pin configuration
#define CC1101_IOCFG1       0x01      // GDO1 output pin configuration
#define CC1101_IOCFG0       0x02      // GDO0 output pin configuration
#define CC1101_FIFOTHR      0x03      // RX FIFO and TX FIFO thresholds
#define CC1101_SYNC1      0x04      // Sync word, high byte
#define CC1101_SYNC0      0x05      // Sync word, low byte
#define CC1101_PKTLEN       0x06      // Packet length
#define CC1101_PKTCTRL1   0x07      // Packet automation control
#define CC1101_PKTCTRL0   0x08      // Packet automation control
#define CC1101_ADDR         0x09      // Device address
#define CC1101_CHANNR       0x0A      // Channel number
#define CC1101_FSCTRL1      0x0B      // Frequency synthesizer control
#define CC1101_FSCTRL0      0x0C      // Frequency synthesizer control
#define CC1101_FREQ2      0x0D      // Frequency control word, high byte
#define CC1101_FREQ1      0x0E      // Frequency control word, middle byte
#define CC1101_FREQ0      0x0F      // Frequency control word, low byte
#define CC1101_MDMCFG4      0x10      // Modem configuration
#define CC1101_MDMCFG3      0x11      // Modem configuration
#define CC1101_MDMCFG2      0x12      // Modem configuration
#define CC1101_MDMCFG1      0x13      // Modem configuration
#define CC1101_MDMCFG0      0x14      // Modem configuration
#define CC1101_DEVIATN      0x15      // Modem deviation setting
#define CC1101_MCSM2      0x16      // Main Radio Cntrl State Machine config
#define CC1101_MCSM1      0x17      // Main Radio Cntrl State Machine config
#define CC1101_MCSM0      0x18      // Main Radio Cntrl State Machine config
#define CC1101_FOCCFG       0x19      // Frequency Offset Compensation config
#define CC1101_BSCFG      0x1A      // Bit Synchronization configuration
#define CC1101_AGCCTRL2   0x1B      // AGC control
#define CC1101_AGCCTRL1   0x1C      // AGC control
#define CC1101_AGCCTRL0   0x1D      // AGC control
#define CC1101_WOREVT1      0x1E      // High byte Event 0 timeout
#define CC1101_WOREVT0      0x1F      // Low byte Event 0 timeout
#define CC1101_WORCTRL      0x20      // Wake On Radio control
#define CC1101_FREND1       0x21      // Front end RX configuration
#define CC1101_FREND0       0x22      // Front end TX configuration
#define CC1101_FSCAL3       0x23      // Frequency synthesizer calibration
#define CC1101_FSCAL2       0x24      // Frequency synthesizer calibration
#define CC1101_FSCAL1       0x25      // Frequency synthesizer calibration
#define CC1101_FSCAL0       0x26      // Frequency synthesizer calibration
#define CC1101_RCCTRL1      0x27      // RC oscillator configuration
#define CC1101_RCCTRL0      0x28      // RC oscillator configuration
#define CC1101_FSTEST       0x29      // Frequency synthesizer cal control
#define CC1101_PTEST      0x2A      // Production test
#define CC1101_AGCTEST      0x2B      // AGC test
#define CC1101_TEST2      0x2C      // Various test settings
#define CC1101_TEST1      0x2D      // Various test settings
#define CC1101_TEST0      0x2E      // Various test settings

// Strobe commands
#define CC1101_SRES         0x30      // Reset chip.
#define CC1101_SFSTXON      0x31      // Enable/calibrate freq synthesizer
#define CC1101_SXOFF      0x32      // Turn off crystal oscillator.
#define CC1101_SCAL         0x33      // Calibrate freq synthesizer & disable
#define CC1101_SRX          0x34      // Enable RX.
#define CC1101_STX          0x35      // Enable TX.
#define CC1101_SIDLE      0x36      // Exit RX / TX
#define CC1101_SAFC         0x37      // AFC adjustment of freq synthesizer
#define CC1101_SWOR         0x38      // Start automatic RX polling sequence
#define CC1101_SPWD         0x39      // Enter pwr down mode when CSn goes hi
#define CC1101_SFRX         0x3A      // Flush the RX FIFO buffer.
#define CC1101_SFTX         0x3B      // Flush the TX FIFO buffer.
#define CC1101_SWORRST      0x3C      // Reset real time clock.
#define CC1101_SNOP         0x3D      // No operation.

// Status registers
#define CC1101_PARTNUM      0x30      // Part number
#define CC1101_VERSION      0x31      // Current version number
#define CC1101_FREQEST      0x32      // Frequency offset estimate
#define CC1101_LQI          0x33      // Demodulator estimate for link quality
#define CC1101_RSSI         0x34      // Received signal strength indication
#define CC1101_MARCSTATE    0x35      // Control state machine state
#define CC1101_WORTIME1   0x36      // High byte of WOR timer
#define CC1101_WORTIME0   0x37      // Low byte of WOR timer
#define CC1101_PKTSTATUS    0x38      // Current GDOx status and packet status
#define CC1101_VCO_VC_DAC   0x39      // Current setting from PLL cal module
#define CC1101_TXBYTES      0x3A      // Underflow and # of bytes in TXFIFO
#define CC1101_RXBYTES      0x3B      // Overflow and # of bytes in RXFIFO
#define CC1101_NUM_RXBYTES0x7F      // Mask "# of bytes" field in _RXBYTES

// Other memory locations
#define CC1101_PATABLE      0x3E
#define CC1101_TXFIFO       0x3F
#define CC1101_RXFIFO       0x3F

// Masks for appended status bytes
#define CC1101_LQI_RX       0x01      // Position of LQI byte
#define CC1101_CRC_OK       0x80      // Mask "CRC_OK" bit within LQI byte

// Definitions to support burst/single access:
#define CC1101_WRITE_BURST0x40
#define CC1101_READ_SINGLE0x80
#define CC1101_READ_BURST   0xC0
/*

#define CC1101_LED_PxOUT         P1OUT
#define CC1101_LED_PxDIR         P1DIR
#define CC1101_LED1            0x01
#define CC1101_LED2            0x02
#define CC1101_LED3            0x04
#define CC1101_LED4            0x08

#define CC1101_SW_PxIN         P1IN
#define CC1101_SW_PxIE         P1IE
#define CC1101_SW_PxIES          P1IES
#define CC1101_SW_PxIFG          P1IFG
#define CC1101_SW1               0x10
#define CC1101_SW2               0x20
#define CC1101_SW3               0x40
#define CC1101_SW4               0x80
*/


void CC1101_UART_SPISetup(void);
void CC1101_PowerupReset(void);
void CC1101_SPIWriteReg(char, char);
void CC1101_SPIWriteBurstReg(char, char*, char);
char CC1101_SPIReadReg(char);
void CC1101_SPIReadBurstReg(char, char *, char);
char CC1101_SPIReadStatus(char);
void CC1101_SPIStrobe(char);
void CC1101_Wait(unsigned int);
void Delayms(unsigned int delay) ;

void CC1101_Write_Settings(void);
void CC1101_SendPacket(char *txBuffer, char size);
char CC1101_ReceivePacket(char *rxBuffer, char *length);

char paTable = {0x8E,0x8E,0x8E,0x8E,0x8E,0x8E,0x8E,0x8E};
char paTableLen = 8;

#define CC1101_GDO0_PxOUT      P1OUT
#define CC1101_GDO0_PxIN         P1IN
#define CC1101_GDO0_PxDIR      P1DIR
#define CC1101_GDO0_PxIE         P1IE
#define CC1101_GDO0_PxIES      P1IES
#define CC1101_GDO0_PxIFG      P1IFG
#define CC1101_GDO0_PIN          BIT5


#define CC1101_GDO2_PxOUT      P1OUT
#define CC1101_GDO2_PxIN         P1IN
#define CC1101_GDO2_PxDIR      P1DIR
#define CC1101_GDO2_PIN          BIT6         

#define CC1101_CSn_PxOUT         P5OUT
#define CC1101_CSn_PxDIR         P5DIR
#define CC1101_CSn_PIN         BIT0



#define CC1101_SPI_USART1_PxSELP5SEL
#define CC1101_SPI_USART1_PxDIRP5DIR
#define CC1101_SPI_USART1_PxIN   P5IN
#define CC1101_SPI_USART1_SIMO   BIT1
#define CC1101_SPI_USART1_SOMI   BIT2
#define CC1101_SPI_USART1_UCLK   BIT3


void CC1101_Wait(unsigned int cycles)
{
while(cycles>15)                        // 15 cycles consumed by overhead
    cycles = cycles - 6;                  // 6 cycles consumed each iteration
}


void CC1101_UART_SPISetup(void)
{
CC1101_CSn_PxOUT |= CC1101_CSn_PIN;
CC1101_CSn_PxDIR |= CC1101_CSn_PIN;         // /CS disable

ME2 |= USPIE1;                            // Enable USART1 SPI mode
UCTL1 |= CHAR + SYNC + MM;                // 8-bit SPI Master **SWRST**
UTCTL1 |= CKPL + SSEL1 + SSEL0 + STC;   // SMCLK, 3-pin mode
UBR01 = 0x02;                           // UCLK/2
UBR11 = 0x00;                           // 0
UMCTL1 = 0x00;                            // No modulation
CC1101_SPI_USART1_PxSEL |= CC1101_SPI_USART1_SIMO | CC1101_SPI_USART1_SOMI | CC1101_SPI_USART1_UCLK;
                                          // SPI option select
CC1101_SPI_USART1_PxDIR |= CC1101_SPI_USART1_SIMO + CC1101_SPI_USART1_UCLK;
                                          // SPI TXD out direction
UCTL1 &= ~SWRST;                        // Initialize USART state machine
}

void CC1101_SPIWriteReg(char addr, char value)
{
    CC1101_CSn_PxOUT &= ~CC1101_CSn_PIN;      // /CS enable
    while (CC1101_SPI_USART1_PxIN&CC1101_SPI_USART1_SOMI);// Wait for CCxxxx ready
    IFG2 &= ~URXIFG1;                     // Clear flag??
    U1TXBUF = addr;                         // Send address
    while (!(IFG2&URXIFG1));                // Wait for TX to finish??
    IFG2 &= ~URXIFG1;                     // Clear flag
    U1TXBUF = value;                        // Load data for TX after addr
    while (!(IFG2&URXIFG1));                // Wait for end of addr TX??
    CC1101_CSn_PxOUT |= CC1101_CSn_PIN;       // /CS disable
}

void CC1101_SPIWriteBurstReg(char addr, char *buffer, char count)
{
    char i;

    CC1101_CSn_PxOUT &= ~CC1101_CSn_PIN;      // /CS enable
    while (CC1101_SPI_USART1_PxIN&CC1101_SPI_USART1_SOMI);// Wait for CCxxxx ready
    U1TXBUF = addr | CC1101_WRITE_BURST; // Send address
    while (!(IFG2&UTXIFG1));                // Wait for TX to finish??
   
    for (i = 0; i < count; i++)
    {
      U1TXBUF = buffer;                  // Send data
      while (!(IFG2&UTXIFG1));            // Wait for TX to finish??
    }
   
    IFG2 &= ~URXIFG1;
    while(!(IFG2&URXIFG1));
    CC1101_CSn_PxOUT |= CC1101_CSn_PIN;       // /CS disable
}

char CC1101_SPIReadReg(char addr)
{
char x;

CC1101_CSn_PxOUT &= ~CC1101_CSn_PIN;      // /CS enable
while (CC1101_SPI_USART1_PxIN&CC1101_SPI_USART1_SOMI);// Wait for CCxxxx ready
IFG2 &= ~URXIFG1;                         // Clear flag set during addr TX
U1TXBUF = (addr | CC1101_READ_SINGLE); // Send address
while (!(IFG2&URXIFG1));                  // Wait for TXBUF ready
IFG2 &= ~URXIFG1;                         // Clear flag set during addr TX
U1TXBUF = 0;                              // Load dummy byte for TX after addr
while (!(IFG2&URXIFG1));                  // Wait for end of dummy byte TX
x = U1RXBUF;                              // Read data
CC1101_CSn_PxOUT |= CC1101_CSn_PIN;         // /CS disable

return x;
}

void CC1101_SPIReadBurstReg(char addr, char *buffer, char count)
{
unsigned int i;

CC1101_CSn_PxOUT &= ~CC1101_CSn_PIN;      // /CS enable
while (CC1101_SPI_USART1_PxIN&CC1101_SPI_USART1_SOMI);// Wait for CCxxxx ready
IFG2 &= ~URXIFG1;                         // Clear flag
U1TXBUF = (addr | CC1101_READ_BURST);// Send address
while (!(IFG2&URXIFG1));                  // Wait for TXBUF ready
U1TXBUF = 0;                              // Dummy write to read 1st data byte
// Addr byte is now being TX'ed, with dummy byte to follow immediately after
while (!(IFG2&URXIFG1));                  // Wait for end of addr byte TX
IFG2 &= ~URXIFG1;                         // Clear flag
while (!(IFG2&URXIFG1));                  // Wait for end of 1st data byte TX
// First data byte now in RXBUF
for (i = 0; i < (count-1); i++)
{
    U1TXBUF = 0;                            //Initiate next data RX, meanwhile..
    buffer = U1RXBUF;                  // Store data from last data RX
    while (!(IFG2&URXIFG1));                // Wait for end of data RX
}
buffer = U1RXBUF;                // Store last RX byte in buffer
CC1101_CSn_PxOUT |= CC1101_CSn_PIN;         // /CS disable
}

char CC1101_SPIReadStatus(char addr)
{
char x;

CC1101_CSn_PxOUT &= ~CC1101_CSn_PIN;      // /CS enable
while (CC1101_SPI_USART1_PxIN&CC1101_SPI_USART1_SOMI);// Wait for CCxxxx ready
IFG2 &= ~URXIFG1;                         // Clear flag set during last write
U1TXBUF = (addr | CC1101_READ_BURST);// Send address
while (!(IFG2&URXIFG1));                  // Wait for TX to finish
IFG2 &= ~URXIFG1;                         // Clear flag set during last write
U1TXBUF = 0;                              // Dummy write so we can read data
while (!(IFG2&URXIFG1));                  // Wait for RX to finish
x = U1RXBUF;                              // Read data
CC1101_CSn_PxOUT |= CC1101_CSn_PIN;         // /CS disable
return x;
}

void CC1101_SPIStrobe(char strobe)
{
CC1101_CSn_PxOUT &= ~CC1101_CSn_PIN;      // /CS enable
while (CC1101_SPI_USART1_PxIN&CC1101_SPI_USART1_SOMI);// Wait for CCxxxx ready
U1TXBUF = strobe;                         // Send strobe
// Strobe addr is now being TX'ed
IFG2 &= ~URXIFG1;                         // Clear flag
while (!(IFG2&URXIFG1));                  // Wait for end of addr TX
CC1101_CSn_PxOUT |= CC1101_CSn_PIN;         // /CS disable
}

void CC1101_PowerupReset(void)
{
CC1101_CSn_PxOUT |= CC1101_CSn_PIN;
CC1101_Wait(30);
CC1101_CSn_PxOUT &= ~CC1101_CSn_PIN;
CC1101_Wait(30);
CC1101_CSn_PxOUT |= CC1101_CSn_PIN;
CC1101_Wait(45);

CC1101_CSn_PxOUT &= ~CC1101_CSn_PIN;      // /CS enable
while (CC1101_SPI_USART1_PxIN&CC1101_SPI_USART1_SOMI);// Wait for CCxxxx ready
U1TXBUF = CC1101_SRES;               // Send strobe
// Strobe addr is now being TX'ed
IFG2 &= ~URXIFG1;                         // Clear flag
while (!(IFG2&URXIFG1));                  // Wait for end of addr TX
while (CC1101_SPI_USART1_PxIN&CC1101_SPI_USART1_SOMI);
CC1101_CSn_PxOUT |= CC1101_CSn_PIN;         // /CS disable
}


char CC1101_ReceivePacket(char *rxBuffer, char *length)
{
char status;
char pktLen;

// Delayms(1);
if ((CC1101_SPIReadStatus(CC1101_RXBYTES) & CC1101_NUM_RXBYTES))
{
    pktLen = CC1101_SPIReadReg(CC1101_RXFIFO); // Read length byte
   
    if (pktLen <= *length)                  // If pktLen size <= rxBuffer
    {
      CC1101_SPIReadBurstReg(CC1101_RXFIFO, rxBuffer, pktLen); // Pull data
      *length = pktLen;                     // Return the actual size
      CC1101_SPIReadBurstReg(CC1101_RXFIFO, status, 2);//读出校验位
      CC1101_SPIStrobe(CC1101_SFRX);
      CC1101_SPIStrobe(CC1101_SRX);
                                          // Read appended status bytes
      return (char)(status&CC1101_CRC_OK);//校验成功检验
    }                                       // Return CRC_OK bit
    else
    {
      *length = pktLen;                     // Return the large size
      CC1101_SPIStrobe(CC1101_SFRX);      // Flush RXFIFO
   // CC1101_SPIStrobe(CC1101_SRX);
      return 0;                           // Error
    }
}
else
{
      CC1101_SPIStrobe(CC1101_SFRX);      // Flush RXFIFO
      CC1101_SPIStrobe(CC1101_SRX);
      return 0;                           // Error
}
}

void CC1101_SendPacket(char *txBuffer, char size)
{
CC1101_SPIStrobe(CC1101_SIDLE);   
CC1101_Wait(10);
    CC1101_SPIWriteBurstReg(CC1101_TXFIFO, txBuffer, size); // Write TX data
    CC1101_SPIStrobe(CC1101_STX);         // Change state to TX, initiating
                                          // data transfer
   
   while (!(CC1101_GDO0_PxIN&CC1101_GDO0_PIN));
                                          // Wait GDO0 to go hi -> sync TX'ed
    while (CC1101_GDO0_PxIN&CC1101_GDO0_PIN);
                                          // Wait GDO0 to clear -> end of pkt
    CC1101_SPIStrobe(CC1101_SRX);      
   
}

void CC1101_Init(void)
{
CC1101_UART_SPISetup();                         // Initialize SPI port
CC1101_PowerupReset();               // Reset CCxxxx
CC1101_Write_Settings();                        // Write RF settings to config reg
CC1101_SPIWriteBurstReg(CC1101_PATABLE, paTable, paTableLen);//Write PATABLE

}

char txBuffer;
char rxBuffer;


void F149_Osc_Init(void)
{
   unsigned char i;
    BCSCTL1 &= ~XT2OFF;                   // 打开高速振荡器,使用8M晶振
    do
    {
      IFG1 &= ~OFIFG;                   // Clear OSCFault flagOFIFG:外部晶振故障中断标志
      for (i = 0xFF; i > 0; i--);       // Time for flag to set
    }while ((IFG1 & OFIFG));            // OSCFault flag still set? 振荡电路是否正常
   
   BCSCTL2 |= SELM_2 + SELS ;             // MCLK= SMCLK = XT2= (safe)
}

void F149_UART0_Init(void)
{
    U0CTL=SWRST+CHAR;
U0TCTL=SSEL0;      //ACLK
U0BR0=0X03;
U0BR1=0X00;
U0MCTL=0X4a;
U0CTL &=~SWRST;   //SWRST=0
ME1 |=UTXE0+URXE0;
IE1 |=0;
P3SEL |=BIT4+BIT5;
P3DIR |=BIT4;
}

void Delayms(unsigned int delay)    //10 MCLK=1.25uS
{
unsigned long v;
for (v=((long)delay*800);v>0;v--);
}

void main (void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
F149_Osc_Init();
F149_UART0_Init();
U0TXBUF=1;
while((UTCTL0&0x01)==0);
CC1101_Init();
U0TXBUF=2;
while((UTCTL0&0x01)==0);
CC1101_GDO0_PxIES |= CC1101_GDO0_PIN;       // Int on falling edge下降沿(end of pkt)
CC1101_GDO0_PxIFG &= ~CC1101_GDO0_PIN;      // Clear flag
CC1101_GDO0_PxIE |= CC1101_GDO0_PIN;      // Enable int on end of packet

CC1101_SPIStrobe(CC1101_SIDLE);         // Initialize CCxxxx in RX mode.
      _EINT();                                    // When a pkt is received, it will

                      // signal on GDO0 and wake CPU
   U0TXBUF=CC1101_SPIReadStatus(CC1101_BSCFG);
while((UTCTL0&0x01)==0);
    U0TXBUF=CC1101_SPIReadStatus(CC1101_PATABLE);
while((UTCTL0&0x01)==0);
    U0TXBUF=CC1101_SPIReadStatus(CC1101_PKTLEN);
while((UTCTL0&0x01)==0);
    U0TXBUF=CC1101_SPIReadStatus(CC1101_CHANNR);
while((UTCTL0&0x01)==0);
    U0TXBUF=CC1101_SPIReadStatus(CC1101_ADDR);               
while((UTCTL0&0x01)==0);

while(1)
{
    Delayms(1000);
   txBuffer = 2;                           // Packet length
txBuffer = 0x01;                        // Packet address
txBuffer = 0xad;// Load four switch inputs

U0TXBUF=4;
while((UTCTL0&0x01)==0);
// CC1101_SendPacket(txBuffer, 3);// Send value over RF
//CC1101_SPIStrobe(CC1101_SIDLE);
   CC1101_SPIWriteReg(0x3F, 3);
   CC1101_SPIStrobe(CC1101_STX);
    Delayms(1000);
// P1IFG &= ~CC1101_GDO0_PIN;
// CC1101_SPIStrobe(CC1101_SIDLE);
U0TXBUF=3;
while((UTCTL0&0x01)==0);
}
}

/*
// The ISR assumes the interrupt came from a press of one of the four buttons
// and therefore does not check the other four inputs.
#pragma vector=PORT1_VECTOR
__interrupt void port1_ISR (void)
{
// Build packet
txBuffer = 2;                           // Packet length
txBuffer = 0x01;                        // Packet address
txBuffer = 0xad;// Load four switch inputs

CC1101_SendPacket(txBuffer, 3);               // Send value over RF

P1IFG &= ~CC1101_GDO0_PIN;                  // After pkt TX, this flag is set.
}                                          // Clear it.


// 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=PORT1_VECTOR
__interrupt void port1_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)
CC1101_ReceivePacket(rxBuffer,&len);       // Fetch packet from CCxxxx
U0TXBUF=rxBuffer;
while((UTCTL0&0x01)==0);
U0TXBUF=rxBuffer;
while((UTCTL0&0x01)==0);

P1IFG &= ~CC1101_GDO0_PIN;               // Clear flag
}

*/
void CC1101_Write_Settings(void)
{
    // Write register settings
    CC1101_SPIWriteReg(CC1101_IOCFG2,   0x0B); // GDO2 output pin config.
    CC1101_SPIWriteReg(CC1101_IOCFG0,   0x06); // GDO0 output pin config.
    CC1101_SPIWriteReg(CC1101_FIFOTHR,0x47);
    CC1101_SPIWriteReg(CC1101_PKTLEN,   0xFF); // Packet length.
    CC1101_SPIWriteReg(CC1101_PKTCTRL1, 0x04); // Packet automation control.
    CC1101_SPIWriteReg(CC1101_PKTCTRL0, 0x05); // Packet automation control.
    CC1101_SPIWriteReg(CC1101_ADDR,   0x00); // Device address.
    CC1101_SPIWriteReg(CC1101_CHANNR,   0x06); // Channel number.
    CC1101_SPIWriteReg(CC1101_FSCTRL1,0x06); // Freq synthesizer control.
    CC1101_SPIWriteReg(CC1101_FSCTRL0,0x00); // Freq synthesizer control.
    CC1101_SPIWriteReg(CC1101_FREQ2,    0x23); // Freq control word, high byte
    CC1101_SPIWriteReg(CC1101_FREQ1,    0x31); // Freq control word, mid byte.
    CC1101_SPIWriteReg(CC1101_FREQ0,    0x3B); // Freq control word, low byte.
    CC1101_SPIWriteReg(CC1101_MDMCFG4,0xF8); // Modem configuration.
    CC1101_SPIWriteReg(CC1101_MDMCFG3,0x83); // Modem configuration.
    CC1101_SPIWriteReg(CC1101_MDMCFG2,0x03); // Modem configuration.
    CC1101_SPIWriteReg(CC1101_MDMCFG1,0x22); // Modem configuration.
    CC1101_SPIWriteReg(CC1101_MDMCFG0,0xF8); // Modem configuration.
    CC1101_SPIWriteReg(CC1101_DEVIATN,0x14); // Modem dev (when FSK mod en)
    CC1101_SPIWriteReg(CC1101_MCSM1 ,   0x07); //MainRadio Cntrl State Machine
    CC1101_SPIWriteReg(CC1101_MCSM0 ,   0x18); //MainRadio Cntrl State Machine
    CC1101_SPIWriteReg(CC1101_FOCCFG,   0x16); // Freq Offset Compens. Config
    CC1101_SPIWriteReg(CC1101_BSCFG,    0x6C); //Bit synchronization config.
    CC1101_SPIWriteReg(CC1101_AGCCTRL2, 0x43); // AGC control.
    CC1101_SPIWriteReg(CC1101_AGCCTRL1, 0x40); // AGC control.
    CC1101_SPIWriteReg(CC1101_AGCCTRL0, 0x91); // AGC control.
    CC1101_SPIWriteReg(CC1101_FREND1,   0x56); // Front end RX configuration.
    CC1101_SPIWriteReg(CC1101_FREND0,   0x10); // Front end RX configuration.
    CC1101_SPIWriteReg(CC1101_FSCAL3,   0xE9); // Frequency synthesizer cal.
    CC1101_SPIWriteReg(CC1101_FSCAL2,   0x2A); // Frequency synthesizer cal.
    CC1101_SPIWriteReg(CC1101_FSCAL1,   0x00); // Frequency synthesizer cal.
    CC1101_SPIWriteReg(CC1101_FSCAL0,   0x1F); // Frequency synthesizer cal.
    CC1101_SPIWriteReg(CC1101_FSTEST,   0x59); // Frequency synthesizer cal.
    CC1101_SPIWriteReg(CC1101_TEST2,    0x81); // Various test settings.
    CC1101_SPIWriteReg(CC1101_TEST1,    0x35); // Various test settings.
    CC1101_SPIWriteReg(CC1101_TEST0,    0x09); // Various test settings.
}

liuzs09 发表于 2012-4-13 19:45:06

附上程序,各位大侠帮忙看看

zsulrq 发表于 2012-5-25 12:02:22

有AFC寄存器?
页: [1]
查看完整版本: 请教一个下 MSP430+CC1101 程序编写问题