搜索
bottom↓
回复: 5

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

[复制链接]

出0入0汤圆

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

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-4-13 16:16:08 | 显示全部楼层
频率对么?你需要用可以正常工作的套件慢慢调,等你都会啦再来。可以问T I 买成品套件。

出0入0汤圆

 楼主| 发表于 2012-4-13 17:29:59 | 显示全部楼层
我用的是网上买的模块,现在我手头上有五块,情况都是一样,具体是什么问题还没有找到

出0入0汤圆

 楼主| 发表于 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_RXBYTES  0x7F        // 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_BURST  0x40
#define CC1101_READ_SINGLE  0x80
#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[8] = {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_PxSEL  P5SEL
#define CC1101_SPI_USART1_PxDIR  P5DIR
#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[i];                  // 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[i] = U1RXBUF;                    // Store data from last data RX
    while (!(IFG2&URXIFG1));                // Wait for end of data RX
  }
  buffer[count-1] = 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[2];
  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_LQI_RX]&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[4];
char rxBuffer[4];


void F149_Osc_Init(void)
{
   unsigned char i;
    BCSCTL1 &= ~XT2OFF;                   // 打开高速振荡器,使用8M晶振
    do
    {
        IFG1 &= ~OFIFG;                   // Clear OSCFault flag  OFIFG:外部晶振故障中断标志
        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[0] = 2;                           // Packet length
  txBuffer[1] = 0x01;                        // Packet address
  txBuffer[2] = 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[0] = 2;                           // Packet length
  txBuffer[1] = 0x01;                        // Packet address
  txBuffer[2] = 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[1];
  while((UTCTL0&0x01)==0);
  U0TXBUF=rxBuffer[2];
  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.
}

出0入0汤圆

 楼主| 发表于 2012-4-13 19:45:06 | 显示全部楼层
附上程序,各位大侠帮忙看看

出0入0汤圆

发表于 2012-5-25 12:02:22 | 显示全部楼层
有AFC寄存器?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-6 10:32

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表