NRF24L01LINUX驱动程序SPI驱动MINI2440.docx

上传人:b****4 文档编号:4928890 上传时间:2022-12-11 格式:DOCX 页数:16 大小:19.27KB
下载 相关 举报
NRF24L01LINUX驱动程序SPI驱动MINI2440.docx_第1页
第1页 / 共16页
NRF24L01LINUX驱动程序SPI驱动MINI2440.docx_第2页
第2页 / 共16页
NRF24L01LINUX驱动程序SPI驱动MINI2440.docx_第3页
第3页 / 共16页
NRF24L01LINUX驱动程序SPI驱动MINI2440.docx_第4页
第4页 / 共16页
NRF24L01LINUX驱动程序SPI驱动MINI2440.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

NRF24L01LINUX驱动程序SPI驱动MINI2440.docx

《NRF24L01LINUX驱动程序SPI驱动MINI2440.docx》由会员分享,可在线阅读,更多相关《NRF24L01LINUX驱动程序SPI驱动MINI2440.docx(16页珍藏版)》请在冰豆网上搜索。

NRF24L01LINUX驱动程序SPI驱动MINI2440.docx

NRF24L01LINUX驱动程序SPI驱动MINI2440

包括LINUX下驱动程序和应用程序,MINI2440亲测可用

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

unsignedcharTxBuf[32]={0x00};

intmain(void)

{

intfd=-1;

intcount=1;

//fd=open("/dev/nrf24l01",0);

fd=open("/dev/NRF24l01",O_RDWR);

if(fd<0)

{

perror("Can'topen/dev/nrf24l01\n");

exit

(1);

}

printf("open/dev/nrf24l01success\n");

while(count<=5)

{

write(fd,&TxBuf,sizeof(TxBuf));

printf("Sending%dtime\n",count);

usleep(100*1000);

count++;

}

close(fd);

}

//#include//////////////////////////////////////////////

#include

#include

#include

#include

#include

#include

#include

//#include////////////////////////////////////////

#include

#include////////////////////////////////////////////////////

//#include//////////////////////////////////////////////

#include//////////////////////////////////////////////

typedefunsignedintuint16;

typedefunsignedcharuint8;

/*

//PortConfig

#defineCES3C2410_GPF3

#defineCE_OUTPS3C2410_GPF3_OUTP

#defineSCKS3C2410_GPF4

#defineSCK_OUTPS3C2410_GPF4_OUTP

#defineMISOS3C2410_GPG3

#defineMISO_INPS3C2410_GPG3_INP

#defineIRQS3C2410_GPG0

#defineIRQ_OUTPS3C2410_GPG0_OUTP

#defineMOSIS3C2410_GPG5

#defineMOSI_OUTPS3C2410_GPG5_OUTP

#defineCSNS3C2410_GPG6

#defineCSN_OUTPS3C2410_GPG6_OUTP

*/

//PortConfig

//

/*

#defineCSNS3C2410_GPF3

#defineCSN_OUTPS3C2410_GPF3_OUTP

#defineMOSIS3C2410_GPF4

#defineMOSI_OUTPS3C2410_GPF4_OUTP

#defineIRQS3C2410_GPG3

#defineIRQ_INPS3C2410_GPG3_INP

#defineMISOS3C2410_GPG0

#defineMISO_INPS3C2410_GPG0_INP

#defineSCKS3C2410_GPG5

#defineSCK_OUTPS3C2410_GPG5_OUTP

#defineCES3C2410_GPG6

#defineCE_OUTPS3C2410_GPG6_OUTP

*/

#defineCSNS3C2410_GPF(3)

#defineCSN_OUTPS3C2410_GPIO_OUTPUT

#defineMOSIS3C2410_GPF(4)

#defineMOSI_OUTPS3C2410_GPIO_OUTPUT

#defineIRQS3C2410_GPG(3)

#defineIRQ_INPS3C2410_GPIO_OUTPUT

#defineMISOS3C2410_GPG(0)

#defineMISO_INPS3C2410_GPIO_INPUT

#defineSCKS3C2410_GPG(5)

#defineSCK_OUTPS3C2410_GPIO_OUTPUT

#defineCES3C2410_GPG(6)

#defineCE_OUTPS3C2410_GPIO_OUTPUT

#defineDEVICE_NAME"NRF24L01"//Devicename锛宲ath:

/proc/devices

#defineNRF24L01_MAJOR241//Devicenum

#defineTxBufSize32

