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

📄 drv2_cc1000.c

📁 CC1000 multi-frequence driver codes for Lpc213X
💻 C
📖 第 1 页 / 共 3 页
字号:
//        DB_SendString("RF_ch3 run in 433.265314MHz(old version)");
        break;
*/
  	case 4:
        for(i=0;i<33;i++) {
          EEPROMCC1000Config[i]=DefaultConfig434_6[i];
        }
        EEPROM_TxCurrent	=TX_CURRENT_433;
        EEPROM_RxCurrent	=RX_CURRENT_433;
        EEPROM_TxPll		=DefaultTXPLL434_6;
        EEPROM_RxPll		=DefaultRXPLL434_6;
//        DB_SendString("RF_ch4 run in 434.845200MHz");
        break;
        
	case 5:
        for(i=0;i<33;i++) {
          EEPROMCC1000Config[i]=DefaultConfig436[i];
        }
        EEPROM_TxCurrent	=TX_CURRENT_433;
        EEPROM_RxCurrent	=RX_CURRENT_433;
        EEPROM_TxPll		=DefaultTXPLL436;
        EEPROM_RxPll		=DefaultRXPLL436;
//        DB_SendString("RF_ch5 run in 435.979477MHz");
        break;

	default:
		for(i=0;i<33;i++) {
          EEPROMCC1000Config[i]=DefaultConfig433_3[i];
        }
        EEPROM_TxCurrent	=TX_CURRENT_433;
        EEPROM_RxCurrent	=RX_CURRENT_433;
        EEPROM_TxPll		=DefaultTXPLL433_3;
        EEPROM_RxPll		=DefaultRXPLL433_3;
//        DB_SendString("RF_ch3 run in 433.265314MHz(old version)");
        break;
  }

  SetupCC1000All();		//set the above to cc1000 chip
}

//////////////////////////////////////////////////////
// Displays the configuration menu
void DisplayConfigMenu(void)
{

}

////////////////////////////////////////////////
// Handles keystrokes for the configuration menu
void HandleConfigMenu(char inputvalue)
{
  switch(toupper(inputvalue)){
//
    case 'D' : 
      DumpCC1000Regs();
      break; 
//
    case 'E' :
      SetRFDataRate();
      break;
//
    case 'F' :
      DefaultSettings();
      break;
//
    case 'C' :
				// calibrate in R mode
      	SetupCC1000TX(TxCurrent,RF_TxPll);
  		if(!CalibrateCC1000()){
	   		DB_SendString("TX Calibration failed!");
  		}else{
	    	DB_SendString("TX Calibration success!");
  		}
			  	// calibrate in R mode
		SetupCC1000RX(RxCurrent,RF_RxPll);
		if(!CalibrateCC1000()){
			DB_SendString("RX Calibration failed!");
  		}else{
			DB_SendString("RX Calibration success!");
		}
      break;
//
    case 'R' :
      RFtoRXmode();

      break;
//
    case 'T' :
      RFtoTXmode();

      break;    
//
    case 'L' :
      if (ReadFromCC1000Register(CC1000_LOCK)&0x01==1){
		DB_SendString("PLL in lock");
      }else{
		DB_SendString("PLL out of lock");
	  }
      break;
//      
    case 'X' :
      break;
//      
    default:
      DisplayConfigMenu();
      break;
  }
}

/////////////////////////////////////////////////////
// Runs the configuration menu
void RF_ManualConfig(void)
{
int i;
  DisplayConfigMenu();
 
  while(1) {

//	i=_getchar();
	i='E';

	if (toupper(i)=='X')	break;
	HandleConfigMenu(i);
	DisplayConfigMenu();

//	i=_getchar();
	i='X';

	if (toupper(i)=='X')	break;
	HandleConfigMenu(i);

	}  
}

/////////////////////////////////////////////////////////////
// print working state to screen
void PrintRF_Mode(void)
{
char dummy;

	dummy=ReadFromCC1000Register(CC1000_MODEM0);
	switch(dummy) {
/*
		case 0x07:
    		WriteStr("0.3kbit/s Manchester");
    		break;
    	case 0x03:
    		WriteStr("0.6kbit/s NRZ");
      		break;
    	case 0x17:
      		WriteStr("0.6kbit/s Manchester");
      		break;
    	case 0x13:
      		WriteStr("1.2kbit/s NRZ");
      		break;
    	case 0x27:
     		WriteStr("1.2kbit/s Manchester");
      		break;
    	case 0x23:
      		WriteStr("2.4kbit/s NRZ");
      		break;
    	case 0x37:
      		WriteStr("2.4kbit/s Manchester");
      		break;
  */
  /*
    	case 0x33:
    		DB_SendEnter();
			DB_SendString("RF Modem ready");
      		WriteStr("4.8kbit/s NRZ");
      		RF_ModemState=ENABLE_FLAG;
      		break;
*/      		
    	case 0x47:
			DB_SendString("RF Modem ready");
			DB_SendString("4.8kbit/s Manchester");
      		RF_ModemState=ENABLE_FLAG;
      		break;
/*
    	case 0x43:
      		WriteStr("9.6kbit/s NRZ");
      		break;
    	case 0x57:
      		WriteStr("9.6kbit/s Manchester");
      		break;
    	case 0x53:
      		WriteStr("19.2kbit/s NRZ");
      		break;
    	case 0x55:
      		WriteStr("19.2kbit/s Manchester");
      		break;
    	case 0x51:
      		WriteStr("38.4kbit/s NRZ");
      		break;
    	case 0x54:
      		WriteStr("38.4kbit/s Manchester");
      		break;
    	case 0x50:
      		WriteStr("76.8kbit/s NRZ");
      		break;
*/
    	default:
//     		WriteStr("Invalid data rate");
    		DB_SendEnter();
			DB_SendString("RF Modem ERROR");
			RF_ModemState=DISABLE_FLAG;
      		break;
  }
}  

