搜索
bottom↓
回复: 3

关于 rnf24L01 的代码的一个疑惑, 谢谢

[复制链接]

出0入0汤圆

发表于 2009-7-2 14:17:09 | 显示全部楼层 |阅读模式
这个是我在网上看到的一个关于 NRF24L01 的代码
目前有个疑问

在接受模式里,如下

void RX_Mode(void)
{
CE=0;
SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // Use the same address on the RX device as the TX device

SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); // Enable Auto.Ack:Pipe0
SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); // Enable Pipe0
SPI_RW_Reg(WRITE_REG + RF_CH, 40); // Select RF channel 40
SPI_RW_Reg(WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH); // Select same RX payload width as TX Payload width
SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); // TX_PWR:0dBm, Datarate:2Mbps, LNA:HCURR
SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); // Set PWR_UP bit, enable CRC(2 bytes) & Prim:RX. RX_DR enabled..

CE = 1; // Set CE pin high to enable RX device

// This device is now ready to receive one packet of 16 bytes payload from a TX device sending to address
// '3443101001', with auto acknowledgment, retransmit count of 10, RF channel 40 and datarate = 2Mbps.

}

上面的程序里有下面的一句话

SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);

其中第一个参数, 是下面两个的“和 ”? 为什么不直接定义为 0x21? 难道是文档描述如此?


#define WRITE_REG 0x20 // Define write command to register
#define EN_AA 0x01 // 'Enable Auto Acknowledgment' register address

做过的人呢能解释下么???
或是提供个NRF24L01的文档,我自己看



下面是先关的定义

// SPI(nRF24L01) commands
#define READ_REG 0x00 // Define read command to register
#define WRITE_REG 0x20 // Define write command to register
#define RD_RX_PLOAD 0x61 // Define RX payload register address
#define WR_TX_PLOAD 0xA0 // Define TX payload register address
#define FLUSH_TX 0xE1 // Define flush TX register command
#define FLUSH_RX 0xE2 // Define flush RX register command
#define REUSE_TX_PL 0xE3 // Define reuse TX payload register command
#define NOP 0xFF // Define No Operation, might be used to read status register

//***************************************************//
// SPI(nRF24L01) registers(addresses)
#define CONFIG 0x00 // 'Config' register address
#define EN_AA 0x01 // 'Enable Auto Acknowledgment' register address
#define EN_RXADDR 0x02 // 'Enabled RX addresses' register address
#define SETUP_AW 0x03 // 'Setup address width' register address
#define SETUP_RETR 0x04 // 'Setup Auto. Retrans' register address
#define RF_CH 0x05 // 'RF channel' register address
#define RF_SETUP 0x06 // 'RF setup' register address
#define STATUS 0x07 // 'Status' register address

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入618汤圆

发表于 2009-7-2 14:23:04 | 显示全部楼层
WRITE_REG是写寄存器指令,EN_AA是寄存器地址,这样写是为了清晰,一看就知道是写EN_AA寄存器。
如果定义成0x21,你还要去查数据手册才知道是在干什么,对吧?
放心,编译器会帮你优化掉,变成0x21的,不会增加一次+运算。

出0入0汤圆

 楼主| 发表于 2009-7-2 14:34:44 | 显示全部楼层
谢谢啊

代码是网上找的 呵呵,, 看的有点疑惑,谢谢你

主要是出在下面

// SPI(nRF24L01) commands  
#define READ_REG 0x00 // Define read command to register  
#define WRITE_REG 0x20 // Define write command to register

这个是说的命令


// SPI(nRF24L01) registers(addresses)  
#define CONFIG 0x00 // 'Config' register address  
#define EN_AA 0x01 // 'Enable Auto Acknowledgment' register address  
这个说是 寄存器地址

而 程序里有下面的一句话  

SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);  

所以就疑惑了,,, 地址+ 寄存器  啥玩意是 嘿嘿

出0入0汤圆

发表于 2009-7-6 16:57:12 | 显示全部楼层
请仔细观看 8.3.1 SPI Commands的内容
不看文档 光看程序没用的
先了解芯片特性 再看程序
nRF24L01 v2.0ourdev_458887.pdf(文件大小:1.07M) (原文件名:nRF24L01_Product_Specification_v2_0.pdf)

我现在是想用avr的io口模拟spi时序,研究中。。。呵呵
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-28 06:05

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表