uint8TxBuf[TxBufSize]={

0x01,0x02,0x03,0x4,0x05,0x06,0x07,0x08,

0x09,0x10,0x11,0x12,0x13,0x14,0x15,0x16,

0x17,0x18,0x19,0x20,0x21,0x22,0x23,0x24,

0x25,0x26,0x27,0x28,0x29,0x30,0x31,0x32,

};

//NRF24L01Port

#defineCE_OUTs3c2410_gpio_cfgpin(CE,CE_OUTP)

#defineCE_UPs3c2410_gpio_pullup(CE,1)

#defineCE_Ls3c2410_gpio_setpin(CE,0)

#defineCE_Hs3c2410_gpio_setpin(CE,1)

#defineSCK_OUTs3c2410_gpio_cfgpin(SCK,SCK_OUTP)

#defineSCK_UPs3c2410_gpio_pullup(SCK,1)

#defineSCK_Ls3c2410_gpio_setpin(SCK,0)

#defineSCK_Hs3c2410_gpio_setpin(SCK,1)

#defineMISO_INs3c2410_gpio_cfgpin(MISO,MISO_INP)

#defineMISO_UPs3c2410_gpio_pullup(MISO,1)

#defineMISO_STUs3c2410_gpio_getpin(MISO)

#defineIRQ_INs3c2410_gpio_cfgpin(IRQ,IRQ_INP)

#defineIRQ_UPs3c2410_gpio_pullup(IRQ,1)

#defineIRQ_Ls3c2410_gpio_setpin(IRQ,0)

#defineIRQ_Hs3c2410_gpio_setpin(IRQ,1)

#defineMOSI_OUTs3c2410_gpio_cfgpin(MOSI,MOSI_OUTP)

#defineMOSI_UPs3c2410_gpio_pullup(MOSI,1)

#defineMOSI_Ls3c2410_gpio_setpin(MOSI,0)

#defineMOSI_Hs3c2410_gpio_setpin(MOSI,1)

#defineCSN_OUTs3c2410_gpio_cfgpin(CSN,CSN_OUTP)

#defineCSN_UPs3c2410_gpio_pullup(CSN,1)

#defineCSN_Ls3c2410_gpio_setpin(CSN,0)

#defineCSN_Hs3c2410_gpio_setpin(CSN,1)

//NRF24L01

#defineTX_ADR_WIDTH5//5uint8sTXaddresswidth

#defineRX_ADR_WIDTH5//5uint8sRXaddresswidth

#defineTX_PLOAD_WIDTH32//20uint8sTXpayload

#defineRX_PLOAD_WIDTH32//20uint8sTXpayload

uint8constTX_ADDRESS[TX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01};//sendaddr

uint8constRX_ADDRESS[RX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01};//recvaddr

//NRF24L01Register

#defineREAD_REG0x00//璇诲瘎瀛樺櫒鎸囦护

#defineWRITE_REG0x20//鍐欏瘎瀛樺櫒鎸囦护

#defineRD_RX_PLOAD0x61//璇诲彇鎺ユ敹鏁版嵁鎸囦护

#defineWR_TX_PLOAD0xA0//鍐欏緟鍙戞暟鎹寚浠?

#defineFLUSH_TX0xE1//鍐叉礂鍙戦€?

FIFO鎸囦护

#defineFLUSH_RX0xE2//鍐叉礂鎺ユ敹FIFO鎸囦护

#defineREUSE_TX_PL0xE3//瀹氫箟閲嶅瑁呰浇鏁版嵁鎸囦护

#defineNOP0xFF//淇濈暀

//SPI(nRF24L01)瀵勫瓨鍣ㄥ湴鍧€

#defineCONFIG0x00//閰嶇疆鏀跺彂鐘舵€侊紝CRC鏍¢獙妯″紡浠ュ強鏀跺彂鐘舵€佸搷搴旀柟寮?

#defineEN_AA0x01//鑷姩搴旂瓟鍔熻兘璁剧疆

#defineEN_RXADDR0x02//鍙敤淇¢亾璁剧疆

#defineSETUP_AW0x03//鏀跺彂鍦板潃瀹藉害璁剧疆

#defineSETUP_RETR0x04//鑷姩閲嶅彂鍔熻兘璁剧疆

#defineRF_CH0x05//宸ヤ綔棰戠巼璁剧疆

#defineRF_SETUP0x06//鍙戝皠閫熺巼銆佸姛鑰楀姛鑳借缃?

#defineSTATUS0x07//鐘舵€佸瘎瀛樺櫒

#defineOBSERVE_TX0x08//鍙戦€佺洃娴嬪姛鑳?

#defineCD0x09//鍦板潃妫€娴?

