⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 复件 (2) 发送.c

📁 利用msp430控制cc1101进行两个模块之间的通信
💻 C
📖 第 1 页 / 共 2 页
字号:
       txBuffer[26] = xx++;
       txBuffer[27] = xx++;
       txBuffer[28] = xx++;
       txBuffer[29] = xx++;
       txBuffer[30] = xx++;
       txBuffer[31] = xx++;
       txBuffer[32] = xx++;
       txBuffer[33] = xx++;
       txBuffer[34] = xx++;
       txBuffer[35] = xx++;
       txBuffer[36] = xx++;
       txBuffer[37] = xx++;
       txBuffer[38] = xx++;
       txBuffer[39] = xx++;
       txBuffer[40] = xx++;
       txBuffer[41] = xx++;
       txBuffer[42] = xx++;
       txBuffer[43] = xx++;
       txBuffer[44] = xx++;
       txBuffer[45] = xx++;
       txBuffer[46] = xx++;
       txBuffer[47] = xx++;
       txBuffer[48] = xx++;
       txBuffer[49] = xx++;
       txBuffer[50] = xx++;
       txBuffer[51] = xx++;
       txBuffer[52] = xx++;
       txBuffer[53] = xx++;
       txBuffer[54] = xx++;
       txBuffer[55] = xx++;
       txBuffer[56] = xx++;
       txBuffer[57] = xx++;
       txBuffer[58] = xx++;
       txBuffer[59] = xx++;
       txBuffer[60] = xx++;
       txBuffer[61] = xx++;
       txBuffer[62] = xx++;
       txBuffer[63] = 0xFE;
       //txBuffer[] = xx++;
       ***********************************************************
       SPIStrobe(CCxxx0_SFTX);     //刷新TX_FIFO
       SPIWriteBurstReg(CCxxx0_TXFIFO, txBuffer, LENGTH_ID ); // Write TX data;    LENGTH_ID == 4
       SPIStrobe(CCxxx0_STX);      // Change state to TX, initiatingdata transfer
      
       while (!( P1IN& GDO0_PIN));    // Wait GDO0 to go hi -> sync TX'ed                                   
       while ( P1IN& GDO0_PIN);       // Wait GDO0 to clear -> end of pkt
     
       P1IFG &= ~GDO0_PIN;                  // After pkt TX, this flag is set, Clear it.
       ***************************************************************************
       P1IE |= GDO0_PIN;   //开GDO0中断            
       
}*/