/////////////////////////////////////////////////////////////
//// synchronization semaphore
void RF_makeSynFlag(void)
{

	RFt_outp=0;
	RFt_inp=0;				//all has been transmited
	RF_TxBitCounter=0;
	RF_TxCounter=0;

	// start semaphore
	RF_Tx_Buf[RFt_inp]=0x5a;
	RFt_inp++;	if(RFt_inp>=TX_BUFFER_LEN)  RFt_inp=0;
	RF_TxCounter++;
	//
	RF_Tx_Buf[RFt_inp]=0x5a;
	RFt_inp++;	if(RFt_inp>=TX_BUFFER_LEN)  RFt_inp=0;
	RF_TxCounter++;
	//
	RF_Tx_Buf[RFt_inp]=0x5a;
	RFt_inp++;	if(RFt_inp>=TX_BUFFER_LEN)  RFt_inp=0;
	RF_TxCounter++;
	//
	RF_Tx_Buf[RFt_inp]=0x50;
	RFt_inp++;	if(RFt_inp>=TX_BUFFER_LEN)  RFt_inp=0;
	RF_TxCounter++;
	
	// synchronize semaphore
	RF_Tx_Buf[RFt_inp]=(uint8)(SYN_FLAG>>24);
	RFt_inp++;	if(RFt_inp>=TX_BUFFER_LEN)  RFt_inp=0;
	RF_TxCounter++;
	//
	RF_Tx_Buf[RFt_inp]=(uint8)(SYN_FLAG>>16);
	RFt_inp++;	if(RFt_inp>=TX_BUFFER_LEN)  RFt_inp=0;
	RF_TxCounter++;
	//
	RF_Tx_Buf[RFt_inp]=(uint8)(SYN_FLAG>>8);
	RFt_inp++;	if(RFt_inp>=TX_BUFFER_LEN)  RFt_inp=0;
	RF_TxCounter++;
	//
	RF_Tx_Buf[RFt_inp]=(uint8)(SYN_FLAG);
	RFt_inp++;	if(RFt_inp>=TX_BUFFER_LEN)  RFt_inp=0;
	RF_TxCounter++;
}

////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//sending anything to host without ending flag(such as CRC or ENTER)
//state 	:ok
////////////////////////////////////////////////////////////////////////////////
void RF_SendOver(void)
{
	if(RF_ModemState!=ENABLE_FLAG) return;

//	while((RF_TxCounter|RF_TxBitCounter)!=0);  
	WatchDogClear();				//clr watchdog
	mSecondTick=WHILE_DELAY_TIME;
	while(((RF_TxCounter|RF_TxBitCounter)!=0)&&(mSecondTick>1));
	if(mSecondTick<=1) DB_SendString("Time overflow in RF_SendOver()");
	WatchDogClear();				//clr watchdog
}

////////////////////////////////////////////////////////////////////////////////
//sending anything to host without ending flag(such as CRC or ENTER)
//state 	:ok
////////////////////////////////////////////////////////////////////////////////
void RF_SendChar(char *send_pt,uint8 send_cnt)
{

	if(RF_ModemState!=ENABLE_FLAG) return;
	
//	while((RF_TxCounter|RF_TxBitCounter)!=0);
	WatchDogClear();				//clr watchdog
	mSecondTick=WHILE_DELAY_TIME;
	while(((RF_TxCounter|RF_TxBitCounter)!=0)&&(mSecondTick>1));
	if(mSecondTick<=1) DB_SendString("time overflow in RF_SendChar()");
	WatchDogClear();				//clr watchdog
////
	IRQDisable();
	RF_makeSynFlag();									//10 bytes consumption(4+4+2)

//// byte counter
	RF_Tx_Buf[RFt_inp]=send_cnt;
	RFt_inp++;	if(RFt_inp>=TX_BUFFER_LEN)  RFt_inp=0;
	RF_TxCounter++;

//// byte counter check=(~byte counter)
	RF_Tx_Buf[RFt_inp]=(uint8)(~send_cnt);
	RFt_inp++;	if(RFt_inp>=TX_BUFFER_LEN)  RFt_inp=0;
	RF_TxCounter++;
	
////
	do{
		RF_Tx_Buf[RFt_inp] = *send_pt;
		RFt_inp++;	
		if(RFt_inp>=TX_BUFFER_LEN)  RFt_inp=0;	//elarge the sending buffer

		send_pt++;
		RF_TxCounter++;
		send_cnt--;
			
	}while(send_cnt>0);		// copy the string to t_buffer

////
	IRQEnable();				// 使能IRQ中断 
	RFtoTXmode();			//initiate sending
}

////////////////////////////////////////////////////////////////////////////////
//sending anything to host with ending flag(such as CRC or ENTER)
//state 	:ok
////////////////////////////////////////////////////////////////////////////////
void RF_SendAdd_Crc(uint8 *send_pt,uint8 send_cnt)
{
uint16  crc_data;
uint8 * data_pt;
uint8   data_cnt;

////
//#ifdef NO_RESP_BROAD_CAST
	if((Comm_Src_Addr==BROAD_CAST_ADDR)||(RF_ModemState!=ENABLE_FLAG))	return;
//#else
//	if(RF_ModemState!=ENABLE_FLAG) return;
//#endif

////
	data_pt  = send_pt;		//for calculating CRC check
	data_cnt = send_cnt;
	
//	while((RF_TxCounter|RF_TxBitCounter)!=0);
	WatchDogClear();				//clr watchdog
	mSecondTick=WHILE_DELAY_TIME;
	while(((RF_TxCounter|RF_TxBitCounter)!=0)&&(mSecondTick>1));
	if(mSecondTick<=1) DB_SendString("time overflow in RF_SendChar()");
	WatchDogClear();				//clr watchdog
////

	IRQDisable();
	RF_makeSynFlag();				//10 bytes consumption(4+4+2)

//// byte counter
	RF_Tx_Buf[RFt_inp] = (data_cnt+2);				//2 bytes CRC
	RFt_inp++;	if(RFt_inp>=TX_BUFFER_LEN)  RFt_inp=0;
	RF_TxCounter++;

//// byte counter check=(~byte counter)
	RF_Tx_Buf[RFt_inp]=(uint8)(~(data_cnt+2));		//2 bytes CRC
	RFt_inp++;	if(RFt_inp>=TX_BUFFER_LEN)  RFt_inp=0;
	RF_TxCounter++;

//// copy data to send
	do{
		RF_Tx_Buf[RFt_inp] = *data_pt;
		RFt_inp++;
		if(RFt_inp>=TX_BUFFER_LEN)  RFt_inp=0;	//elarge the sending buffer

		data_pt++;
		RF_TxCounter++;
		data_cnt--;

	}while(data_cnt>0);		// copy the string to t_buffer

//// calculate CRC16 check
	crc_data=MB_CRC16Check(send_pt,send_cnt);	// attached CRC code
	RF_Tx_Buf[send_cnt+10]	=(uint8)(crc_data>>8);		// 10 byte SYN flag
	RF_Tx_Buf[send_cnt+1+10]	=(uint8) crc_data;
	RF_TxCounter++;
	RF_TxCounter++;

//// start RF sending
	IRQEnable();			// 使能IRQ中断
	RFtoTXmode();			//initiate sending
}

/////////////////////////////////////////////////////////////////////////////////
//sending command package from t_buf0[0] to t_buf0[send_cnt+2] including CRC
//status :ok
/////////////////////////////////////////////////////////////////////////////////
void RF_SendAddCrc(uint8 send_cnt)
{
uint16 crc_data;

////
//#ifdef NO_RESP_BROAD_CAST
	if((Comm_Src_Addr==BROAD_CAST_ADDR)||(RF_ModemState!=ENABLE_FLAG))	return;
//#else
//	if(RF_ModemState!=ENABLE_FLAG) return;
//#endif

//	while((RF_TxCounter|RF_TxBitCounter)!=0);
	WatchDogClear();				//clr watchdog
	mSecondTick=WHILE_DELAY_TIME;
	while(((RF_TxCounter|RF_TxBitCounter)!=0)&&(mSecondTick>1));
	if(mSecondTick<=1) DB_SendString("Time overflow in RF_SendAddCrc()");
	WatchDogClear();				//clr watchdog
////
		IRQDisable();
		RF_makeSynFlag();							//4+4+2 bytes

//// byte counter
		RF_Tx_Buf[RFt_inp] = send_cnt+4;			//2byte for CRC_code, 2byte for MODULE_ID_ADDR
		RFt_inp++;	if(RFt_inp>=TX_BUFFER_LEN)  RFt_inp=0;
		RF_TxCounter++;

//// byte counter check=(~byte counter)

⌨️ 快捷键说明

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