|
楼主 |
发表于 2010-2-1 12:04:36
|
显示全部楼层
然后这是我的nrf24l01.h头文件
#ifndef NRF24L01_H_
#define NRF24L01_H_
#endif /*NRF24L01_H_*/
#include "nRF24L01_def.h"
#ifndef _RX_
unsigned char NRF24L01_TxRxBuf[NRF24L01_TxRxBuf_Len]= "NRF24L01 is working all right!!";
#endif
#ifdef _RX_
unsigned char NRF24L01_TxRxBuf[NRF24L01_TxRxBuf_Len]= "Transmition works well !";
#endif
unsigned char NRF24L01_TxAddr[TXRX_ADDR_WIDTH] = {0xcc,0xcc,0xcc,0xcc,0xcc};
unsigned char NRF24L01_RxAddr[TXRX_ADDR_WIDTH] = {0xcc,0xcc,0xcc,0xcc,0xcc};
unsigned char flag = 0;
//------------------------NRF24L01寄存器配置------------------------
unsigned char NRF24L01_Config[7] =
{
#ifdef _RX_
MASK_TX_DS| MASK_MAX_RT|EN_CRC|CRC16,//CONFIG
#endif
#ifndef _RX_
EN_CRC|CRC16,//CONFIG
#endif
0,//EN_AA
ERX_ADDR_P0,//EN_RXADDR
AW_5,//SETUP_AW
0x1a,//SETUP_RETR
0,//RF_CH
RF_DR_2Mbps|RF_PWR_0|LAN_HCURR,//RF_SETUP
};
//---------------------------NRF24L01射频芯片初始化函数--------------------------------------
void NRF24L01_Init(void)
{
unsigned int i;
// unsigned char j;
//掉电模式
CE_OFF();
NRF24L01_WriteReg(CONFIG,~PWR_UP);
// delay_ms(1);
for(i=2100;i>0;i--);
// for(l=255;l>0;l--);
//默认配置
NRF24L01_WriteReg(EN_AA, NRF24L01_Config[1]);
NRF24L01_WriteReg(EN_RXADDR, NRF24L01_Config[2]);
NRF24L01_WriteReg(SETUP_AW, NRF24L01_Config[3]);
NRF24L01_WriteReg(SETUP_RETR, NRF24L01_Config[4]);
NRF24L01_WriteReg(RF_CH, NRF24L01_Config[5]);
NRF24L01_WriteReg(RF_SETUP, NRF24L01_Config[6]);
NRF24L01_WriteReg(CONFIG,NRF24L01_Config[0]);
NRF24L01_WriteReg(RX_PW_P0, NRF24L01_TxRxBuf_Len);
NRF24L01_Write_RxADDR();
NRF24L01_Write_TxADDR();
}
//---------------------------NRF24L01设置接收模式函数--------------------------------------
void NRF24L01_SetRxMode(void)
{
// unsigned char j;
CE_OFF();
NRF24L01_WriteReg(CONFIG, ((NRF24L01_ReadReg(CONFIG))&0xfc)|PWR_UP|PRIM_RX);
CE_ON();
delay_10us(13);
// for(j=135;j>0;j--);
}
//---------------------------NRF24L01数据包接收函数--------------------------------------
unsigned char NRF24L01_RxPacket(void)
{
unsigned char i,cur_status,rev;
// unsigned char status = 0;
// _DINT();
cur_status = NRF24L01_ReadReg(STATUS);
if(RX_DR&cur_status)
{
CSN_OFF();
// SPI_Write(RRP);
SPI_RW(RRP);
for(i=0; i<NRF24L01_TxRxBuf_Len; i++)
{
// NRF24L01_TxRxBuf = SPI_Read();
NRF24L01_TxRxBuf = SPI_RW(RR);
}
CSN_ON();
CSN_OFF();
// SPI_Write(FRX);
SPI_RW(FRX);
CSN_ON();
CE_OFF();
rev = TRUE;
}
else
{
rev = FALSE;
}
// status = NRF24L01_ReadReg(STATUS);
NRF24L01_WriteReg(STATUS,cur_status);
// _EINT();
return rev;
}
//---------------------------NRF24L01数据包发送函数--------------------------------------
void NRF24L01_TxPacket(void)
{
unsigned char i;
// _DINT();
CE_OFF();
CSN_OFF();
SPI_RW(FTX)
// SPI_Write(FTX);
CSN_ON();
CSN_OFF();
// SPI_Write(WRP);
SPI_RW(WRP);
for(i=0; i<NRF24L01_TxRxBuf_Len; i++)
{
// SPI_Write( NRF24L01_TxRxBuf);
SPI_RW( NRF24L01_TxRxBuf);
}
CSN_ON();
NRF24L01_WriteReg(CONFIG, ((NRF24L01_ReadReg(CONFIG))&0xfc)|PWR_UP);
CE_ON();
// _EINT();
}
//---------------------------NRF24L01寄存器写入函数--------------------------------------
void NRF24L01_WriteReg(unsigned char addr, unsigned char value)
{
CSN_OFF();
// SPI_Write(addr|WR);
// SPI_Write(value);
SPI_RW(addr|WR);
SPI_RW(value);
CSN_ON();
}
//---------------------------NRF24L01寄存器读取函数--------------------------------------
unsigned char NRF24L01_ReadReg(unsigned char addr)
{
unsigned char value;
CSN_OFF();
// SPI_Write(addr|RR);
// value = SPI_Read();
value = SPI_RW(addr|RR);
CSN_ON();
return value;
}
//---------------------------NRF24L01接收地址设置函数--------------------------------------
void NRF24L01_Write_RxADDR(void)
{
unsigned char i;
CSN_OFF();
// SPI_Write(RX_ADDR_P0|WR);
SPI_RW(RX_ADDR_P0|WR);
for(i=0; i<TXRX_ADDR_WIDTH; i++)
{
// SPI_Write(NRF24L01_RxAddr);
SPI_RW(NRF24L01_RxAddr);
}
CSN_ON();
}
//---------------------------NRF24L01发送地址设置函数--------------------------------------
void NRF24L01_Write_TxADDR(void)
{
unsigned char i;
CSN_OFF();
// SPI_Write(TX_ADDR|WR);
SPI_RW(TX_ADDR|WR);
for(i=0; i<TXRX_ADDR_WIDTH; i++)
{
// SPI_Write(NRF24L01_TxAddr);
SPI_RW(NRF24L01_TxAddr);
}
CSN_ON();
}
// *
// *
void SPI_Init(void)
{
CE_DDR_OUT();
CSN_DDR_OUT();
// P3DIR |= (BIT1+BIT3);
P3SEL |= 0x0E; // P3.3,2,1 option select
UCB0CTL0 |= UCMST+UCSYNC+UCCKPH+UCMSB; // 3-pin, 8-bit sync SPI master
// UCB0CTL0 |= UCMST+UCSYNC+UCMSB; // 3-pin, 8-bit sync SPI master
UCB0CTL1 |= UCSSEL_2; // SMCLK
UCB0BR0 = 0; // SMCLK
UCB0BR1 = 0;
UCB0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
P1IE |= 0x02; // P1.1 interrupt enabled
P1IES |= 0x02; // P1.1 Hi/Lo edge
P1IFG &= ~0x02; // P1.1 IFG cleared
CSN_ON();
// SCK_OFF();
}
unsigned char SPI_RW(unsigned char txdata)
{
// unsigned char rec;
while (!(IFG2 & UCB0TXIFG)); // USCI_B0 TX buffer ready?
UCB0TXBUF = txdata;
// rec = UCB0RXBUF;
while (!(IFG2 & UCB0RXIFG)); // USCI_B0 RX buffer ready?
return (UCB0RXBUF);
} |
|