📄 rf.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 + -