#defineRX_ADDR_P00x0A//棰戦亾0鎺ユ敹鏁版嵁鍦板潃

#defineRX_ADDR_P10x0B//棰戦亾1鎺ユ敹鏁版嵁鍦板潃

#defineRX_ADDR_P20x0C//棰戦亾2鎺ユ敹鏁版嵁鍦板潃

#defineRX_ADDR_P30x0D//棰戦亾3鎺ユ敹鏁版嵁鍦板潃

#defineRX_ADDR_P40x0E//棰戦亾4鎺ユ敹鏁版嵁鍦板潃

#defineRX_ADDR_P50x0F//棰戦亾5鎺ユ敹鏁版嵁鍦板潃

#defineTX_ADDR0x10//鍙戦€佸湴鍧€瀵勫瓨鍣?

#defineRX_PW_P00x11//鎺ユ敹棰戦亾0鎺ユ敹鏁版嵁闀垮害

#defineRX_PW_P10x12//鎺ユ敹棰戦亾0鎺ユ敹鏁版嵁闀垮害

#defineRX_PW_P20x13//鎺ユ敹棰戦亾0鎺ユ敹鏁版嵁闀垮害

#defineRX_PW_P30x14//鎺ユ敹棰戦亾0鎺ユ敹鏁版嵁闀垮害

#defineRX_PW_P40x15//鎺ユ敹棰戦亾0鎺ユ敹鏁版嵁闀垮害

#defineRX_PW_P50x16//鎺ユ敹棰戦亾0鎺ユ敹鏁版嵁闀垮害

#defineFIFO_STATUS0x17//FIFO鏍堝叆鏍堝嚭鐘舵€佸瘎瀛樺櫒璁剧疆

uint8init_NRF24L01(void);

uint8SPI_RW(uint8tmp);

uint8SPI_Read(uint8reg);

voidSetRX_Mode(void);

uint8SPI_RW_Reg(uint8reg,uint8value);

uint8SPI_Read_Buf(uint8reg,uint8*pBuf,uint8uchars);

uint8SPI_Write_Buf(uint8reg,constuint8*pBuf,uint8uchars);

unsignedcharnRF24L01_RxPacket(unsignedchar*rx_buf);

voidnRF24L01_TxPacket(unsignedchar*tx_buf);

//鍏ㄥ眬鍙橀噺

uint8opencount=0;

//

uint8sta;//StatusSymbol

#defineRX_DR6

#defineTX_DS5

#defineMAX_RT4

uint8init_NRF24L01(void)

{

/*

CE_UP;

SCK_UP;

MISO_UP;

IRQ_UP;

MOSI_UP;

CSN_UP;

*/

MISO_UP;

CE_OUT;

CSN_OUT;

SCK_OUT;

MOSI_OUT;

MISO_IN;

IRQ_IN;

udelay(500);

CE_L;//chipenable

ndelay(60);

CSN_H;//Spidisable

ndelay(60);

SCK_L;//Spiclocklineinithigh

ndelay(60);

SPI_Write_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);//writesendaddr

SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,RX_ADDRESS,RX_ADR_WIDTH);//writerecvaddr

SPI_RW_Reg(WRITE_REG+EN_AA,0x01);//棰戦亾0鑷姩ACK搴旂瓟鍏佽

SPI_RW_Reg(WRITE_REG+EN_RXADDR,0x01);//鍏佽鎺ユ敹鍦板潃鍙湁棰戦亾0锛屽鏋滈渶瑕佸棰戦亾鍙互鍙傝€働age21

SPI_RW_Reg(WRITE_REG+RF_CH,0);//璁剧疆淇¢亾宸ヤ綔涓?

.4GHZ锛屾敹鍙戝繀椤讳竴鑷?

SPI_RW_Reg(WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);//璁剧疆鎺ユ敹鏁版嵁闀垮害锛屾湰娆¤缃负32瀛楄妭

SPI_RW_Reg(WRITE_REG+RF_SETUP,0x07);//璁剧疆鍙戝皠閫熺巼涓?

MHZ锛屽彂灏勫姛鐜囦负鏈€澶у€?

dB

SPI_RW_Reg(WRITE_REG+CONFIG,0x0f);//IRQ鏀跺彂瀹屾垚涓柇鍝嶅簲锛?

6浣岰RC锛屼富鎺ユ敹

mdelay(1000);

nRF24L01_TxPacket(TxBuf);

SPI_RW_Reg(WRITE_REG+STATUS,0XFF);

printk("test1\n");

mdelay(1000);

/*

nRF24L01_TxPacket(TxBuf);

SPI_RW_Reg(WRITE_REG+STATUS,0XFF);

printk("test2\n");

mdelay(1000);

nRF24L01_TxPacket(TxBuf);

SPI_RW_Reg(WRITE_REG+STATUS,0XFF);

printk("test3\n");

mdelay(1000);

nRF24L01_TxPacket(TxBuf);

SPI_RW_Reg(WRITE_REG+STATUS,0XFF);

printk("test4\n");

mdelay(1000);

*/

return

(1);

}

//鍑芥暟锛歶int8SPI_RW(uint8tmp)

//鍔熻兘锛歂RF24L01鐨凷PI鍐欐椂搴弔mp

uint8SPI_RW(uint8tmp)

{

uint8bit_ctr;

for(bit_ctr=0;bit_ctr<8;bit_ctr++)//output8-bit

{

if(tmp&0x80)//output'tmp',MSBtoMOSI

MOSI_H;

else

MOSI_L;

tmp<<=1;//shiftnextbitintoMSB..

SCK_H;//SetSCKhigh..

ndelay(60);

tmp|=MISO_STU;//capturecurrentMISObit

SCK_L;//..thensetSCKlowagain

ndelay(60);

}

return(tmp);//returnreadtmp

}

//鍑芥暟锛歶int8SPI_Read(uint8reg)

//鍔熻兘锛歂RF24L01鐨凷PI鏃跺簭

uint8SPI_Read(uint8reg)

{

uint8reg_val;

CSN_L;//CSNlow,initializeSPIcommunication...

ndelay(60);

SPI_RW(reg);//Selectregistertoreadfrom..

reg_val=SPI_RW(0);//..thenreadregistervalue

CSN_H;//CSNhigh,terminateSPIcommunication

ndelay(60);

return(reg_val);//returnregistervalue

}

//鍔熻兘锛歂RF24L01璇诲啓瀵勫瓨鍣ㄥ嚱鏁?

uint8SPI_RW_Reg(uint8reg,uint8value)

{

uint8status;

CSN_L;//CSNlow,initSPItransaction

ndelay(60);

status=SPI_RW(reg);//selectregister

SPI_RW(value);//..andwritevaluetoit..

CSN_H;//CSNhighagain

ndelay(60);

return(status);//returnnRF24L01statusuint8

}

//鍑芥暟锛歶int8SPI_Read_Buf(uint8reg,uint8*pBuf,uint8uchars)

//鍔熻兘:

鐢ㄤ簬璇绘暟鎹紝reg锛氫负瀵勫瓨鍣ㄥ湴鍧€锛宲Buf锛氫负寰呰鍑烘暟鎹湴鍧€锛寀chars锛氳鍑烘暟鎹殑涓暟

uint8SPI_Read_Buf(uint8reg,uint8*pBuf,uint8uchars)

{

uint8status,uint8_ctr;

CSN_L;//SetCSNlow,initSPItranaction

ndelay(60);

status=SPI_RW(reg);//Selectregistertowritetoandreadstatusuint8

for(uint8_ctr=0;uint8_ctr

{

pBuf[uint8_ctr]=SPI_RW(0);//

ndelay(20);

}

CSN_H;

ndelay(60);

return(status);//returnnRF24L01statusuint8

}

//鍑芥暟锛歶int8SPI_Write_Buf(uint8reg,uint8*pBuf,uint8uchars)

//鍔熻兘:

鐢ㄤ簬鍐欐暟鎹細涓哄瘎瀛樺櫒鍦板潃锛宲Buf锛氫负寰呭啓鍏ユ暟鎹湴鍧€锛寀chars锛氬啓鍏ユ暟鎹殑涓暟

uint8SPI_Write_Buf(uint8reg,constuint8*pBuf,uint8uchars)

{

uint8status,uint8_ctr;

CSN_L;//SPI浣胯兘

ndelay(60);

status=SPI_RW(reg);

for(uint8_ctr=0;uint8_ctr

{

SPI_RW(*pBuf++);

ndelay(20);

}

CSN_H;//鍏抽棴SPI

ndelay(60);

return(status);//

}

//鍑芥暟锛歷oidSetRX_Mode(void)

//鍔熻兘锛氭暟鎹帴鏀堕厤缃?

voidSetRX_Mode(void)

{

CE_L;

ndelay(60);

//SPI_RW_Reg(WRITE_REG+CONFIG,0x0f);//IRQ鏀跺彂瀹屾垚涓柇鍝嶅簲锛?

6浣岰RC锛屼富鎺ユ敹

//udelay

(1);

CE_H;

udelay(130);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1