📄 nrf905.c
字号:
#include "nRF905.h"
#define uchar unsigned char
#define uint unsigned int
code TxAddress[4]={0xcc,0xcc,0xcc,0xcc};
#define TxRxBuf_Len 32
unsigned char TxRxBuf[TxRxBuf_Len];
static void Delay(uchar n)
{
uint i;
while(n--)
for(i=0;i<80;i++);
}
#ifdef TX_ENABLE
/*******************************************************************************************/
// TX_ENABLE TX_ENABLE TX_ENABLE
/*******************************************************************************************/
code RFConfig RxTxConf =
{
10,
RFConfig_Bit0, RFConfig_Bit1, RFConfig_Bit2, RFConfig_Bit3, RFConfig_Bit4,
RFConfig_Bit5, RFConfig_Bit6, RFConfig_Bit7, RFConfig_Bit8, RFConfig_Bit9
};
/*******************************************************************************************/
//function SetTxMode();
/*******************************************************************************************/
void SetTxMode(void)
{
TRX_CE=0;
TX_EN=1;
Delay(1); // delay for mode change(>=650us)
}
/*******************************************************************************************/
unsigned char CheckCD(void) //Pin->检查是否已存在 同频率载波
{
if (CD==1)
{
return 1;
}
else
{
return 0;
}
}
/*******************************************************************************************/
void TxPacket(void)
{
uchar i;
//Config905();
CSN=0; // Spi enable for write a spi command
SpiWrite(WTP); // Write payload command
for (i=0;i<32;i++)
{
SpiWrite(TxRxBuf[i]); // Write 32 bytes Tx data
}
CSN=1; // Spi disable
Delay(1);
CSN=0; // Spi enable for write a spi command
SpiWrite(WTA); // Write address command
for (i=0;i<4;i++) // Write 4 bytes address
{
SpiWrite(TxAddress[i]);
}
CSN=1; // Spi disable
TRX_CE=1; // Set TRX_CE high,start Tx data transmission
Delay(1); // while (DR!=1);
TRX_CE=0; // Set TRX_CE low
}
/*******************************************************************************************/
//
/*RF-Configure-Register byte:1*/
code unsigned char RF_byte1[4]={0x00,0x04,0x08,0x0c};
//不同的发射功率
void SetRF_PA_PWR(unsigned char i) //SPI->设置发射功率
{
CSN=0; // Spi enable for write a spi command
SpiWrite(0x01); // Write config command写放配置命令 从1号字节开始写
SpiWrite(RF_byte1[i]);
CSN=1; // Disable Spi
}
#endif
#ifdef RX_ENABLE
/*******************************************************************************************/
// RX_ENABLE RX_ENABLE RX_ENABLE
/*******************************************************************************************/
//unsigned char TxRxBuf_head=0;
//unsigned char TxRxBuf_tail=0;
//与TxRxBuf共同构成一个循环队列
#ifndef TX_ENABLE
code RFConfig RxTxConf =
{
10,
RFConfig_Bit0, RFConfig_Bit1, RFConfig_Bit2, RFConfig_Bit3, RFConfig_Bit4,
RFConfig_Bit5, RFConfig_Bit6, RFConfig_Bit7, RFConfig_Bit8, RFConfig_Bit9
};
#endif
/*******************************************************************************************/
//function SetRxMode();
/*******************************************************************************************/
void SetRxMode(void)
{
TX_EN=0;
TRX_CE=1;
Delay(1); // delay for mode change(>=650us)
}
/*******************************************************************************************/
unsigned char CheckDR(void) //检查是否有新数据传入 Data Ready
{
if (DR==1 && TRX_CE==1 && TX_EN==0)
{
return 1;
}
else
{
return 0;
}
}
/*******************************************************************************************/
void RxPacket(void)
{
uchar i;
TRX_CE=0; // Set nRF905 in standby mode
/* SpiCmdRead(RRP,TxRxBuf,32);*/
CSN=0; // Spi enable for write a spi command
SpiWrite(RRP); // Read payload command
for (i = 0 ;i < 32 ;i++)
{
TxRxBuf[i]=SpiRead(); // Read data and save to buffer
}
// TxRxBuf_tail = i>=TxRxBuf_Len? 0:i; //数据接收完毕,修改TxRxBuf
CSN=1; // Disable spi
while(DR||AM);
TRX_CE=1;
}
/*******************************************************************************************/
#endif
/*******************************************************************************************/
//function InitIO();
/*******************************************************************************************/
void nRF905Init(void)
{
/*SPI init*/
CSN=1; // Spi disable
SCK=0; // Spi clock line init low
/*ICO*/
DR=1; // Init DR for input
AM=1; // Init AM for input
CD=1; // Init CD for input
/*模式设置*/
PWR_UP=1; // nRF905 power on
TRX_CE=0; // Set nRF905 in standby mode
TX_EN=0; // set radio in Rx mode
}
/*******************************************************************************************/
//function Config905();
/*******************************************************************************************/
void Config905(void)
{
SpiCmdWrite(WC ,RxTxConf.buf ,RxTxConf.n);
/* uchar i;
CSN=0; // Spi enable for write a spi command
SpiWrite(WC); // Write config command写放配置命令
for (i=0;i<RxTxConf.n;i++) // Write configration words 写放配置字
{
SpiWrite(RxTxConf.buf[i]);
}
CSN=1; // Disable Spi
*/
}
/*******************************************************************************************/
void SetST_BYmode(void)
{
TX_EN=0;
TRX_CE=0;
Delay(1); // delay for mode change(>=650us)
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -