智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2817|回复: 14
打印 上一主题 下一主题

SPI与nrf905

[复制链接]

13

主题

177

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1886

优秀会员奖章活跃会员奖章

威望
755
贡献
903
兑换币
62
注册时间
2011-10-23
在线时间
114 小时
跳转到指定楼层
1#
发表于 2012-3-12 18:07:53 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
论坛用的不怎么熟,这发个链接了
http://www.znczz.com/thread-95480-1-1.html

13

主题

177

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1886

优秀会员奖章活跃会员奖章

威望
755
贡献
903
兑换币
62
注册时间
2011-10-23
在线时间
114 小时
15#
 楼主| 发表于 2012-7-5 02:12:39 | 只看该作者
骑鱼士 发表于 2012-4-30 12:49
最近好了吗?可以了吗?接受怎么弄的

接收没办法了,模拟了……
回复 支持 反对

使用道具 举报

13

主题

177

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1886

优秀会员奖章活跃会员奖章

威望
755
贡献
903
兑换币
62
注册时间
2011-10-23
在线时间
114 小时
14#
 楼主| 发表于 2012-7-5 02:11:02 | 只看该作者
傲天§Angel 发表于 2012-5-1 19:14
硬件SPI同样有问题的飘过~用的是K10~~LZ咱交流下?

不好意思了,K10没用过
回复 支持 反对

使用道具 举报

13

主题

177

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1886

优秀会员奖章活跃会员奖章

威望
755
贡献
903
兑换币
62
注册时间
2011-10-23
在线时间
114 小时
13#
 楼主| 发表于 2012-7-5 02:10:28 | 只看该作者
亦友寒 发表于 2012-7-2 15:29
#define  TX_EN  PORTA_PA0
#define  TRX_CE PORTA_PA1
#define  PWR_UP PORTA_PA2

这样定义没有问题啊,是你程序别的地方有问题吧
回复 支持 反对

使用道具 举报

7

主题

67

帖子

0

精华

高级会员

Rank: 4

积分
534
威望
319
贡献
117
兑换币
0
注册时间
2012-3-13
在线时间
49 小时
毕业学校
长沙理工小学
12#
发表于 2012-7-2 15:29:50 | 只看该作者
征服者 发表于 2012-3-19 10:34
#include       /* common defines and macros */
#include "derivative.h"      /* derivative-specific  ...

#define  TX_EN  PORTA_PA0
#define  TRX_CE PORTA_PA1
#define  PWR_UP PORTA_PA2

为什么我这样定义后不能用呢???
回复 支持 反对

使用道具 举报

10

主题

27

帖子

0

精华

高级会员

Rank: 4

积分
563
威望
345
贡献
120
兑换币
0
注册时间
2012-3-25
在线时间
49 小时
毕业学校
宁波工程学院
11#
发表于 2012-5-1 19:14:30 | 只看该作者
硬件SPI同样有问题的飘过~用的是K10~~LZ咱交流下?
回复 支持 反对

使用道具 举报

0

主题

39

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
460
QQ
威望
303
贡献
79
兑换币
12
注册时间
2012-2-17
在线时间
39 小时
10#
发表于 2012-4-30 12:49:53 | 只看该作者
最近好了吗?可以了吗?接受怎么弄的
回复 支持 反对

使用道具 举报

0

主题

72

帖子

0

精华

高级会员

Rank: 4

积分
833
威望
514
贡献
147
兑换币
6
注册时间
2012-2-21
在线时间
86 小时
毕业学校
昆明理工大学
9#
发表于 2012-4-12 16:26:51 | 只看该作者
好难啊
回复 支持 反对

使用道具 举报

13

主题

177

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1886

优秀会员奖章活跃会员奖章

威望
755
贡献
903
兑换币
62
注册时间
2011-10-23
在线时间
114 小时
8#
 楼主| 发表于 2012-3-20 09:16:57 | 只看该作者
这都没人理啊……
回复 支持 反对

使用道具 举报

13

主题

177

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1886

优秀会员奖章活跃会员奖章

威望
755
贡献
903
兑换币
62
注册时间
2011-10-23
在线时间
114 小时
7#
 楼主| 发表于 2012-3-19 10:34:50 | 只看该作者
#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */

       /* for define the head file*/
                      //头文件的宏定义的相关信息 来自于官方方式。
//#include "Includes.h"  //头文件包含  来自于官方的数据 应该准确。
                    
/****************************************************************************
                          SPI的初始化设置
***************************************************************************/


#define uchar unsigned char  /*  the dode of the C51's application */
#define uint  unsigned int
// ===========spi的各种命令代码===========================================
#define WC                0x00                        // Write configuration register command                         
#define RC                0x10                         // Read  configuration register command
#define WTP                0x20                         // Write TX Payload  command
#define RTP                0x21                        // Read  TX Payload  command
#define WTA                0x22                        // Write TX Address  command
#define RTA                0x23                        // Read  TX Address  command
#define RRP                0x24                        // Read  RX Payload  command


/****************************************************************************/

#define  TX_EN  PORTA_PA0
#define  TRX_CE PORTA_PA1
#define  PWR_UP PORTA_PA2


#define  CD PORTA_PA3
#define  AM PORTA_PA4
#define  DR PORTA_PA5

//#define  MISO PTM_PTM2
//#define  MOSI PTM_PTM4
//#define  SCK  PTM_PTM5
//#define  SS  PTM_PTM3
//#define  CSN  PTH_PTH0

#define  CSN PORTA_PA6
#define  LED2 PORTA_PA7

// int i=0;
uchar  TxBuf[6];
//uchar  RxBuf[6];
uchar num;




/*void PLL_init(void) //倍频到88M
{
    CLKSEL=0X00;    // disengage PLL to system
    SYNR =0xc0 | 0x0a;                        
    REFDV=0x80 | 0x01; //llclock=2*osc*(1+SYNR)/(1+REFDV)=96MHz;                     
    REFDV=1;
    POSTDIV=0x00;  
    _asm(nop);          // BUS CLOCK=48M
    _asm(nop);
    while(!(CRGFLG_LOCK==1));   //when pll is steady ,then use it;
    CLKSEL_PLLSEL =1;          //engage PLL to system;
  
}        */

typedef struct RFConfig
{
        uchar n;
        uchar buf[10];
}RFConfig;

  RFConfig RxTxConf =                                                                          
{
        10,
        0x4c, 0x0c, 0x44, 0x20, 0x20, 0xcc, 0xcc, 0xcc,0xcc, 0x58       
};
// 905配置初始化数据
//0x4c:频率433mhz s
// 0x20, 0x20:收发32字节
// 0xcc, 0xcc, 0xcc,0xcc:spi写入的地址
/*****************************************************************************/

/*****************************************************************************/
               
void keyscan(void);                            // initialize 232 uart
void Config905(void);                        // Config nRF905 module配置NRF905模式
void SetTxMode(void);                        // Set nRF905 in Tx mode
void TxPacket(void);                        // Send data by nRF905
void SpiWrite(uchar);                        // Write data to nRF905
void Delay(uchar n);                        // Delay 100us
void SPI_Init(void);//initial of the SPI

/*****************************************************************************/
//主函数
/*****************************************************************************/               

void main()
{
DDRA_DDRA0=1;//TX_EN   输出控制端口
DDRA_DDRA1=1;//TRX_CE
DDRA_DDRA2=1;//PWR_UP

DDRA_DDRA3=0;//CD
DDRA_DDRA4=0;//AM
DDRA_DDRA5=0;//DR      输入端口

//DDRM_DDRM2=0;//MISO
//DDRM_DDRM4=1;//MOSI
//DDRM_DDRM5=1;//SCK
//DDRM_DDRM3=1;//CSN

DDRA_DDRA6=1;//LED1
DDRA_DDRA7=1;//LED2
//DDRH_DDRH0=1;//CSN
DDRB=0x0f;


  
  //=========RF905初始化 ===============================================
        CSN=1;                                                // Spi         disable                                               
        //SCK=0;                                                // Spi clock line init high    h
        DR=1;                                                // Init DR for input
        AM=1;                                                // Init AM for input
        PWR_UP=1;                                        // nRF905 power on
        TRX_CE=0;                                        // Set nRF905 in standby mode   spi编程模式
        TX_EN=0;                                        // set radio in Rx mode
  /*****************************************************************************/
  
  SPI_Init();//SPI initial
  for(;;)
   {
     Config905();                       // Config nRF905 module
            
     keyscan(); //scan the key board
     if(num==1)  
        {  
        TxBuf[0] =1;
               SetTxMode();
            
             //TxPacket();
               Delay(2);
               num=0;       
                }
           if(num==2)  
         {                 
          TxBuf[0] =2;
          SetTxMode();
                 //TxPacket();
                 Delay(2);
                 num=0;
          }
     if(num==3)                          
         {  
          TxBuf[0] =3;
           SetTxMode();
                 // TxPacket();
                  Delay(2);
                   num=0;
          }
     if(num==4)                          
         {  
          TxBuf[0] =4;
          }
                                      //        SetTxMode();                                                                                                 
                   TxPacket();// Set Tx Mode*/               
               TxBuf[0] =0;// T发送数据包
   
}   //for end
}   //the end of main function


/*****************************************************************************/
//延时子程序
/*****************************************************************************/
void Delay(uchar n)
{
        uint i,j;
   for(i=0;i<n;i++)
    for(j=0;j<2670;j++);    //busclk:16MHz--1ms
      
                     
}
/*****************************************************************************/
//function Config905();
/*****************************************************************************/
void Config905(void)
{
        uchar i;                                       
        CSN=0;
          // Spi enable for write a spi command
        SpiWrite(WC);                        // Write config command写放配置命令
        for (i=0;i<RxTxConf.n;i++)        // Write configration words  写放配置字相当于i<10道理
        {
                SpiWrite(RxTxConf.buf[i]);
        }
        CSN=1;// Disable Spi
}
/*****************************************************************************
                    //function SPI initial function
*****************************************************************************/

