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

📄 drv2_cc1000.c

📁 CC1000 Rf modem C codes for philips sLpc213X ARM MCU.
💻 C
📖 第 1 页 / 共 3 页
字号:
#include "config_GD61.h"
#include "include_GD61.h"   						// ANSI standard header file
#include <ctype.h>
////////////////////////////////////////////////////////////////////////
extern volatile uint8  CC1000Mode;
extern volatile uint8  RF_RxSynSemaphore;
extern volatile uint16 RF_TxCounter;
extern volatile uint8  RF_TxBitCounter;

extern volatile uint16 mSecondTick;

extern volatile uint8  RF_ActiveFlag;
extern volatile uint8  RF_Tx_Buffer[TX_BUFFER_LEN];			// UART1 sending buffer
extern volatile uint16 RFt_inp,RFt_outp,RF_TxCounter;
extern volatile uint8  RF_TxBitCounter;					// bit pointer of data_byte in sending

extern volatile uint8  RF_Rx_Buffer[RX_BUFFER_LEN];			// UART1 receiving buffer
extern volatile uint16 RFr_inp,RFr_outp,RF_RxCounter;

extern volatile uint8   r_ActiveFlag0;
extern volatile uint8 	r_buf0[RX_BUFFER_LEN];			// UART0 receiving buffer
extern volatile uint16  r_inp0,r_outp0,r_count0;

// The configuration data for CC1000 is stored in the EEPROM data memory
// This allows the configuration to persist even when power is shut off,
// and also prevents this data from cluttering up the SRAM data memory.
char EEPROMCC1000Config[33];
char EEPROM_TxCurrent;
char EEPROM_RxCurrent; 
char EEPROM_TxPll;
char EEPROM_RxPll;

// RAM variables that mirror the EEPROM variables above
char TxCurrent;
char RxCurrent;
char RF_TxPll;
char RF_RxPll;

char RF_ModemState;

// Default RF setups, stored in Flash
   
// Output power is set to 0 dBm so that use with 100% duty cycle is legal in most European countries
// Some countries allow +10 dBm without a restriction on duty cycle
// Also, if 10% duty cycle can be guaranteed, output power can be increased to +10 dBm

//429.483164MHz
const char DefaultConfig429_5[35] = {0x50,0x00,0x00,0x41,0x67,0x70,0x02,0x80,0x44,0x12,0x0F,0x58,0x10,0x26,0x8E,0x69,
  								     0x47,0x70,0x01,0x1C,0x16,0x10,0x0A,0x06,0x03,0x01,0x02,0x00,0x00,0x00,0x3F,0x00};
const char DefaultTXPLL429_5 = 0x48;
const char DefaultRXPLL429_5 = 0x58;

//430.875231MHz
const char DefaultConfig431[35] = {0x5E,0xE0,0x00,0x41,0x9D,0xD0,0x02,0x80,0x44,0x12,0x0F,0x68,0x10,0x26,0x8E,0x69,
  								   0x47,0x70,0x01,0x1C,0x16,0x10,0x0A,0x06,0x03,0x01,0x02,0x00,0x00,0x00,0x3F,0x00};    
const char DefaultTXPLL431 = 0x48;
const char DefaultRXPLL431 = 0x68;

//432.009508MHz
const char DefaultConfig432[35] = {0x5F,0x20,0x00,0x41,0xCA,0x1F,0x02,0x80,0x44,0x12,0x0F,0x68,0x10,0x26,0x8E,0x69,
  								   0x47,0x70,0x01,0x1C,0x16,0x10,0x0A,0x06,0x03,0x01,0x02,0x00,0x00,0x00,0x3F,0x00};
const char DefaultTXPLL432 = 0x48;
const char DefaultRXPLL432 = 0x68;  								   	

//keep the old config:433.27 MHz, 0 dBm output (Europe) 
const char DefaultConfig433_3[35] = {0x66,0xC0,0x00,0x41,0xFB,0x2D,0x02,0x80,0x44,0x12,0x0F,0x70,0x10,0x26,0x8E,0x69,
  								   	 0x47,0x70,0x01,0x1C,0x16,0x10,0x0A,0x06,0x03,0x01,0x02,0x00,0x00,0x00,0x3F,0x00};
const char DefaultTXPLL433_3 = 0x48;
const char DefaultRXPLL433_3 = 0x70;										

//434.845200MHz
const char DefaultConfig434_6[35] = {0x42,0x40,0x00,0x42,0x38,0xE4,0x02,0x80,0x44,0x12,0x0F,0x48,0x10,0x26,0x8E,0x69,
  								   	 0x47,0x70,0x01,0x1C,0x16,0x10,0x0A,0x06,0x03,0x01,0x02,0x00,0x00,0x00,0x3F,0x00};
const char DefaultTXPLL434_6 = 0x48;
const char DefaultRXPLL434_6 = 0x48;  								   	
  								   	
