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

📄 rf.c

📁 实现了uc/os下面的串口、nRF2401的控制
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                               Guangzou ZLG-MCU Development Co.,LTD.
**                                      graduate school
**                                 http://www.zlgmcu.com
**








**--------------File Info-------------------------------------------------------------------------------
** File name:			main.c
** Last modified Date:  2004-09-16
** Last Version:		1.0
** Descriptions:		The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by:			Chenmingji
** Created date:		2004-09-16
** Version:				1.0
** Descriptions:		The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
********************************************************************************************************/

#include "config.h"

	
#define CLK1 	(1<<5)
#define	CS		(1<<11)
#define	RF_DATA	(1<<6)
#define	CE		(1<<9)
#define DR1     (1<<8)
#define	PWR_UP	(1<<10)


uint8 	temp8;
uint8 	InitData[15];

uint8   Data1;

uint8 ByteCnt;
uint8 BitCnt;
uint32 i;



//static volatile uint8 rf_rcv_neOS_FLAG_GRP * RF_Rcv_Sem;








/*************************************BuildSPIWord START****************************/
void BuildInitWord()
{
	InitData[0]=0x50;		//RX receiver 2, Datalength 80bit(10 byte)
	InitData[1]=0x50;		//RX receiver 1, Datalength 80bit(10 byte)
	InitData[2]=0x00;
	InitData[3]=0xcc;
	InitData[4]=0xcc;
	InitData[5]=0xcc;
	InitData[6]=0xcc;
	InitData[7]=0x00;
	InitData[8]=0xcc; 		//RX receiver 1 address   High byte
	InitData[9]=0xcc;		//RX receiver 1 address   High byte
	InitData[10]=0xcc;		//RX receiver 1 address   Low byte
	InitData[11]=0xcc;		//RX receiver 1 address   Low byte
	//InitData[12]=0x82;	//this is for 32 bit address(Bit7-Bit2), 16bit CRC(Bit1), CRC disable(Bit0) for ES chip
	InitData[12]=0x83;		//this is for 32 bit address(Bit7-Bit2), 16bit CRC(Bit1), CRC enable(Bit0) for final chip	
	InitData[13]=0x4f;		//One receiver(Bit7), shock Mode(Bit6), Datarate(Bit5) 250K, crystal(Bit4-Bit2), RF Power(Bit1-Bit0)
	//InitData[13]=0x6f;	//One receiver(Bit7), shock Mode(Bit6), Datarate(Bit5) 1M, crystal(Bit4-Bit2), RF Power(Bit1-Bit0)
	InitData[14]=0x05;		//Channel Number(Bit7-Bit1), RX/TX mode(Bit0)
}
/*************************************BuildSPIWord END******************************/

/*************************************InitnRF2401 START******************************/		
void InitnRF2401()
{
	IO0DIR = IO0DIR | RF_DATA;
	IO0CLR = CE;					//Disable CE
	IO0SET = CS;							//Enable CS--confige mode
	for (ByteCnt=0;ByteCnt<15;ByteCnt++)
		{
		temp8=InitData[ByteCnt];
		for (BitCnt=0;BitCnt<8;BitCnt++)
			{
				if ((temp8 & 0x80) == 0)	//Check if first bit is HIGH
					IO0CLR = RF_DATA;		//Set RF_DATA low
				else
					IO0SET = RF_DATA;		//Set RF_DATA high
				temp8 = temp8<<1;	//Left Shift to get next bit
				DoSPIClock();	//Call "DoClock" to generate a clock pulse
			}
		}
	IO0CLR = CS;						//Disable CS--standby mode	
	IO0CLR = RF_DATA;						//Set RF_DATA low
}
/*************************************InitnRF2401 END *******************************/


/*************************************DoSPIClock START******************************/
int DoSPIClock()
{
	IO0SET = CLK1;
    for(i=0;i<5;i++);
	IO0CLR = CLK1;
	return (0);
}	


/*************************************DoSPIClock END *******************************/
/*************************************CE_High   START ******************************/
void CE_High()
{
	IO0SET = CE;
}
/*************************************CE_High    END *******************************/
/*************************************TXEN_LOW  START ******************************/

void nRF2401_ON()
{
	IO0SET = PWR_UP;
}
/*************************************nRF2401_ON END *******************************/


