📄 drv2_cc1000.c
字号:
// 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 + -