?? nrf905.c
字號:
#include <ipOS.h>
#include "NRF905.h"
#include "SPI.h"
#define uchar unsigned char
#define uint unsigned int
u8_t TxAddress[4]={TX_ADDR_Byte0,TX_ADDR_Byte1,TX_ADDR_Byte2,TX_ADDR_Byte3};
RFConfig RxTxConf =
{
10,
{RFConfig_Bit0, RFConfig_Bit1, RFConfig_Bit2, RFConfig_Bit3, RFConfig_Bit4,
RFConfig_Bit5, RFConfig_Bit6, RFConfig_Bit7, RFConfig_Bit8, RFConfig_Bit9}
};
//static
void Delay(u8_t n)
{
u8_t i;
while(n--)
for(i=0;i<140;i++);
;
}
/*******************************************************************************************/
//function InitIO(); 初始化IO
/*******************************************************************************************/
void nRF905Init(void)
{
/*SPI init*/
SpiInit();
/*
TX_EN_DDR = 1;
TRX_CE_DDR = 1;
PWR_UP_DDR = 1;
DR_DDR = 0;
CD_DDR = 0;
PAE_DDR = 1;
*/
*(u8_t *)RCDIR=0xF0;
*(u8_t *)RBDIR=0x07;
//asm("clrb RCOUT,3"); //PAE =0;// disable the pa
/*ICO*/
// DR=1; // Init DR for input
// AM=1; // Init AM for input
// CD=1; // Init CD for input
/*模式設(shè)置
PWR_UP=1;nRF905 power on
TRX_CE=0;Set nRF905 in standby mode
TX_EN=0;set radio in Rx mode */
asm("setb RCOUT,2
clrb RCOUT,1
clrb RCOUT,0");
}
/*******************************************************************************************/
//function WriteTxAddress(); 寫入目標(biāo)地址
/*******************************************************************************************/
void WriteTxAddress(void)
{
u8_t i;
asm("clrb RFOUT,5"); //SPI_CSN=0; // Spi enable for write a spi command
SpiWrite(WTA); // Write address command
for (i=0;i<TX_AWF;i++)
{
SpiWrite(TxAddress[i]);
}
asm("setb RFOUT,5"); //SPI_CSN=1; // Spi disable
}
/*******************************************************************************************/
//function Config905(); //配置905寄存器
/*******************************************************************************************/
void Config905(void)
{
u8_t i;
asm("clrb RFOUT,5"); //SPI_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]);
}
asm("setb RFOUT,5"); //SPI_CSN=1; // Disable Spi
WriteTxAddress();
}
/*******************************************************************************************/
//function SetTxMode(); 設(shè)置為發(fā)送模式
/*******************************************************************************************/
void SetTxMode(void)
{
asm("setb RCOUT,3"); //PAE= 1;// Enable the pa
/*TRX_CE=0;
TX_EN=1;*/
asm("setb RCOUT,0
clrb RCOUT,1");
Delay(1); // delay for mode change(>=650us)
}
/*******************************************************************************************/
//function SetRxMode(); 設(shè)置為接收模式
/*******************************************************************************************/
void SetRxMode(void)
{
asm("clrb RCOUT,3"); //PAE= 0;// disnable the pa
/*TX_EN=0;
TRX_CE=1;*/
asm("clrb RCOUT,0
setb RCOUT,1");
Delay(1); // delay for mode change(>=650us)
}
//發(fā)送數(shù)據(jù)包
/*******************************************************************************************/
void TxPacket(unsigned char *TxBuf)
{
u8_t i;
asm("clrb RFOUT,5"); //SPI_CSN=0; // Spi enable for write a spi command
SpiWrite(WTP); // Write payload command
for (i=0;i<TX_PW;i++)
{
SpiWrite(TxBuf[i]); // Write 32 bytes Tx data
}
asm("setb RFOUT,5"); //SPI_CSN=1; // Spi disable
asm("setb RCOUT,1");
asm("setb RCOUT,3"); //PAE= 1;// Enable the pa
Delay(100);
//TRX_CE=1; // Set TRX_CE high,start Tx data transmission
//Delay(1); // while (DR!=1);
//
while (!((*(u8_t *)RBIN)&0x04));
asm("clrb RCOUT,1"); //TRX_CE=0,Set TRX_CE low
asm("clrb RCOUT,0");
asm("clrb RCOUT,3"); //PAE= 0;
//Delay(2);// 限制發(fā)包數(shù)率
}
u8_t RxPacket(u8_t *RxBuf)
{
uchar i;
asm("clrb RCOUT,3"); //PAE= 0;// if pa enable,disnable
if ((*(u8_t *)RBIN)&0x04) //DR 高電平 有接收到數(shù)據(jù)
{
asm("clrb RCOUT,1"); //TRX_CE=0; // Set nRF905 in standby mode
asm("clrb RFOUT,5"); //SPI_CSN=0; // Spi enable for write a spi command
SpiWrite(RRP); // Read payload command
for (i = 0 ;i < RX_PW ;i++)
{
RxBuf[i]=SpiRead(); // Read data and save to buffer
}
asm("setb RFOUT,5"); //SPI_CSN=1; // Disable spi
//while((*(u8_t *)RBIN)&0x04);//||AM);
asm("setb RCOUT,1"); //TRX_CE=1;
return 1;
}
else
{
return 0;
}
}
/*******************************************************************************************/
//#ifdef SETST_BYMODE_ENABLE
void SetST_BYmode(void)
{
asm("clrb RCOUT,3"); //PAE= 0;// if pa enable,disnable
/*TX_EN=0;
TRX_CE=0;*/
asm("clrb RCOUT,1
clrb RCOUT,0");
Delay(1); // delay for mode change(>=650us)
}
//#endif
void ReadStatic(void)
{
volatile u8_t R0,R1,R2,R3,R4,R5,R6,R7,R8,R9;
SetST_BYmode();
asm("clrb RFOUT,5");
SpiWrite(RC);
R0=SpiRead();
R1=SpiRead();
R2=SpiRead();
R3=SpiRead();
R4=SpiRead();
R5=SpiRead();
R6=SpiRead();
R7=SpiRead();
R8=SpiRead();
R9=SpiRead();
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -