📄 nrf905._c
字号:
#include <iom128v.h>
#include <iom128.h>
#include <macros.h>
//#include <BIT.h>
#include "NRF905.h"
#include "spi.c"
#define TX_EN _PD6
#define TRX_CE _PD4
#define PWR_UP _PD2
#define CD READ_PD5
#define AM READ_PD7
#define DR READ_PD3
#define uchar unsigned char
#define uint unsigned int
unsigned char TxAddress[4]={TX_ADDR_Byte0,TX_ADDR_Byte1,TX_ADDR_Byte2,TX_ADDR_Byte3};
RFConfig RxTxConf =
{
10,
RFConfig_Byte0, RFConfig_Byte1, RFConfig_Byte2, RFConfig_Byte3, RFConfig_Byte4,
RFConfig_Byte5, RFConfig_Byte6, RFConfig_Byte7, RFConfig_Byte8, RFConfig_Byte9
};
static void Delay(uchar n)
{
uint i;
while(n--)
for(i=0;i<1000;i++);
}
/*******************************************************************************************/
//function InitIO(); 初始化IO
/*******************************************************************************************/
void nRF905Init(void)
{
/*SPI init*/
DDRD|=BIT(2)|BIT(4)|BIT(6);
DDRD&=~(BIT(5)|BIT(7)|BIT(3));
SpiInit();
//CSN=1; // Spi disable
//SCK=0; // Spi clock line init high
DR=1; // Init DR for input
AM=1; // Init AM for input
PWR_UP=1; // nRF905 power on
Delay(4);
TRX_CE=0; // Set nRF905 in standby mode
TX_EN=0; // set radio in Rx mode
//====================
/*
TX_EN_DDR = 1;
TRX_CE_DDR = 1;
PWR_UP_DDR = 1;
DR_DDR = 0;
CD_DDR = 0;
*/
//====================
}
/*******************************************************************************************/
//function WriteTxAddress(); 写入目标地址
/*******************************************************************************************/
void WriteTxAddress(void)
{
unsigned char i;
unsigned char len= (RxTxConf.buf[2]>>4);
CSN=0; // Spi enable for write a spi command
SpiWrite(WTA); // Write address command
//for (i=0;i<TX_AWF;i++)
for (i=0;i<len;i++)
{
SpiWrite(TxAddress[i]);
delayus(10);
}
CSN=1; // Spi disable
}
/*******************************************************************************************/
//function Config905(); //配置905寄存器
/*******************************************************************************************/
void Config905(void)
{
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]);
delayus(10);
}
CSN=1; // Disable Spi
WriteTxAddress();
}
/*******************************************************************************************/
//function SetTxMode(); 设置为发送模式
/*******************************************************************************************/
void SetTxMode(void)
{
TRX_CE=0;
TX_EN=1;
Delay(1); // delay for mode change(>=650us)
}
/*******************************************************************************************/
//function SetRxMode(); 设置为接收模式
/*******************************************************************************************/
void SetRxMode(void)
{
TX_EN=0;
TRX_CE=1;
Delay(1); // delay for mode change(>=650us)
}
//发送数据包
/*******************************************************************************************/
void TxPacket(unsigned char *TxBuf)
{
uchar i;
CSN=0; // Spi enable for write a spi command
SpiWrite(WTP); // Write payload command
//for (i=0;i<TX_PW;i++)
for (i=0;i<RxTxConf.buf[4];i++)
{
SpiWrite(TxBuf[i]); // Write 32 bytes Tx data
delayus(10);
}
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
}
/*
*******************************************************************************************
* 读取数据包
* 返回值: 1-成功接收到数据 0-没有接收到数据
*******************************************************************************************
*/
unsigned char RxPacket(unsigned char *RxBuf)
{
uchar i;
if (DR) //DR 高电平 有接收到数据
{
TRX_CE=0; // Set nRF905 in standby mode
CSN=0; // Spi enable for write a spi command
SpiWrite(RRP); // Read payload command
//for (i = 0 ;i < RX_PW ;i++)
for (i = 0 ;i < RxTxConf.buf[3] ;i++)
{
RxBuf[i]=SpiRead(); // Read data and save to buffer
delayus(10);
}
CSN=1; // Disable spi
while(DR);//||AM);
TRX_CE=1;
return 1;
}
else
{
return 0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -