微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > nRF24L01 MSP430 发送接收驱动程序

nRF24L01 MSP430 发送接收驱动程序

时间:11-27 来源:互联网 点击:

WriteReadReg(W_REGISTER+EN_AA, 0x01);//频道0自动ACK应答允许

WriteReadReg(W_REGISTER+EN_RXADDR, 0x01);//允许接收地址只有频道0

WriteReadReg(W_REGISTER+RF_CH, 0x40);//设置信道工作为 GHZ,收发必须一致

WriteReadReg(W_REGISTER+RX_PW_P0, RX_PLOAD_WIDTH);//设置接收数据长度

WriteReadReg(W_REGISTER+RF_SETUP, 0x07);//设置发射速率为1MHZ,发射功率为最大值0dB

IntMasterEnable();//使能控制器中断

}

//Function:IRQ(PA0)中断处理函数,判断发送还是接收中断,接收则读出数据

void GPIO_Port_A_ISR(void)

{

unsigned char temp;//端口中断值

temp=GPIOPinIntStatus(GPIO_PORTA_BASE,true);//读取中断

GPIOPinIntClear(GPIO_PORTA_BASE,temp);//清除中断

flag=ReadReg(STATUS);//读取STATUS寄存器值

GPIOPinWrite(CE,0x00);//进入待机模式

if((flag<1)&0x80)//判断是否为接收中断

{

ReadBuf(R_RX_PAYLOAD,RXBuf,RX_PLOAD_WIDTH);//接收中断则从Buf中读出数据

success=2;

}

if((flag<2)&0x80)//判断是否为发送完成中断

success=1;

if((flag<3)&0x80)//判断是否为达到最多次重发中断

success=0;

WriteReadReg(W_REGISTER+STATUS,flag);//清除中断

}

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top