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

📄 rfmodem_cc1000.c

📁 MSP430F149单片机驱动CC1000进行无线收发的一个示例程序,这是个让CC1000工作在半双工模式的程序
💻 C
📖 第 1 页 / 共 2 页
字号:
 //   PALE_1;					//PALE=1;
  
    RXBufferReadIndex=0;
    RXBufferWriteIndex=0;
  
    SetupCC1000PD();
    ResetCC1000();
  
    SetupCC1000All();
 
    WakeUpCC1000ToTX(TXCurrent,TXPLL);
    SetupCC1000TX(TXCurrent,TXPLL);
    if (!CalibrateCC1000())
    {
        writeln("TX Calibration failed");
    }
    // Calibration data is stored in the chip indexed by the selected frequency register 
    SetupCC1000RX(RXCurrent,RXPLL);						// TRISC|=0x02;        // Set DIO as input
    if (!CalibrateCC1000())
    {
        writeln("RX Calibration failed");
    }
 	
  // Now the CC1000 is calibrated for both RX and TX, we do not need to recalibrate
  // unless the frequency is changed, the temperature changes by 40 degrees C
  // or if the supply voltage changes by more than 0.5V 
  
    // Force update 强制发生一次状态转换
    State=TX_STATE;
    NextState=IDLE_STATE;
  
    InitializeTXBuffer();
    if(BUTTON1==0) 
    {
        _NOP();
    }
    if(BUTTON2==0) 
    {
        _NOP();
    }
    if(BUTTON3==0) 
    {
        _NOP();
    }
    if(BUTTON4==0)		//调用配置菜单
    {           
        ConfigurationMode();
    }
  //补写PA_POW寄存器,保证以正确的功率输出
  WriteToCC1000Register(CC1000_PA_POW,PA_Power);
 
  LockAverage=0;
  UnlockAverage=0;
  
  /* Startup message */ 
  writeln("RF Modem ready");
  writestr("Compiled ");
  writestr(__DATE__);
  writestr(" ");
  writestr(__TIME__);
  writeln("");
  
  dummy=ReadFromCC1000Register(CC1000_MODEM0); 
  switch(dummy) 
  {
    case 0x07:
      writestr("0.6kbit/s Manchester");
      break;
    case 0x03:
      writestr("0.6kbit/s NRZ");
      break;
    case 0x17:
      writestr("1.2kbit/s Manchester");
      break;
    case 0x13:
      writestr("1.2kbit/s NRZ");
      break;
    case 0x27:
      writestr("2.4kbit/s Manchester");
      break;
    case 0x23:
      writestr("2.4kbit/s NRZ");
      break;
    case 0x37:
      writestr("4.8kbit/s Manchester");
      break;
    case 0x33:
      writestr("4.8kbit/s NRZ");
      break;
    case 0x47:
      writestr("9.6kbit/s Manchester");
      break;
    case 0x43:
      writestr("9.6kbit/s NRZ");
      break;
    case 0x57:
      writestr("19.2kbit/s Manchester");
      break;
    case 0x53:
      writestr("19.2kbit/s NRZ");
      break;
    case 0x55:
      writestr("38.4kbit/s Manchester");
      break;
    case 0x51:
      writestr("38.4kbit/s NRZ");
      break;
    case 0x50:
      writestr("76.8kbit/s NRZ");
      break;
    default:
      writestr("Invalid data rate");
      break;
  } 
  writeln("");
  dummy=ReadFromCC1000Register(CC1000_PA_POW);
  switch(dummy) 
  {
    case 0x01:
      writestr("-20/-19 dBm");
      break;
    case 0x02:
      writestr("-18/-17/-16 dBm");
      break;
    case 0x03:
      writestr("-15/-14/-13 dBm");
      break;
    case 0x04:
      writestr("-12/-11 dBm");
      break;
    case 0x05:
      writestr("-10/-9/-8 dBm");
      break;
    case 0x06:
      writestr("-8 dBm");
      break;
    case 0x07:
      writestr("-7 dBm");
      break;
    case 0x08:
      writestr("-6 dBm");
      break;
    case 0x09:
      writestr("-5 dBm");
      break;
    case 0x0A:
      writestr("-4 dBm");
      break;
    case 0x0B:
      writestr("-3 dBm");
      break;
    case 0x0C:
      writestr("-2 dBm");
      break;
    case 0x0E:
      writestr("-1 dBm");
      break;
    case 0x0F:
      writestr(" 0 dBm");
      break;
    case 0x40:
      writestr(" 1 dBm");
      break;
    case 0x50:
      writestr(" 2/3 dBm");
      break;
    case 0x60:
      writestr(" 4 dBm");
      break;
    case 0x70:
      writestr(" 5 dBm");
      break;
    case 0x80:
      writestr(" 6 dBm");
      break;
    case 0x90:
      writestr(" 7 dBm");
      break;
    case 0xc0:
      writestr(" 8 dBm");
      break;
    case 0xe0:
      writestr(" 9 dBm");
      break;
    case 0xff:
      writestr("10 dBm");
      break;
    default:
      writestr("Not typical setting!");
      break;
  } 
  writeln("");
  //蜂鸣器鸣叫一声,提示开始运行
  P6DIR |= BIT7;
  P6OUT &= ~BIT7;
  for(i = 255;i > 0;i--)
  {
        dummy = 255;
        while(dummy > 0)dummy--;
  }
  P6OUT |= BIT7;

 // DumpCC1000Regs();

  AverageFreeRunCC1000();  
  
  _EINT(); 			//INTCON=0x90; 
  
  while(1)
  {    
    /* If state change, handle it */
    if (State!=NextState)
    {
     // _DINT();    
      ChangeState();  
     // _EINT();
    }      
      
    if (UnlockAverage) 
    {
      UnlockAverage=0;
      AverageFreeRunCC1000();
    }
    if (LockAverage) 
    {
      LockAverage=0;
      AverageManualLockCC1000();
    }
      
    /* If data in receive buffer, write it to the serial port */
    if (RXBufferReadIndex!=RXBufferWriteIndex)
    {
      putchar(RXBuffer[RXBufferReadIndex++]);  
      RXBufferReadIndex &= 0x3F;
    }
    
    if (IFG1 & URXIFG0) 
    {
    // UART receive interrupt. PC has sent data to us.
        if (State==IDLE_STATE)			// Only handle data if idle
        {  
            TBCTL |= TBCLR; 			// 复位定时器// TMR2=0;   // Reset time-out timer
            TBCTL |= TBSSEL_1 + MC_1; 		// TMR2ON=1; // Start time-out timer
            TBCCR0 = 328;
            
            TXBuffer[TXBufferIndex++]=RXBUF0;
            
            // IMPORTANT : We may have another interrupt or two occur before we can change mode
            // Therefore, leave safety margin!
            if (TXBufferIndex>=(TX_BUFFER_SIZE-3)) // Change mode early to have safety margin
            {  
              NextState=TX_STATE;
            }
        }
        else   		//进行一次哑读操作,消除中断标志
        {
            dummy = RXBUF0;
        }
    }
  
    if (TBCTL & TBIFG) 
    {
        // Timer 2 interrupt. TX timer has timed out.
        TBCTL = 0x00;    
        NextState=TX_STATE;    
    }
  
    if(TACTL & TAIFG)
    {    
        if(BUTTON1==0)
        {
            TXBuffer[TXBufferIndex++]=Button1Char;
            NextState=TX_STATE;
        }
        if(BUTTON2==0) 
        {
            TXBuffer[TXBufferIndex++]=Button2Char;
            NextState=TX_STATE;
        }
        if(BUTTON3==0) 
        {
            TXBuffer[TXBufferIndex++]=Button3Char;
            NextState=TX_STATE;
        }
        if(BUTTON4==0) 
        {
            TXBuffer[TXBufferIndex++]=Button4Char;
            NextState=TX_STATE;
        }
    
        TACTL &= ~TAIFG;				//  TMR1IF=0;
    }   
 }

}

⌨️ 快捷键说明

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