




免费预览已结束,剩余11页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
nRF2401驱动程序(MSP430)(上)最近在用nRF2401,本来也想偷个懒,上网上下一个程序随便改改了事,但找了好长时间发现几乎都是一个版本,而且并不是那么好用。一个好的驱动程序应该是很好移植的,这就要求在驱动程序中尽量少用全局的变量,把与体系相关的部分放在头文件中,当跨平台移植时,只需改改头文件即可,同时也要把相关的参数配置通过宏定义的形式列出来,用户只需简单的修改宏定义就可以满足自己的要求。本驱动程序希望能达到这个目的,由于水平有限,程序中的不足在所难免,希望大家指正。/* 文件名:nrf2401.h* 功 能:nRF2401驱动程序头文件*/#ifndef NRF2401_H#define NRF2401_H#include /* 接口说明:* CS:P4.6, CE:P5.2, PWR_UP:P5.3, DR1:P4.5, CLK1:P4.4* DATA:P4.3, DR2:P5.1, CLK2:P5.0, DOUT2:P4.7*/#define CS BIT6#define CE BIT2#define PWR_UP BIT3#define DR1 BIT5#define CLK1 BIT4#define DATA BIT3#define DR2 BIT1#define CLK2 BIT0#define DOUT2 BIT7#define CS_H P4OUT |= CS#define CS_L P4OUT &= CS#define CE_H P5OUT |= CE#define CE_L P5OUT &= CE#define PWR_UP_H P5OUT |= PWR_UP#define PWR_UP_L P5OUT &= PWR_UP#define CLK1_H P4OUT |= CLK1#define CLK1_L P4OUT &= CLK1#define DATA_OUT P4DIR |= DATA#define DATA_OUT_H P4OUT |= DATA#define DATA_OUT_L P4OUT &= DATA#define DR1_IN P4DIR &= DR1#define DR1_IN_H P4IN & DR1 / DR1输入是否为高电平#define DATA_IN P4DIR &= DATA#define DATA_IN_H P4IN & DATA / DATA输入是否为高电平#define CLK2_H P5OUT |= CLK2#define CLK2_L P5OUT &= CLK2#define DOUT2_IN P4DIR &= DOUT2#define DOUT2_IN_H P4IN & DOUT2 / DOUT2输入是否为高电平#define DR2_IN P5DIR &= DR2#define DR2_IN_H P5IN & DR2 / DR2输入是否为高电平/* 相应端口设为IO模式*/static inline void IO_MODE() P4SEL &= (DATA + CLK1 + DR1 + CS + DOUT2); P5SEL &= (CLK2 + DR2 + CE + PWR_UP);/* IO端口方向初始化*/ static inline void IO_DIR_INIT() P4DIR |= (DATA + CLK1 + CS); DR1_IN; DOUT2_IN; P5DIR |= (CLK2 + CE + PWR_UP); DR2_IN;/* * IO初始化*/static inline void IO_Init(void) IO_MODE(); IO_DIR_INIT(); #define IO_INIT() IO_Init()/* * nRF2401配置宏,所有的参数都在这里设置 */#define DATA2_W 0 / Length of data payload section RX channel 2 #define DATA1_W 32 / Length of data payload section RX channel 1 / 本驱动程序只支持8的整数倍的数据长度 / DATAx_W(bits) = 256 - ADDR_W - CRC#define ADDR2_0 0x1f / Up to 5 byte address for RX channel 2 #define ADDR2_1 0x3f#define ADDR2_2 0x00#define ADDR2_3 0x00#define ADDR2_4 0x00#define ADDR1_0 0x26 / Up to 5 byte address for RX channel 1#define ADDR1_1 0x26#define ADDR1_2 0x00#define ADDR1_3 0x00#define ADDR1_4 0x00#define ADDR_W 16 / Number of address bits (both RX channels) / 本驱动程序只支持8、16、32、40地址位数 #define CRC_L 0 / 8 or 16 bit CRC Logic 0: 8 bit CRC Logic 1: 16 bit CRC #define CRC_EN 1 / Enable on-chip CRC generation/checking / Logic 0: On-chip CRC generation/checking disabled / Logic 1: On-chip CRC generation/checking enabled#define RX2_EN 0 / Enable two channel receive mode / Logic 0: One channel receive / Logic 1: Two channels receive /receive channel 2 is always 8 channels (8 MHz) above receive channel 1 #define CM 1 / Communication mode (Direct or ShockBurst) / Logic 0: nRF2401A operates in direct mode. / Logic 1: nRF2401A operates in ShockBurst mode#define RFDR_SB 0 / RF data rate (1Mbps requires 16MHz crystal) / Logic 0: 250 kbps Logic 1: 1 Mbps#define XO_F 3 / Crystal frequency 0:4M 1:8M 2:12M 3:16M 4:20M #define RF_PWR 3 / RF output power(dbm) 0:-20 1:-10 2:-5 3:0 #define RF_CH 60 / Frequency channel(7bit,0 - 127) / ChannelRf=2400M + RF_CH * 1M #define RXEN 0 / RX or TX operation / Logic 0: transmit mode Logic 1: receive mode /* Enter Active modes */extern void RF_Active(void);/* Enter Configuration modes */extern void RF_Config(void);/* Enter Stand by modes */extern void RF_Standby(void);/* Power down modes* Note:When the nRF2401A is in power down it must always settle * in stand by mode for 3ms before it can enter configuration or one * of the active modes. */extern void RF_PowerDown(void);/* nRF2401初始化*/extern void RF_Init(void);/* 向指定channel指定地址发送指定数据* channel:接收端的频道(0 - 127)* addr: 接收端的地址的指针* alength:地址长度(byte)* sendbuffer:要发送数据的首指针* dlength:数据长度*/extern void RF_SendData(unsigned char channel, unsigned char *addr, unsigned char alength, unsigned char *sendbuffer, unsigned char dlength);/* 进入接收模式*/extern void RF_RXMode(void);/* 接收数据* receivebuffer:接收缓冲区指针* channel:接收的通道* 返回接收到得字节数,错误返回-1*/extern int RF_ReceiveData(unsigned char *receivebuffer, unsigned char channel);#endifnRF2401驱动程序(MSP430)(下)/* 文件名:nrf2401.c* 功 能:nRF2401驱动程序c文件*/#include nrf2401.h#include static void RF_WriteByte(unsigned char data);static void Delay(unsigned int time);/* 配置数据*/static const unsigned char ConfigData = (unsigned char)DATA2_W, (unsigned char)DATA1_W, (unsigned char)ADDR2_4, (unsigned char)ADDR2_3, (unsigned char)ADDR2_2, (unsigned char)ADDR2_1, (unsigned char)ADDR2_0, (unsigned char)ADDR1_4, (unsigned char)ADDR1_3, (unsigned char)ADDR1_2, (unsigned char)ADDR1_1, (unsigned char)ADDR1_0, (unsigned char)(ADDR_W 2) | (CRC_L 1) | CRC_EN), (unsigned char)(RX2_EN 7) | (CM 6) |(RFDR_SB 5) | (XO_F 2) | RF_PWR), (unsigned char)(RF_CH 0; i /= 2) if(data & i) != 0) DATA_OUT_H; else DATA_OUT_L; CLK1_H; _NOP(); _NOP(); CLK1_L; static void Delay(unsigned int time) while(time-);/* Enter Active modes */void RF_Active(void) PWR_UP_H; CE_H; CS_L;/* Enter Configuration modes*/void RF_Config(void) PWR_UP_H; CE_L; CS_H;/* Enter Stand by modes */void RF_Standby(void) PWR_UP_H; CE_L; CS_L;/* Power down modes* Note:When the nRF2401A is in power down it must always settle * in stand by mode for 3ms before it can enter configuration or one * of the active modes. */void RF_PowerDown(void) PWR_UP_L;/* nRF2401初始化*/void RF_Init(void) unsigned int i; IO_INIT(); RF_Standby(); Delay(30000); RF_Config(); for(i = 0; i 127) return; if(alength 5) return; if(dlength 32) return; if(addr = NULL) | (sendbuffer = NULL) return; RF_Config(); RF_WriteByte(unsigned char)(channel 1); Delay(2000); CS_L; DATA_OUT_L; RF_Active(); for(i = 0; i alength; i+) RF_WriteByte(*addr+); for(i = 0; i dlength; i+) RF_WriteByte(*sendbuffer+); Delay(2000); CE_L; DATA_OUT_L;/* 进入接收模式*/void RF_RXMode(void) RF_Config(); DATA_OUT_H;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 老人考试题及答案
- 心理学基础模拟练习题(含答案)
- 中级英语II知到智慧树答案
- 护理重点环节应急预案试题+答案
- 药店药品网络销售管理制度试题(含参考答案)
- 水利工程师-水利工程管理测试题(含参考答案)
- 运输车驾驶员安全教育培训考核试题及答案
- 2025城管执法服装定制化采购及质量监控制度合同
- 2025车展场地租赁合同范本-附带增值服务条款
- 2025年度速记服务保密协议及数据安全保护合同
- 团队协作重要性课件
- GB/T 702-2017热轧钢棒尺寸、外形、重量及允许偏差
- 2023年浙江宁波自考专科07038信息技术与物流管理实复习资料
- GB/T 18970-2003饲料添加剂10%β,β-胡萝卜-4,4-二酮(10%斑蝥黄)
- 履带式管道机器人方案
- 不锈钢棚施工方案
- 医用高等数学定积分课件
- 深加工结转操作标准流程
- 溺水伤亡事故应急预案演练方案
- 2022年有子女离婚协议书手写
- 公路硬化报告范文
评论
0/150
提交评论