//435.979477MHz	
const char DefaultConfig436[35] = {0x60,0x00,0x00,0x42,0x65,0x33,0x02,0x80,0x44,0x12,0x0F,0x68,0x10,0x26,0x8E,0x69,
  								   0x47,0x70,0x01,0x1C,0x16,0x10,0x0A,0x06,0x03,0x01,0x02,0x00,0x00,0x00,0x3F,0x00};  								   	 								     								   	

const char DefaultTXPLL436 = 0x48;
const char DefaultRXPLL436 = 0x68;

/* 
// 869.850 MHz, +5 dBm output (Europe)
const char DefaultConfig868[35] = {0x58,0x60,0x00,0x58,0x5B,0x43,0x01,0xAB,0x8C,0x32,0xFF,0x30,0x10,0x26,0x90,0x69,
  								   0x47,0x10,0x01,0x1C,0x16,0x10,0x0A,0x06,0x03,0x01,0x0F,0x00,0x00,0x00,0x3F,0x00};
const char DefaultTXPLL868 = 0x30;
const char DefaultRXPLL868 = 0x30;
  
// 905.002985 MHz, +5 dBm output (US)
const char DefaultConfig905[35] = {0xC7,0x60,0x00,0x5B,0xEE,0xF4,0x01,0xAB,0x8C,0x32,0xFF,0x68,0x10,0x26,0x91,0x69,
                                   0x47,0x10,0x01,0x1C,0x16,0x10,0x0A,0x06,0x03,0x01,0x06,0x00,0x00,0x00,0x3F,0x00};
const char DefaultTXPLL905 = 0x30;
const char DefaultRXPLL905 = 0x68;
*/

void WriteStr(char *str);
void WriteLine(char *str);
void WriteHEX(int hexval);
void RFtoTXmode(void);
void RFtoRXmode(void);
void DumpCC1000Regs(void);
void SetRFDataRate(void);
void SetupCC1000All(void);
void DefaultSettings(void);
void DisplayConfigMenu(void);
void HandleConfigMenu(char inputvalue);
void RF_ManualConfig(void);
void PrintRF_Mode(void);
void RF_makeSynFlag(void);
//void RF_SendingOver(void);
void RF_SendChar(char *send_pt,uint8 send_cnt);
//void RF_SendString(char *send_pt);
void RF_SendAddCrc(uint8 send_cnt);
void RF_SendEnter(void);
void Uart0ToRF(void);
void RFtoUart0(void);
void RF_StartCC1000(void);

/***********************************************************************/
/* This routine outputs a string                                       */
/***********************************************************************/
void WriteStr(char *str)
{
  while(*str!='\0') {
    _putchar(*str++);
  }
}

/************************************************************************/
/* This routine outputs a string, and also outputs trailing new-line and*/
/* carrage return characters                                            */
/************************************************************************/
void WriteLine(char *str)
{
  while(*str!='\0') {
    _putchar(*str++);
  }
  _putchar('\r');
  _putchar('\n');

}

/*************************************************************************/
/* This routine converts an ASCII hexadecimal digit to the corresponding */
/* integer value                                                         */
/*************************************************************************/
/*
char hexdigit2int(char val)
{
  if ((val>=0x30)&&(val<=0x39))						return val-0x30;
  if ((toupper(val)>=0x41)&&(toupper(val)<=0x46))	return val-0x41+10;
													return 0x00;
}
*/
/************************************************/
/* This routine outputs a long value in decimal */
/************************************************/
/*
void writelong(int longval)
{
  char i;
  int divider;
  
  divider=1000000000;
  for (i=10;i>0;i--) {
    _putchar((longval/divider)+0x30);
    divider/=10;
  }
}
*/
/*************************************************/
/* This routine outputs an int (in hexadecimal)  */
/*************************************************/
void WriteHEX(int hexval)
{
  char i;
  int temp;
  char val;
  
  _putchar('0');
  _putchar('x');
  
  temp=hexval;
  
  for(i=0;i<4;i++) {
	val=(temp&0xF000)>>12;
	if (val<=9) {
		_putchar(val+0x30);
    } 
    else{
		_putchar(val+0x41-0xA);
    }
	temp=(temp<<4);
  }
}

///////////////////////////////////////////////////////////////
void RFtoTXmode(void)
{
//uint32 TimeOutCnt;

	if(RF_ModemState!=ENABLE_FLAG) return;
	
	if(CC1000Mode!=RFinTX_MODE){
//		while(RF_RxSynSemaphore!=WAIT_SYN_F);
		WatchDogClear();				//clr watchdog
		mSecondTick=WHILE_DELAY_TIME;
		while((RF_RxSynSemaphore!=WAIT_SYN_F)&&(mSecondTick>1));
		if(mSecondTick<=1) Uart0SendString("Time overflow in RFtoTXmode");
		WatchDogClear();				//clr watchdog
				
#ifdef	INCLUDE_RF_INFORMATION
		Uart0SendString("RF to TXmode");	//		Uart0SendEnter();	
//		DelayMS(1);							// finish sending last bit
#endif


		IO1CLR = LED2;			// LED1点亮

		IRQDisable();
				
		PINSEL1  = PINSEL1	& 0xfffffffc; 	// set p0.16 as GPIO
		PINSEL1  = PINSEL1	| 0x00000001;   // 设置管脚连接,P0.16为EINT0
		EXTMODE  = EXTMODE  | 0x00000001;	// 设置EINT0为 edge 触发.
		EXTPOLAR = EXTPOLAR & 0xfffffffe;	// set falling edge interrupt trigger edge

#ifdef ENABLE_FR_AMPLIFER
		IO0SET   = RF_AMP__P0_31;			// AMP enable signal, set pin level to high		
#endif
		IRQEnable();

		SetupCC1000TX(TxCurrent,RF_TxPll);
		CC1000Mode=RFinTX_MODE;
	}
}

///////////////////////////////////////////////////////////////
void RFtoRXmode(void)
{
//uint32 TimeOutCnt;

	if(RF_ModemState!=ENABLE_FLAG) return;

	if(CC1000Mode!=RFinRX_MODE){
//		while((RF_TxCounter|RF_TxBitCounter)!=0);
		WatchDogClear();				//clr watchdog
		mSecondTick=WHILE_DELAY_TIME;
		while(((RF_TxCounter|RF_TxBitCounter)!=0)&&(mSecondTick>1));
		if(mSecondTick<=1) Uart0SendString("Time overflow in RFtoRXmode");
		WatchDogClear();				//clr watchdog

#ifdef	INCLUDE_RF_INFORMATION
		Uart0SendString("RF to RXmode");	//		Uart0SendEnter();
//		DelayMS(1);							// finish sending last bit
#endif


		IO1SET = LED2;			// LED2熄灭

		IRQDisable();

		PINSEL1  = PINSEL1	& 0xfffffffc; 	// set p0.16 as GPIO
		PINSEL1  = PINSEL1	| 0x00000001;   // 设置管脚连接,P0.16为EINT0
		EXTMODE  = EXTMODE  | 0x00000001;	// 设置EINT0为 edge 触发.
		EXTPOLAR = EXTPOLAR | 0x00000001;	// set raising edge interrupt trigger edge

#ifdef ENABLE_FR_AMPLIFER
		IO0CLR   = RF_AMP__P0_31;			// AMP disable, set pin level to low
#endif
		IRQEnable();

		SetupCC1000RX(RxCurrent,RF_RxPll);
		CC1000Mode=RFinRX_MODE;
	}
}

////////////////////////////////////////////////////////////////////
// Dumps the values of all the registers of the CC1000 to the screen

void DumpCC1000Regs(void)
{
}
/*
{
char RegCounter;
    WriteStr("Register dump:\r\n");
//  for(RegCounter=0x00;RegCounter<=0x1C;RegCounter++) {
  for(RegCounter=CC1000_MAIN;RegCounter<=CC1000_PRESCALER;RegCounter++) {
    WriteStr("Addr. ");	WriteHEX(RegCounter);	WriteStr(" : ");
    WriteHEX(ReadFromCC1000Register(RegCounter));
    WriteLine("");
  }
  
//  for(RegCounter=0x40;RegCounter<=0x46;RegCounter++) {
  for(RegCounter=CC1000_TEST6;RegCounter<=CC1000_TEST0;RegCounter++) {
    WriteStr("Addr. ");	WriteHEX(RegCounter);	WriteStr(" : ");
    WriteHEX(ReadFromCC1000Register(RegCounter));
    WriteLine("");
  }
}
*/
//////////////////////////////////////////////////////////////////
// Lets the user select the RF data rate
void SetRFDataRate(void)
{
int i;
char regvalue;
char PLLvalue;

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

  switch(toupper(i)) {
/*
    case '0' :
      regvalue=0x07;
      PLLvalue=0x25;
      break;
    case '1' :
      regvalue=0x03;
      PLLvalue=0x25;
      break;
    case '2' :
      regvalue=0x17;
      PLLvalue=0x25;
      break;
    case '3' :
      regvalue=0x13;
      PLLvalue=0x25;
      break;
    case '4' :
      regvalue=0x27;
      PLLvalue=0x25;
      break;
    case '5' :
      regvalue=0x23;
      PLLvalue=0x25;
      break;
    case '6' :
      regvalue=0x37;
      PLLvalue=0x25;
      break;
    case '7' :
      regvalue=0x33;
      PLLvalue=0x25;
      break;
*/
    case '8' :
      regvalue=0x47;
      PLLvalue=0x3F;
      break;
/*
    case '9' :
      regvalue=0x43;
      PLLvalue=0x3F;
      break;
    case 'A' :
      regvalue=0x57;

⌨️ 快捷键说明

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