ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:19.27KB ,
资源ID:4928890      下载积分:2 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4928890.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(NRF24L01LINUX驱动程序SPI驱动MINI2440.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

NRF24L01LINUX驱动程序SPI驱动MINI2440.docx

1、NRF24L01LINUX驱动程序SPI驱动MINI2440包括LINUX下驱动程序和应用程序,MINI2440亲测可用#include #include #include #include #include #include #include #include #include #include unsigned char TxBuf32 = 0x00;int main(void) int fd = -1; int count = 1; /fd = open(/dev/nrf24l01, 0); fd = open(/dev/NRF24l01, O_RDWR); if(fd 0) perro

2、r(Cant open /dev/nrf24l01 n); exit(1); printf(open /dev/nrf24l01 success n); while(count = 5) write(fd, &TxBuf , sizeof(TxBuf); printf(Sending %d time n, count); usleep(100*1000); count+; close(fd);/#include /#include #include #include #include #include #include #include /#include /#include #include

3、 /#include /#include /typedef unsigned int uint16 ;typedef unsigned char uint8 ;/*/Port Config#define CE S3C2410_GPF3#define CE_OUTP S3C2410_GPF3_OUTP#define SCK S3C2410_GPF4#define SCK_OUTP S3C2410_GPF4_OUTP#define MISO S3C2410_GPG3#define MISO_INP S3C2410_GPG3_INP#define IRQ S3C2410_GPG0#define IR

4、Q_OUTP S3C2410_GPG0_OUTP#define MOSI S3C2410_GPG5#define MOSI_OUTP S3C2410_GPG5_OUTP#define CSN S3C2410_GPG6#define CSN_OUTP S3C2410_GPG6_OUTP*/Port Config/*#define CSN S3C2410_GPF3#define CSN_OUTP S3C2410_GPF3_OUTP#define MOSI S3C2410_GPF4#define MOSI_OUTP S3C2410_GPF4_OUTP#define IRQ S3C2410_GPG3#

5、define IRQ_INP S3C2410_GPG3_INP#define MISO S3C2410_GPG0#define MISO_INP S3C2410_GPG0_INP#define SCK S3C2410_GPG5#define SCK_OUTP S3C2410_GPG5_OUTP#define CE S3C2410_GPG6#define CE_OUTP S3C2410_GPG6_OUTP*/#define CSN S3C2410_GPF(3)#define CSN_OUTP S3C2410_GPIO_OUTPUT#define MOSI S3C2410_GPF(4)#defin

6、e MOSI_OUTP S3C2410_GPIO_OUTPUT#define IRQ S3C2410_GPG(3)#define IRQ_INP S3C2410_GPIO_OUTPUT#define MISO S3C2410_GPG(0)#define MISO_INP S3C2410_GPIO_INPUT#define SCK S3C2410_GPG(5)#define SCK_OUTP S3C2410_GPIO_OUTPUT#define CE S3C2410_GPG(6)#define CE_OUTP S3C2410_GPIO_OUTPUT#define DEVICE_NAME NRF2

7、4L01 /Device name锛宲ath:/proc/devices#define NRF24L01_MAJOR 241 /Device num#define TxBufSize 32uint8 TxBufTxBufSize= 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,;/NRF24L01 Port#define

8、 CE_OUT s3c2410_gpio_cfgpin(CE, CE_OUTP) #define CE_UP s3c2410_gpio_pullup(CE, 1) #define CE_L s3c2410_gpio_setpin(CE, 0) #define CE_H s3c2410_gpio_setpin(CE, 1) #define SCK_OUT s3c2410_gpio_cfgpin(SCK, SCK_OUTP) #define SCK_UP s3c2410_gpio_pullup(SCK, 1) #define SCK_L s3c2410_gpio_setpin(SCK, 0) #d

9、efine SCK_H s3c2410_gpio_setpin(SCK, 1) #define MISO_IN s3c2410_gpio_cfgpin(MISO, MISO_INP)#define MISO_UP s3c2410_gpio_pullup(MISO, 1) #define MISO_STU s3c2410_gpio_getpin(MISO) #define IRQ_IN s3c2410_gpio_cfgpin(IRQ, IRQ_INP) #define IRQ_UP s3c2410_gpio_pullup(IRQ, 1) #define IRQ_L s3c2410_gpio_se

10、tpin(IRQ, 0) #define IRQ_H s3c2410_gpio_setpin(IRQ, 1) #define MOSI_OUT s3c2410_gpio_cfgpin(MOSI, MOSI_OUTP) #define MOSI_UP s3c2410_gpio_pullup(MOSI, 1) #define MOSI_L s3c2410_gpio_setpin(MOSI, 0) #define MOSI_H s3c2410_gpio_setpin(MOSI, 1) #define CSN_OUT s3c2410_gpio_cfgpin(CSN, CSN_OUTP)#define

11、CSN_UP s3c2410_gpio_pullup(CSN, 1) #define CSN_L s3c2410_gpio_setpin(CSN, 0) #define CSN_H s3c2410_gpio_setpin(CSN, 1) /NRF24L01#define TX_ADR_WIDTH 5 / 5 uint8s TX address width#define RX_ADR_WIDTH 5 / 5 uint8s RX address width#define TX_PLOAD_WIDTH 32 / 20 uint8s TX payload#define RX_PLOAD_WIDTH 3

12、2 / 20 uint8s TX payloaduint8 const TX_ADDRESSTX_ADR_WIDTH= 0x34,0x43,0x10,0x10,0x01; /send addruint8 const RX_ADDRESSRX_ADR_WIDTH= 0x34,0x43,0x10,0x10,0x01; /recv addr/NRF24L01 Register#define READ_REG 0x00 / 璇诲瘎瀛樺櫒鎸囦护#define WRITE_REG 0x20 / 鍐欏瘎瀛樺櫒鎸囦护#define RD_RX_PLOAD 0x61 / 璇诲彇鎺敹鏁版嵁鎸囦护#define W

13、R_TX_PLOAD 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 / 鍙

14、敤淇亾璁剧疆#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

15、 / 棰戦亾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 /

16、鎺敹棰戦亾0鎺敹鏁版嵁闀垮害#define RX_PW_P3 0x14 / 鎺敹棰戦亾0鎺敹鏁版嵁闀垮害#define RX_PW_P4 0x15 / 鎺敹棰戦亾0鎺敹鏁版嵁闀垮害#define RX_PW_P5 0x16 / 鎺敹棰戦亾0鎺敹鏁版嵁闀垮害#define FIFO_STATUS 0x17 / FIFO鏍堝叆鏍堝嚭鐘舵佸瘎瀛樺櫒璁剧疆 uint8 init_NRF24L01(void);uint8 SPI_RW(uint8 tmp);uint8 SPI_Read(uint8 reg);void SetRX_Mode(void);uint8 SPI_RW_Reg(uint8 reg

17、, uint8 value);uint8 SPI_Read_Buf(uint8 reg, uint8 *pBuf, uint8 uchars);uint8 SPI_Write_Buf(uint8 reg,const uint8 *pBuf, uint8 uchars);unsigned char nRF24L01_RxPacket(unsigned char* rx_buf);void nRF24L01_TxPacket(unsigned char * tx_buf);/鍏眬鍙橀噺uint8 opencount = 0;/uint8 sta; /Status Symbol#define RX_

18、DR 6#define TX_DS 5#define MAX_RT 4 uint8 init_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; / chip enable ndelay(60); CSN_H; / Spi disable ndelay(60); SCK_L; / Spi clock line init high ndelay(60)

19、; SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); /write send addr SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); /write recv addr SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); / 棰戦亾0鑷 姩 ACK搴旂瓟鍏佽 SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); / 鍏佽 鎺敹鍦板潃鍙 湁棰戦亾0锛屽 鏋滈渶瑕佸 棰戦亾鍙 互鍙傝働age21

20、 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_

21、TxPacket(TxBuf); SPI_RW_Reg(WRITE_REG+STATUS,0XFF); printk(test 1 n); mdelay(1000);/* nRF24L01_TxPacket(TxBuf); SPI_RW_Reg(WRITE_REG+STATUS,0XFF); printk(test 2 n); mdelay(1000); nRF24L01_TxPacket(TxBuf); SPI_RW_Reg(WRITE_REG+STATUS,0XFF); printk(test 3 n); mdelay(1000); nRF24L01_TxPacket(TxBuf); SP

22、I_RW_Reg(WRITE_REG+STATUS,0XFF); printk(test 4 n); mdelay(1000);*/ return (1);/鍑芥暟锛歶int8 SPI_RW(uint8 tmp)/鍔熻兘锛歂RF24L01鐨凷PI鍐欐椂搴弔mpuint8 SPI_RW(uint8 tmp) uint8 bit_ctr; for(bit_ctr=0 ;bit_ctr8 ;bit_ctr+) / output 8-bit if(tmp & 0x80) / output tmp, MSB to MOSI MOSI_H; else MOSI_L; tmp = 1; / shift ne

23、xt bit into MSB. SCK_H; / Set SCK high. ndelay(60); tmp |= MISO_STU; / capture current MISO bit SCK_L; / .then set SCK low again ndelay(60); return(tmp); / return read tmp /鍑芥暟锛歶int8 SPI_Read(uint8 reg)/鍔熻兘锛歂RF24L01鐨凷PI鏃跺簭uint8 SPI_Read(uint8 reg) uint8 reg_val; CSN_L; / CSN low, initialize SPI comm

24、unication. ndelay(60); SPI_RW(reg); / Select register to read from. reg_val = SPI_RW(0); / .then read registervalue CSN_H; / CSN high, terminate SPI communication ndelay(60); return(reg_val); / return register value /鍔熻兘锛歂RF24L01璇诲啓瀵勫瓨鍣嚱鏁?uint8 SPI_RW_Reg(uint8 reg, uint8 value) uint8 status; CSN_L;

25、 / CSN low, init SPI transaction ndelay(60); status = SPI_RW(reg); / select register SPI_RW(value); / .and write value to it. CSN_H; / CSN high again ndelay(60); return(status); / return nRF24L01 status uint8 /鍑芥暟锛歶int8 SPI_Read_Buf(uint8 reg, uint8 *pBuf, uint8 uchars)/鍔熻兘: 鐢簬璇绘暟鎹 紝reg锛氫负瀵勫瓨鍣湴鍧锛宲Bu

26、f锛氫负寰呰 鍑烘暟鎹 湴鍧锛寀chars锛氳 鍑烘暟鎹 殑涓 暟uint8 SPI_Read_Buf(uint8 reg, uint8 *pBuf, uint8 uchars) uint8 status,uint8_ctr; CSN_L; / Set CSN low, init SPI tranaction ndelay(60); status = SPI_RW(reg); / Select register to write to and read status uint8 for(uint8_ctr=0;uint8_ctruchars;uint8_ctr+) pBufuint8_ctr

27、= SPI_RW(0); / ndelay(20); CSN_H; ndelay(60); return(status); / return nRF24L01 status uint8/鍑芥暟锛歶int8 SPI_Write_Buf(uint8 reg, uint8 *pBuf, uint8 uchars)/鍔熻兘: 鐢簬鍐欐暟鎹 細涓哄瘎瀛樺櫒鍦板潃锛宲Buf锛氫负寰呭啓鍏暟鎹 湴鍧锛寀chars锛氬啓鍏暟鎹 殑涓 暟uint8 SPI_Write_Buf(uint8 reg,const uint8 *pBuf, uint8 uchars) uint8 status,uint8_ctr; C

28、SN_L; /SPI浣胯兘 ndelay(60); status = SPI_RW(reg); for(uint8_ctr=0; uint8_ctruchars; uint8_ctr+) / SPI_RW(*pBuf+); ndelay(20); CSN_H; /鍏抽棴SPI ndelay(60); return(status); / /鍑芥暟锛歷oid SetRX_Mode(void)/鍔熻兘锛氭暟鎹 帴鏀堕厤缃?void SetRX_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