const unsigned char ConfigurationCCxxx0_433[47]=
{
 //Data	:Reg:       Name (x = non-default)
0x29, //00	        IOCFG2 (x)
0x2E,   //01	        IOCFG1
0x06,	//02            IOCFG0D (x) 

0x47,   //03		FIFOTHR (x)
0xD3,   //04     	SYNC1
0x91,   //05     	SYNC0

LENGTH,   //06		PKTLEN (x) //最大长度  PKTLEN (x) 
0x06,	//07    	PKTCTRL1 (x)   //有地址,广播地址为0x00
0x05,   //08	 	PKTCTRL0 (x)    //  CRC calculation in TX and CRC check in RX enabled  
                                       //可变长度
                              
0x00,   //09		ADDR (x)  //设自己的地址
0x00,   //0A	        CHANNR (x)

0x06,	//0B	        FSCTRL1 (x)  //*电流与灵敏度有关     IF Frequency -> FREQ_IF[4:0] => 152.34 kHz
0x00,   //0C		FSCTRL0 (x)

0x10,   //0D		FREQ2 (x)     
0xa7,   //0E		FREQ1 (x)     //f = 432.999817@0x10a762
0x62,   //0F		FREQ0 (x)     

0xCA,   //10		MDMCFG4 (x)
0x83,   //11		MDMCFG3 (x)
0x12,   //12    	MDMCFG2 (x)    " 12 == 16/16 sync word bits detected  "
0x22,   //13		MDMCFG1 (x)    "  Number of preamble bytes == 4"
0xF8,   //14		MDMCFG0 (x)
0x34,   //15		DEVIATN (x)
//**************************************************************************************************************************************************************
0x07, //0x13,//0x1E,   //16		MCSM2     
   //*低功耗有关   2008-05-24  改为0x13
  // "bit4(RX_TIME_RSSI) ==1  is Direct RX termination based on RSSI measurement (carrier sense)."
           // ==1  :使能载波检测,即没有载波信号时,立即退出RX状态
           // ==0 : 直到RX_TIME溢出,退出RX状态
  // "bit3(RX_TIME_QUAL) ==1  is When the RX_TIME timer expires,the chip checks if either sync word is found or PQI is set.
                      // ==0  is .............................., the chip checks if sync word is found.
          //==1: RX_TIME溢出时如果收到 sync word 或者PQI is set,则继续接收 ,否则退出接收状态
          //==0: RX_TIME溢出时如果收到 sync word,则继续接收 ,否则退出接收状态  2008-05-24改为0
  // "bit2--0 == 6 :  0.195% @ WOR_RES=0"
   // "bit2--0 == 3 :  2.441ppm @ WOR_RES=1"
//*************************************************************************************************************
0x30,   //17		MCSM1           //接收和发射后进入空闲状态
                                    
0x18,   //18           MCSM0 (x)     // 0x18  == Calibration from IDLE to TX/Rx
0x16,   //19		FOCCFG (x)
0x6C,   //1A		BSCFG (x)
//****************************************************************************************************
0x43,   //1B		AGCCTRL2 (x)
      //bit7-6 ( MAX_DVGA_GAIN[1:0] ) == 01:  The highest gain setting can not be used
      //bit5-3 ( MAX_LNA_GAIN[2:0] ) == 000:   Maximum possible LNA + LNA 2 gain
      //bit2-0 ( MAGN_TARGET[2:0] )  == 011:  33 dB  == Target amplitude from channel filter
//******************************************************************************************************
0x40,//0x43,   //1C		AGCCTRL1 (x)
   //bit7  == 0:   固定为0
   //bit6  == 1:   固定为1
   //bit5-4 ( CARRIER_SENSE_REL_THR[1:0] ) == 00 :   Relative carrier sense threshold disabled
   //bit3-0 ( CARRIER_SENSE_ABS_THR[3:0] ) == 011 :   3 dB above MAGN_TARGET setting
                //当大于 " MAGN_TARGET setting " 3dB 时 ,表示有载波
   //2008-05-20改为0x10  先测试
//****************************************************************************************************
0x91,   //1D		AGCCTRL0 (x)

0x0a,//0xff,   //1E		WOREVT1   //  t_E0 = (750/26000000)*EVT0  = 1890.4ms
0x94,//0xff,   //1F		WOREVT0   //  t_E0 = (750/26000000)*EVT0 *32 = 2500ms  2008-05-24
//**************************************************************************************************
0x39,//0x38,   //20		WORCTRL    
    //bit7 ==0: 使能RC, When written to 0, automatic initial  calibration will be performed,
    //bit6-4:   EVENT1[]= 3  is  12  
    //bit3 ==1:  Enables the RC oscillator calibration.
    //bit2-0 == 0:   WOR_RES=0
    //bit2-0 == 1:   WOR_RES=1   2008-05-24
//*************************************************************************************************
0x56,   //21		FREND1 (x)
0x10,   //22		FREND0 (x)   //选择功率使用的pdat值//!!!出错会引起输出功率为0

0xE9,   //23		FSCAL3 (x)
0x2A,   //24		FSCAL2 (x)
0x00,   //25		FSCAL1 (x)
0x1F,   //26		FSCAL0 (x)

0x41,   //27		RCCTRL1
0x00,   //28		RCCTRL0
0x59,   //29		FSTEST (x)
0x7F,   //2A		PTEST

0x3F,   //2B		AGCTST
0x81,   //2C		TEST2 (x)
0x35,   //2D		TEST1 (x)
0x09    //2E		TEST0 (x)

};
void writeRFSettings(void)
{
  unsigned char i;
  for(i=0; i<47; i++)
  {
      SPIWriteReg(i,ConfigurationCCxxx0_433[i]);
  }
}
unsigned char txBuffer[LENGTH+2];
char x;
void TxData(unsigned length)  
{
    //发送数据格式************************************************************
    //    数据长度    地址      实际数据       
    //  61 (max)  , Addr,     D0, D1,...., D59         注意:实际数据最大为60byte  
              //另外两个 status bytes,CC1101
    //***************************************************************************
    unsigned i;
    //*********************************************************************************
    txBuffer[0] = length+1;  //数据长度 == (数据+地址)
    //txBuffer[1] = ADDR_VAL;  //设置接收方的地址,目前设置的和自己的地址一样   //广播地址为0x00
    txBuffer[1] = 0;
    for(i=2; i<length+2; i++ )
    {
     txBuffer[i] =x++;  //数据
    }
    //***********************************************************
    SPIStrobe(CCxxx0_SFTX);     //刷新cc1101的buffer; 
    SPIWriteBurstReg(CCxxx0_TXFIFO, txBuffer, LENGTH+2 ); //写数据到cc1101的buffer;  
    SPIStrobe(CCxxx0_STX);      // 进入发射状态
    while (!( P1IN& GDO0_PIN));    // 等待GDO0置高,置高表示数据报头已经发送                                 
    while ( P1IN& GDO0_PIN);       // 等待GDO0置低,置低表示数据报已经发送完成
    //发送完成
    SPIStrobe(CCxxx0_SIDLE);  // 进入空闲状态
} 
unsigned int Temp;
void main (void)
{
unsigned char len;
     Initialize_CPU();
    //****************************************************************************** 
    PowerupResetCCxxxx();               // Reset CCxxxx
    writeRFSettings();                        // Write RF settings to config reg
    SPIWriteReg(CCxxx0_PATABLE , PA_VALE);  //Write PATABLE,设置输出功率
    //*********************************************************************
    _EINT();                     //使能全局中断
    while(1)
    {
        SPIStrobe(CCxxx0_SIDLE);  //cc1101退出SWOR
        P1OUT |= BIT6;
        len = 20; //设置要发射的数据长度
        TxData(len);//发射数据
        _NOP();
        P1OUT &= ~BIT6;
        for(Temp = 0;Temp<0xFFFE;Temp++);
        for(Temp = 0;Temp<0xFFFE;Temp++);
        for(Temp = 0;Temp<0xFFFE;Temp++);
        for(Temp = 0;Temp<0xFFFE;Temp++);
    }
}
//***********************************************

interrupt[PORT1_VECTOR] void p1_ISR (void)
{
    RxFlag = 0x11;
    P1IFG  = 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -