📄 nrf905.c
字号:
#include "NRF905.h"
#include "type.h"
//extern MSCOMM COMM;
extern RFCONFG RFConfg;
//extern uchar CON_4300_10[10];
/*******************************************************************************
* 名 称:
* 说 明:
* 功 能:
* 调 用:
* 输 入:
* 返回值:
*******************************************************************************/
void SPI_ByteWrite(uchar Data)
{
uchar i;
for(i=0;i<8;i++)
{
ClrRF_SCK();
if(( Data & 0x80 ) == 0x80)
SetRF_SI();
else
ClrRF_SI();
_NOP();
Data<<=1;
SetRF_SCK();
_NOP();
}
ClrRF_SCK();
}
/*******************************************************************************
* 名 称:
* 说 明:
* 功 能:
* 调 用:
* 输 入:
* 返回值:
*******************************************************************************/
uchar SPI_ByteRead(void)
{
uchar i;
uchar temp = 0;
ClrRF_SCK();
_NOP();
_NOP();
for(i=0;i<8;i++)
{
SetRF_SCK();
temp<<=1;
_NOP();
_NOP();
if((RFIN&RF_SO)==RF_SO) //获得端口状态
temp |= 0x01;
_NOP();
ClrRF_SCK();
_NOP();
_NOP();
}
return temp;
}
/*******************************************************************************
* 名 称:
* 说 明:
* 功 能:
* 调 用:
* 输 入:
* 返回值:
*******************************************************************************/
void RF_Delay(uint temp)
{
uchar i;
for(i=temp;i>0;i--)
{
_NOP();
}
}
/*******************************************************************************
* 名 称:
* 说 明:
* 功 能:
* 调 用:
* 输 入:
* 返回值:
*******************************************************************************/
void RFStandby(void)
{
SetRF_PWR();
ClrRFTX_CE();
ClrRFTX_EN();
}
/*******************************************************************************
* 名 称:
* 说 明:
* 功 能:
* 调 用:
* 输 入:
* 返回值:
*******************************************************************************/
void RFRXModel(void)
{
SetRF_PWR();
SetRFTX_CE();
ClrRFTX_EN();
}
/*******************************************************************************
* 名 称:
* 说 明:
* 功 能:
* 调 用:
* 输 入:
* 返回值:
*******************************************************************************/
void RFTXModel(void)
{
SetRF_PWR();
SetRFTX_CE();
SetRFTX_EN();
}
/*******************************************************************************
* 名 称:
* 说 明:
* 功 能:
* 调 用:
* 输 入:
* 返回值:
*******************************************************************************/
void RFPortInit(void)
{
RFDIR |= (RFTX_EN + RFTX_CE + RF_PWR + RF_SI + RF_SCK + RF_CSN);
RFDIR &=~RF_SO;
DRIES &=~RF_DR;
DRIE = 0;
DRIE |= RF_DR;
}
/*******************************************************************************
* 名 称:
* 说 明:
* 功 能:
* 调 用:
* 输 入: 输入p指向本身器件接收地址 本应用中为表号数据
* 返回值:
*******************************************************************************/
void RFConfig(RFCONFG *p)
{
uchar i;
//uchar *ptr1;
uchar CON_RF[10] = {0x6B,0x0C,0x44,0x20,0x20,0x00,0x00,0x00,0x03,0xdb};
CON_RF[5] = *(uchar *)(p->ReceAdd)++;
CON_RF[6] = *(uchar *)(p->ReceAdd)++;
CON_RF[7] = *(uchar *)(p->ReceAdd)++;
CON_RF[8] = *(uchar *)(p->ReceAdd)++;
CON_RF[3] = p->ReceNum;
CON_RF[4] = p->SendNum;
RFStandby();
ClrRF_CSN();
SPI_ByteWrite(0x00);
for(i=0;i<10;i++)
{
SPI_ByteWrite(CON_RF[i]);
}
SetRF_CSN();
RF_Delay(250);
}
void RFReadConfig(uchar *p)
{
uchar i;
RFStandby();
ClrRF_CSN();
SPI_ByteWrite(0x10);
for(i=0;i<10;i++)
{
*p = SPI_ByteRead();
p++;
}
SetRF_CSN();
RF_Delay(200);
}
/*******************************************************************************
* 名 称:
* 说 明:
* 功 能:
* 调 用:
* 输 入:
* 返回值:
*******************************************************************************/
void RF_SendBytes(uchar *Add,uchar *p,uchar Len)
{
uchar i;
RFStandby();
ClrRF_CSN();
SPI_ByteWrite(WTA); //Write TX-Address
for(i=0;i<4;i++)
{
SPI_ByteWrite(*Add);
Add++;
}
SetRF_CSN();
_NOP();
_NOP();
ClrRF_CSN();
SPI_ByteWrite(WTP);
for(i=0;i<Len;i++)
{
SPI_ByteWrite(*p);
p++;
}
SetRF_CSN();
RF_Delay(300);
RFTXModel();
}
/*******************************************************************************
* 名 称:
* 说 明:
* 功 能:
* 调 用:
* 输 入:
* 返回值:
*******************************************************************************/
void RF_RecBytes(uchar *p,uchar Len)
{
uchar i;
RFStandby();
//RF_Delay(200);
ClrRF_CSN();
SPI_ByteWrite(RRP); //Read RX-payload
for(i=0;i<Len;i++)
{
*p = SPI_ByteRead();
p++;
}
SetRF_CSN();
}
/*******************************************************************************
**
** 文件结束
**
*******************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -