久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > nRF24L01 MSP430 發送接收驅動程序

nRF24L01 MSP430 發送接收驅動程序

作者: 時間:2016-11-27 來源:網絡 收藏

//Function:Nrf寄存器初始化
void NrfInit(void)
{
GPIOPinWrite(CE,0x00);//芯片使能關閉
GPIOPinWrite(CSN,0xFF);//片選關閉
GPIOPinWrite(SCK,0x00);//SPI時鐘為低
WriteBuf(W_REGISTER+TX_ADDR, TX_ADDRESS, TX_ADDR_WIDTH);//寫本地地址
WriteBuf(W_REGISTER+RX_ADDR_P0, RX_ADDRESS, RX_ADDR_WIDTH);//寫接收端地址
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 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

上一頁 1 2 下一頁

評論


技術專區

關閉