nRF24L01 MSP430 发送接收驱动程序
//Function:Nrf寄存器初始化
void NrfInit(void)
{
}
//Function:IRQ(PA0)中断处理函数,判断发送还是接收中断,接收则读出数据
void GPIO_Port_A_ISR(void)
{
}
nrf24l01.h
[cpp] view plaincopy
#ifndef _NRF24L01_H_
#define _NRF24L01_H_
#include
#include
#include
#include
#include
#include
#include
#include
//**********管脚定义************************************************************
#define CE
GPIO_PORTA_BASE,GPIO_PIN_5
//芯片使能
#define CSN
GPIO_PORTA_BASE,GPIO_PIN_4
//SPI片选,低电平使能
#define SCK
GPIO_PORTA_BASE,GPIO_PIN_3
//SPI时钟
#define MOSI GPIO_PORTA_BASE,GPIO_PIN_2
//SPI主器件输出,从器件输入
#define MISO GPIO_PORTA_BASE,GPIO_PIN_1
//SPI主器件输入,从器件输出
#define IRQ
GPIO_PORTA_BASE,GPIO_PIN_0
//中断输出
//**********NRF24L01寄存器指令**************************************************
#define R_REGISTER
0x00
// 读寄存器指令
#define W_REGISTER
0x20
// 写寄存器指令
#define R_RX_PAYLOAD
0x61
// 读取接收数据指令
#define W_TX_PAYLOAD
0xA0
// 写待发数据指令
#define FLUSH_TX
0xE1
// 冲洗发送 FIFO指令
#define FLUSH_RX
0xE2
// 冲洗接收 FIFO指令
#define REUSE_TX_PL
0xE3
// 定义重复装载数据指令
#define NOP
0xFF
// 保留
//**********SPI(nRF24L01)寄存器地址*********************************************
#define CONFIG
0x00
// 配置收发状态,CRC校验模式以及收发状态响应方式
#define EN_AA
0x01
// 自动应答功能设置
#define EN_RXADDR
0x02
// 可用信道设置
#define SETUP_AW
0x03
// 收发地址宽度设置
#define SETUP_RETR
0x04
// 自动重发功能设置
#define RF_CH
0x05
// 工作频率设置
#define RF_SETUP
0x06
// 发射速率、功耗功能设置
#define STATUS
0x07
// 状态寄存器
#define OBSERVE_TX
0x08
// 发送监测功能
#define CD
0x09
// 地址检测
#define RX_ADDR_P0
0x0A
// 频道0接收数据地址
#define RX_ADDR_P1
0x0B
// 频道1接收数据地址
#define RX_ADDR_P2
0x0C
// 频道2接收数据地址
#define RX_ADDR_P3
0x0D
// 频道3接收数据地址
#define RX_ADDR_P4
0x0E
// 频道4接收数据地址
#define RX_ADDR_P5
0x0F
// 频道5接收数据地址
#define TX_ADDR
0x10
// 发送地址寄存器
#define RX_PW_P0
0x11
// 接收频道0接收数据长度
#define RX_PW_P1
0x12
// 接收频道0接收数据长度
#define RX_PW_P2
0x13
// 接收频道0接收数据长度
#define RX_PW_P3
0x14
// 接收频道0接收数据长度
#define RX_PW_P4
0x15
// 接收频道0接收数据长度
#define RX_PW_P5
0x16
// 接收频道0接收数据长度
#define FIFO_STATUS
0x17
// FIFO栈入栈出状态寄存器设置
#define TX_ADDR_WIDTH
5
//(发送)接收节点地址宽度(3-5字节)
#define RX_ADDR_WIDTH
5
//接收地址宽度(3-5字节)
#define TX_PLOAD_WIDTH
9
//发送数据有效宽度(1-32字节)
#define RX_PLOAD_WIDTH
9
//接收数据有效宽度(1-32字节)
extern unsigned char TX_ADDRESS[TX_ADDR_WIDTH]; //接收节点地址(0通道40位可任意配置)
extern unsigned char RX_ADDRESS[RX_ADDR_WIDTH]; //接收地址(与接收地址相同)
extern unsigned char flag;//状态寄存器(STATUS)标志
extern unsigned char success;//发送接收成功与否标志,0为失败,1为发送成功,2为接收成功
extern unsigned char TXBuf[];
extern unsigned char RXBuf[];
void Delayms(unsigned int t);//Function:延时t*ms
void Delayus(unsigned int t);//Function:延时t*us
void SystemInit(void);//Function:系统初始化
void NrfInitPort(void);//Function:管脚配置初始化
unsigned char SPIWriteRead(unsigned char c);//Function:SPI写入一字节,同时读出一字节
unsigned char ReadReg(unsigned char reg);//Function:从寄存器中读取状态字节
unsigned char WriteReadReg(unsigned char reg,unsigned char value);//Function:向寄存器写入一字节,同时返回状态字节
unsigned char ReadBuf(unsigned char reg,unsigned char *pBuf,unsigned char num);//Function:从寄存器读出num字节的数据(pBuf),同时返回状态字节
unsigned char WriteBuf(unsigned char reg,unsigned char*pBuf,unsigned char num);//Function:向寄存器写入num字节的数据(pBuf),同时返回状态字节
void RXReady(void);//Function:接收启动函数
void TXReady(unsigned char *txBuf);//Function:发送启动函数
void NrfInit(void);//Function:Nrf寄存器初始化
void GPIO_Port_A_ISR(void);//Function:IRQ(PA0)中断处理函数,判断发送还是接收中断,接收则读出数据
#endif
评论