/*************************************RXEN_HIGH START ******************************/
void RXEN_HIGH()
{
	IO0CLR = CE;				//Set CE LOW		
	IO0SET = CS;				//Set CS HIGH--confige mode
	IO0DIR = IO0DIR | RF_DATA;
	IO0SET = RF_DATA;				//Set RF_DATA HIGH
	DoSPIClock(); 		//Make one SPIClock cycle
	IO0CLR = CS;				//Set CS LOW		
	IO0SET = CE;				//Set CE HIGH--active mode
}
/*************************************RXEN_HIGH  END *******************************/
/*************************************TXEN_LOW  START ******************************/		
void TXEN_LOW()
{
	IO0CLR = CE;				//Set CE LOW			
	IO0SET = CS;
	IO0DIR = IO0DIR | RF_DATA;				//Set CS HIGH--confige mode
	IO0CLR = RF_DATA;				//Set RF_DATA LOW
	DoSPIClock();		//Make one SPIClock cycle
	IO0CLR = CS;				//Set CS LOW		
	IO0SET = CE;				//Set CE HIGH--active mode
}

/*************************************TXEN_LOW   END *******************************/

/*************************************ShockBurst START *****************************/
void BuildShockWord()
{
	TXData[0]=0xcc;		//MSB    ;RX receiver 1 address   High byte
	TXData[1]=0xcc;		//MSB-1  ;RX receiver 1 address   High byte
	TXData[2]=0xcc;		//MSB-2  ;RX receiver 1 address   Low byte
	TXData[3]=0xcc;		//MSB-3  ;RX receiver 1 address   Low  byte
	TXData[4]=Data1;    //MSB-4  ;RF_DATA byte 9
	TXData[5]=0x02;		//MSB-5  ;RF_DATA byte 8
	TXData[6]=0x03;		//MSB-6  ;RF_DATA byte 7
	TXData[7]=0x04;		//MSB-7  ;RF_DATA byte 6
	TXData[8]=0x05;		//MSB-8  ;RF_DATA byte 5
	TXData[9]=0x06;		//MSB-9  ;RF_DATA byte 4
	TXData[10]=0x07;	//MSB-10 ;RF_DATA byte 3
	TXData[11]=0x08;	//MSB-11 ;RF_DATA byte 2
	TXData[12]=0x09;	//MSB-12 ;RF_DATA byte 1
	TXData[13]=0x10;	//MSB-13 ;RF_DATA byte 0   
}
/************************************* BuildShockWord END *******************************/



/************************************* ShockBurst   START *******************************/
void ShockBurst()
{
	IO0DIR = IO0DIR | RF_DATA;
	IO0CLR = CS;					//Pull CS low
	IO0SET = CE;					//Enable CE	active mode
	for (ByteCnt=0;ByteCnt<14;ByteCnt++)
	{
		temp8 = TXData[ByteCnt];
		for (BitCnt=0;BitCnt<8;BitCnt++)
		{
			if ((temp8 & 0x80) == 0)	//Check if first bit is HIGH
				IO0CLR = RF_DATA;		//Set RF_DATA low
			else
				IO0SET = RF_DATA;		//Set RF_DATA high
			temp8 = temp8<<1;	//Left Shift to get next bit
			DoSPIClock();	//SendData;	
		}
	}
	IO0CLR = CE;						//Disable CS--standby mode	
	IO0CLR = RF_DATA;
}
/************************************* ShockBurst END ***********************************/


/************************************* CheckButtons START *******************************/	
void RF_send()
{
			Data1 = UART0Getch(); 
			
			TXEN_LOW();		//set TX mode
			BuildShockWord();
			ShockBurst();
			i++;i++;
			i--;i--;		//delay for RF send
			RXEN_HIGH();
			
}
/************************************* CheckButtons END *********************************/



/************************************* ReceiveShock START *******************************/
void ReceiveShock()
{
    
  //  uint8 err;
	temp8=0;
	for (ByteCnt=0;ByteCnt<10;ByteCnt++)
	{
		for(BitCnt=0;BitCnt<8;BitCnt++)
		{
			temp8 = temp8<<1;	//shift left to receive next bit
			IO0SET = CLK1;			//set clock high
			
			IO0DIR = IO0DIR | RF_DATA;   
			IO0SET = RF_DATA;
			IO0DIR = IO0DIR & (~RF_DATA);   
			
			if((IO0PIN & RF_DATA) != 0)		//check if RF_DATA=high		
				temp8 |= 0x01;	//yes - set bit high
			IO0CLR = CLK1;			//set clock low
			
			i++;i--;
		}
	
		RXData[ByteCnt] = temp8;
		
		IO0DIR = IO0DIR | DR1;   
		IO0SET = DR1;
		IO0DIR = IO0DIR & (~DR1); 
		
	 }
	 
//	 rf_rcv_new        OSFlagPost(RF_Rcv_Sem,(OS_FLAGS)1,OS_FLAG_SET,&err);= 1;

}




void RF_Init(void)
{
   
//    uint8 err;
	IO0DIR = CS|CE|CLK1|PWR_UP;
	
	nRF2401_ON();	// 设备上电
	BuildInitWord(); 	//接收模式配置字
	InitnRF2401();	//将配置数据写入2401
	CE_High();	//激活接收模式
	RXEN_HIGH();


}






/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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