void SPI_Init(void)
{
MODRR |= 0x10;  //define the M port
//SPI0CR1=0x04;
(void)SPI0SR;
(void)SPI0DR;


SPI0BR=0x47; //it is said its should be 67//BR=busclk/((SPPR + 1)· 2^(SPR + 1))=16000/(5*8)=400k

SPI0CR1=0xf2; //0b01011100ss\为主机输出 高位先传 d2  52  f2 都行的
SPI0CR2=0x00;  //0b00000010 before was 0x12

  
}

/****************************************************************************

                                       SPI写函数
****************************************************************************/

void SpiWrite(uchar  byte)
{


   
        //(void)SPI0SR;
        SPI0DRL = byte;
        Delay(3);
        while(!(SPI0SR_SPTEF));//wait until the data is all sent off
  
  //while(!(SPI0SR_SPIF));
        //i=~i;
        //(void)SPI0DRL;      // just now open enable
        //return;

  

}
/*****************************************************************************/
//function TxPacket();
/*****************************************************************************/
void TxPacket(void)
{
        uchar i;
        PWR_UP=1;                        //上电
        TX_EN=1;                        //发送使能
  TRX_CE=0;                        // Set TRX_CE low        进入spi编程模式
        CSN=0;           // Spi enable for write a spi command          spi使能
        SpiWrite(WTA);                // Write address command  写入“写地址命令”
        for (i=0;i<4;i++)                // Write 4 bytes address
        {
            SpiWrite(RxTxConf.buf[i+5]);   //发送地址配置数如0x3C等,是第五个开始的
        }
        CSN=1;                                // Spi disable                                               
        Delay(1);
        CSN=0;        // Spi enable for write a spi command       
    SpiWrite(WTP);                // Write payload command        写入“写数据命令”
        for (i=0;i<4;i++)                //写入“写地址命令”
        {
                SpiWrite(TxBuf[i]);                // Write 32 bytes Tx data         
        }
        CSN=1;                                // Spi disable
        TRX_CE=1;                        // 进入发送模式 发送数据
        Delay(1);
        TRX_CE=0;                        // Set TRX_CE low        进入spi编程模式
       
}
/*****************************************************************************/
//SetTxMode();
/*****************************************************************************/
void SetTxMode(void)                               
{       
        TX_EN=1;
        TRX_CE=1;
        Delay(2);                          // delay for mode change(>=650us)
}       
/*****************************************************************************/
//function SendData_595 ();
/*****************************************************************************/
void keyscan(void)
{
unsigned char keytemp;
PORTB|=0xfe;
keytemp=PORTB&0xff;
if(keytemp!=0xff)
    {
    Delay(2);
    keytemp=PORTB&0xff;
    if(keytemp!=0xff)
   // keyflag=1;//有按键标志
    switch(keytemp)
        {
        case 0xee:num=1;break;//按键1
        case 0xde:num=2;break;//按键2
        case 0xbe:num=3;break;//按键3
                    case 0x7e:num=10;break;//按键a        //****************************
                    default : break;                            //注意 注意我没有写完剩下的程序键盘部分的
                                                                                //anjian按键5号开始自己编啊  
        }
       }
      
/*PORTB=0xfd;
keytemp=PORTB&0xff;
if(keytemp!=0xff)
    {
     Delay(10);
    keytemp=PORTB&0xff;
    if(keytemp!=0xff)
    //keyflag=1;
        switch(keytemp)
           {   case 0xed:num=4;break;//按键4
         case 0xdd:num=5;break;//按键5
         case 0xbd:num=6;break;//按键6
         case 0x7d:num=11;break;//按键b
                 }
     }
PORTB=0xfb;
keytemp=PORTB&0xff;
if(keytemp!=0xff)
    {
     Delay(10);
    keytemp=PORTB&0xff;
    if(keytemp!=0xff)
    //keyfalg=1;
        switch(keytemp)
            {   case 0xeb:num=7;break;//按键7
          case 0xdb:num=8;break;//按键8
                       case 0xbb:num=9;break;//按键9
                       case 0x7b:num=12;break;//按键c
                       
                  }
                 }
                 
PORTB=0xf7;
keytemp=PORTB&0xff;
if(keytemp!=0xff)
    {
     Delay(5);
    keytemp=PORTB&0xff;
    if(keytemp!=0xff)
    //keyfalg=1;
        switch(keytemp)
            {   case 0xe7:num=14;break;//按键'*'
          case 0xd7:num=0;break;//按键0
                       case 0xb7:num=15;break;//按键9'#'
                       case 0x77:num=13;break;//按键d
                       
                  }
                 }                 
                 
  */
}
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-9-21 17:30 , Processed in 0.048766 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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