nrf24l01linux下的驱动程序

最近太多的网友发邮件给我要nrf24l01的驱动程序 现在贴出来供需要的人参考

/*******************************************************************************
* 此驱动程序是linux下nrf24l01的设备驱动程序,驱动程序由两部分组成:
* 1、nrf24l01.c
* 2、nrf24l01.h ,linux版本是2.6.24,ARM平台为博创“三剑客”up—Star2410
* Author:dengtao_deng
* Email:linuxembe@126.com
* QQ:990027753 Embed
* nrf24l01.c
*******************************************************************************/
#include <linux/irq.h>
#include <linux/miscdevice.h>
#include <linux/delay.h>
#include <linux/interrupt.h>
#include <linux/major.h>
#include <asm/irq.h>
#include <linux/interrupt.h>
#include <linux/kernel.h>//printk()
#include <linux/module.h>
#include <linux/init.h>
#include <linux/mm.h>
#include <linux/fs.h>
#include <linux/types.h>//u8,u16,u3……
#include <linux/delay.h>
#include <linux/moduleparam.h>
#include <linux/slab.h>
#include <linux/sched.h>//和任务相关
#include <linux/errno.h>
#include <linux/ioctl.h>
#include <linux/cdev.h>
#include <linux/string.h>
#include <linux/list.h>
#include <linux/pci.h>
#include <asm/uaccess.h>//copy_to_user(),copy_from_user()
#include <asm/atomic.h>
#include <asm/unistd.h>
#include <linux/spinlock.h>
#include <asm/system.h>
#include <asm/io.h> //readx(), writex()
#include <linux/ioport.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/init.h>
#include <linux/miscdevice.h>
#include <linux/delay.h>
#include <asm/irq.h>
#include <asm/arch/regs-gpio.h>
#include <asm/hardware.h>
#include "nrf24l01.h"

#define RX_DR SPI_Read(STATUS)&1

uchar TX_ADDRESS[]={0x34,0x43,0x10,0x10,0x01};//这个应该是要发送到的地址,不确定
uchar RX_ADDRESS[]={0x34,0x43,0x10,0x10,0x01};//接收地址

/********************************************************************************************************/
#define NRF_NAME "S3C2440_NRF"  //设备驱动名称
static int NRF_MAJOR = 258;     //主设备号
struct nrf_dev
{
 struct cdev cdev;
 char dataTx[TX_PLOAD_WIDTH];
 char dataRx[RX_PLOAD_WIDTH];
};
struct nrf_dev *nrf_devp;
/********************************************************************************************************/

//底层驱动函数
ulong status_32; //暂存状态32位

//初始化各种IO口的输入、输出设置
void GPIO_CONFIG_PINS(void){
 s3c2410_gpio_cfgpin(S3C2410_GPB0,S3C2410_GPIO_OUTPUT); //CSN --TOUT0
 s3c2410_gpio_cfgpin(S3C2410_GPB1,S3C2410_GPIO_OUTPUT); //MOSI--TOUT1
 s3c2410_gpio_cfgpin(S3C2410_GPB4,S3C2410_GPIO_OUTPUT); //SCK---TCLK0
 s3c2410_gpio_cfgpin(S3C2410_GPG11,S3C2410_GPIO_OUTPUT);//CE----TCLK1
 s3c2410_gpio_cfgpin(S3C2410_GPH9,S3C2410_GPIO_INPUT);  //IRQ---CLKOUT0
 s3c2410_gpio_cfgpin(S3C2410_GPE7,S3C2410_GPIO_INPUT);  //MISO--SDDATA0
}
//延时函数
void delay(int n)
{
 int m,k;
 for(m=0;m<10;m++)
  for(k=0;k<n;k++){}
}
// 写一个字节到24L01,同时读出一个字节
uchar SPI_RW(uchar byte)
{
 uchar bit_ctr;
 for(bit_ctr=0;bit_ctr<8;bit_ctr++) // output 8-bit
 {
  if(byte & 0x80)
   s3c2410_gpio_setpin(S3C2410_GPB1,1); //MOSI
  else
   s3c2410_gpio_setpin(S3C2410_GPB1,0); //MOSI
  byte = (byte << 1); // shift next bit into MSB..
  s3c2410_gpio_setpin(S3C2410_GPB4,1);//SCK
  if(s3c2410_gpio_getpin(S3C2410_GPE7))
  {  //MISO
   byte |= 1<<0;
  }else
  {
   byte |= 0<<0;
  }
  s3c2410_gpio_setpin(S3C2410_GPB4,0); //SCK
 }
 return(byte); // return read byte
}

/******************************************************************************
* 读取寄存器值的函数:基本思路就是通过READ_REG 命令(也就是0x00+寄存器地址),把
* 寄存器中的值

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值