#ifndef _NRF24L01_H_
#define _NRF24L01_H_

#include "stm32f10x.h"
#include "nrf24l01_reg.h"
#include "nrf_data.h"
#include "bsp.h"

//使用SPI2
#define NRF_SPI						SPI2
#define NRF_SPI_CLK					RCC_APB1Periph_SPI2

#define NRF_SPI_SCK_PIN				GPIO_Pin_13				//PB.13
#define NRF_SPI_SCK_GPIO_PORT		GPIOB					//GPIOB
#define NRF_SPI_SCK_GPIO_CLK		RCC_APB2Periph_GPIOB

#define NRF_SPI_MISO_PIN			GPIO_Pin_14				//PB.14
#define NRF_SPI_MISO_GPIO_PORT		GPIOB					//GPIOB
#define NRF_SPI_MISO_GPIO_CLK		RCC_APB2Periph_GPIOB

#define NRF_SPI_MOSI_PIN			GPIO_Pin_15             //PA.15
#define NRF_SPI_MOSI_GPIO_PORT		GPIOB					//GPIOA
#define NRF_SPI_MOSI_GPIO_CLK		RCC_APB2Periph_GPIOB

#define NRF_CSN_PIN					GPIO_Pin_11				//PA.11 
#define NRF_CSN_GPIO_PORT			GPIOA					//GPIOA
#define NRF_CSN_GPIO_CLK			RCC_APB2Periph_GPIOA

#define NRF_CE_PIN					GPIO_Pin_12				//PA.12 
#define NRF_CE_GPIO_PORT			GPIOA					//GPIOA
#define NRF_CE_GPIO_CLK				RCC_APB2Periph_GPIOA

#define NRF_IRQ_PIN					GPIO_Pin_8				//PA.8 
#define NRF_IRQ_EXTI_LINE			EXTI_Line8
#define NRF_IRQ_EXTI_PIN_SOURCE		GPIO_PinSource8
#define NRF_IRQ_GPIO_PORT			GPIOA					//GPIOA
#define NRF_IRQ_GPIO_CLK			RCC_APB2Periph_GPIOA
#define NRF_IRQ_EXTI_PORT_SOURCE	GPIO_PortSourceGPIOA
#define NRF_IRQ_EXTI_IRQn			EXTI9_5_IRQn

//24L01操作线
#define NRF_CE			PAout(12) //24L01片选信号
#define NRF_CSN			PAout(11) //SPI片选信号	   
#define NRF_IRQ			PAin(8)  //IRQ主机数据输入

#define MAX_RT			0x10  //达到最大发送次数中断
#define TX_DS			0x20  //TX发送完成中断
#define RX_DR			0x40  //接收到数据中断

#define RX_P_NO_MASK	0x0E
#define IRQ_ALL			(TX_DS|RX_DR|MAX_RT)
#define ACK				1
#define NO_ACK			0

//void NRF_GPIO_Init(void);
//void NRF_EXTIX_Init(void);
void SPI_SetSpeed(const u8 SPI_BaudRatePrescaler);
u8 SPI_ReadWriteByte(const u8 TxData);
u8 NRF_ReadReg(const u8 reg);//读寄存器
u8 NRF_WriteReg(const u8 reg,const  u8 value);//写寄存器
u8 NRF_ReadBuf(const u8 reg, u8 *pBuf,const  u8 len);//读数据区
u8 NRF_WriteBuf(const u8 reg,const u8 *pBuf,const  u8 len);//写数据区

void NRF_GPIO_Init(void);
void NRF_EXTIX_Init(void);
void NRF_PowerDown(void);
void NRF_Config(const u8 *addr,const u8 channel);//初始化
void NRF_RxMode(const u8 *addr,const u8 channel);//配置为接收模式
void NRF_WriteAckPayload(u8 pipe, u8 *pBuf, u8 len);
void NRF_SetChannel(const u8 channel);
void NRF_SetPipe1To4Mac(const u8 *addr);
void NRF_SetPipe5Mac(u8 *addr);
void NRF_DelayUs(u16 i);
void EXTI9_5Close(void);
u8 NRF_Check(void);
u8 NRF_CheckReg(void);
u8 NRF_SetRfPower(const u8 level);
u8 NRF_ReadChannel(void);
u8 NRF_SendPayload(const u8 ack,const u8 *addr,const u8 channel,const u8 *buf);//发送数据
u8 NRF_DisturbanceDetect(void);//检测当前频点的外部环境信号强度

#endif
