|
小菜这几天调试nRF24L01,功能都能实现,不过发了个困扰了我两天的问题:只有上电开始 nRF24L01才能正常工作,单是对单片机复位nRF24L01就工作不了,
用示波器观察看出:中断脚IRQ一直被拉低,我用的IRQ下降沿作为AVR单片机的中断信号,现在上我的nRF24L01初始化函数,看有哪位仁兄能给我点建议!!
使用M128 晶振 11.0592M
SPI速度:系统二分频
void nRF24L01_SPI_Initialization(void)
{
unsigned char temp;
CE_DDR = 1;
DDRG |= 0x10;
CE_PORT = 0; //初始化为待机模式
CSN_PORT_1; //非选择
MOSI_PORT = 1;
MISO_PORT = 1;
SCK_PORT = 0;
MOSI_DDR = 1;
MISO_DDR = 0;
SCK_DDR = 1;
SPCR = 0x50; // SPI允许,主机模式,MSB方式,查询方式,极性方式00,1/4系统时钟频率
SPSR = 0x01;
temp = SPSR;
temp = SPDR; // 清除SPI中断标志位,使SPI空闲
}
void nRF24L01_Initialization(void)
{
nRF24L01_Write_register(0x00,0x00);
delay_ms(100);
nRF24L01_Write_register(0x00,0x0F); //nrf上电,设为接收模式16位CRC,响应所有中断
nRF24L01_Write_register(0x01,0x01); //通道0 自动应答允许
nRF24L01_Write_register(0x02,0x01); //通道0 接收允许
nRF24L01_Write_register(0x03,0x03); //地址宽度为5字节
nRF24L01_Write_register(0x04,0x0E); //等待250+86us 自动重发15次
nRF24L01_Write_register(0x05,30); //设置工作频率,发送和接收必须一样
nRF24L01_Write_register(0x06,0x0F); //传输速率2M 发射功率0dBm
nRF24L01_Write_register_nData(0x0A,5,Address); //设置接收地址
nRF24L01_Write_register_nData(0x10,5,Address); //设置发送地址地址
nRF24L01_Write_register(0x11,32); //32字节有效数据
}
//24L01中断为低电平触发,可使用下降沿做为单片机触发信号
void INT4_24L01_Initialization(void)
{
EICRB |= 0x02; //INT4 下降沿触发
EIMSK |=0x10;
SFIOR |= 0x04;
DDRE.4 = 0;
PORTE.4 = 1;
}
芯片资料上对掉电模式信号时这么描述的:
![](http://cache.amobbs.com/bbs_upload782111/files_28/ourdev_544946.jpg)
(原文件名:状态1.jpg)
这里是这么解释的:
![](http://cache.amobbs.com/bbs_upload782111/files_28/ourdev_544947.jpg)
(原文件名:状态2.jpg)
小菜是这么理解的:掉电后必须重新配置功能寄存器,才能进入发送或接收模式,单片机复位后都对nRF2401重新配置了的,我觉得应该不会是这个问题,不知道哪位大侠遇到这个问题是怎么解决的,能否给小菜点意见?? |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|