OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2366|回复: 4

关于利用AVR硬件SPI驱动NRF905的问题

[复制链接]

2

主题

6

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2018-4-17
在线时间
1 小时
发表于 2018-4-17 22:04:34 | 显示全部楼层 |阅读模式
1金钱
关于利用AVR硬件SPI驱动NRF905的问题

各位大神,本人是一名在读大学生,自学的AVR。最近正在用nrf做一个项目,但是遇到了一个瓶颈,经过两个星期的修改和上网查资料还是没能解决。

具体问题如下:

我利用AVR自带的硬件SPI引脚来向nrf905写入数据时,始终无法写入配置信息(利用示波器测经过初始化之后的nrf的VCLK引脚一直输出的是频率为400KHZ的波);后来实在没办法,用IO口模拟的SPI对nrf905进行操作,居然成功了。稀里糊涂的


下面是我写硬件SPI的初始化部分的程序,请大神抽空帮我看一下,为什么我用硬件SPI驱不起来?
                  相关引脚连接如下:
                                              CD--------------PD2
                                              AM-------------PD3
                                              DR-----------------PD4

                                              CE-----------------PD5
                                              PWR--------------PD6
                                              TWEN-------------PD7

                                              CS-----------------PB4(ss)
                                              MISO--------------PB
(MISO)                                            
                                              SCK-----------------PB7(SCK)
                                              MOSI--------------PB(
MOSI)
#include <asf.h>
#include <util/delay.h>

#define uchar unsigned char
#define uint unsigned int


//*******************定义命令字**********************
#define WC 0x00  // 写配置命令
#define RC 0x10   // 读配置命令
#define WTP 0x20   // 写发送命令。
#define RTP 0x21  //读发送命令
#define WTA 0x22  // 写发送地址
#define RTA 0x23
#define RRP 0x24

uchar Rfconfig[10]={0x4c/*433.3MHZ*/,0x0e,0x44,0x04,0x04,0xe7,0xe7,0xe7,0xe7,0xde};//nrf905初始化

void spi_init(void)
{     
    //配置相应的寄存器
    SPCR = 0x5f; //0b0101 1111
    SPSR = 0x00; //SPI2x=0
}
void spi_write(uint data)        //data占一个字节(8位)
{
    PORTB &= ~(1 << 4);            //使能spi器件(ss引脚拉低,启动通讯)
    SPDR=data;                    //发送数据
    while(!(SPSR & (1<<SPIF))); //等待发送完毕
    PORTB |= (1 << 4);            //禁止spi器件*/
}

void ini_system(void)
{        
    DDRB=0b10111111;   
    PORTB=0b01111111;
    DDRD=0xe3;//1110 0011
    PORTD=0x5f;//0101 1111     
    spi_init();
    spi_write(WC);//写配置命令
    for(uchar i=0;i<10;i++)
    {
        spi_write(Rfconfig);
    }
}

void main()
{
    board_init();
    ini_system();
    while(1)
    {        
    }
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2018-4-17
在线时间
1 小时
 楼主| 发表于 2018-4-17 22:05:08 | 显示全部楼层
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-4-18 01:04:09 | 显示全部楼层
帮顶
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2018-4-17
在线时间
1 小时
 楼主| 发表于 2018-4-21 22:36:05 | 显示全部楼层
有大神帮忙解答吗?
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2018-4-17
在线时间
1 小时
 楼主| 发表于 2018-4-25 20:47:15 | 显示全部楼层
问题已转移
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 05:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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