智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2941|回复: 11
打印 上一主题 下一主题

用MCF52259写了好久的QSPI的程序,但是还没有成功驱动NRF24L01啊啊啊啊

[复制链接]

6

主题

54

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
489
威望
266
贡献
127
兑换币
130
注册时间
2013-11-18
在线时间
48 小时
毕业学校
长春理工大学
跳转到指定楼层
1#
发表于 2014-2-26 23:44:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
30贡献
用MCF52259写了好久的QSPI的程序,但是还没有成功驱动NRF24L01啊啊啊啊,,有哪位大神可愿意把代码分享下,真是感激不尽啊,

回复

使用道具 举报

6

主题

54

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
489
威望
266
贡献
127
兑换币
130
注册时间
2013-11-18
在线时间
48 小时
毕业学校
长春理工大学
2#
 楼主| 发表于 2014-2-27 01:19:50 | 只看该作者
本帖最后由 守候一米阳光 于 2014-2-27 01:27 编辑

补充下:
请大神仔细看看下面的程序啊:
void qspi_init(void)
{
        MCF_GPIO_PQSPAR=0|MCF_GPIO_PQSPAR_QSPI_DOUT_DOUT
                                        |MCF_GPIO_PQSPAR_QSPI_CLK_CLK
                                        |MCF_GPIO_PQSPAR_QSPI_CS2_CS2
                                        |MCF_GPIO_PQSPAR_QSPI_DIN_DIN;        
        MCF_QSPI_QMR=0
                                |MCF_QSPI_QMR_MSTR //1 QSPI是主模式。为了QSPI模块的正确运行必须置一。
                                |MCF_QSPI_QMR_BITS(8)  //8位需要被转变
                                |MCF_QSPI_QMR_BAUD(4);//  公式MR[BAUD]=fsys/(2*期望得到的QSPI_CLK波特率)
        MCF_QSPI_QMR &= ~MCF_QSPI_QMR_CPOL;//时钟极性设置: 停止状态QSPI_CLK的值是逻辑等级0
        MCF_QSPI_QMR &= ~MCF_QSPI_QMR_CPHA;//数据在QSPI_CLK的下降沿改变,在上升沿捕获                                      //set delay                                
        MCF_QSPI_QDLYR=0
                                  |MCF_QSPI_QDLYR_QCD(1)  //QSPI_CLK延时。
                                  |MCF_QSPI_QDLYR_DTL(1); //转换后延时。
                                 
        MCF_QSPI_QWR=MCF_QSPI_QWR_CSIV  //在转移中,当值不在当前的命令中,QSPI芯片选择输出来返回1(指的是,停止状态为0,芯片选择高电平)
                                |MCF_QSPI_QWR_ENDQP(0)
                                |MCF_QSPI_QWR_NEWQP(0);
                                //|MCF_QSPI_QWR_WREN;
//clear flag        
    MCF_QSPI_QIR=MCF_QSPI_QIR_WCEFB  //写入冲突访问错误使能
                            |MCF_QSPI_QIR_ABRTB  //中止访问错误。
                            |MCF_QSPI_QIR_ABRTL  //中止访问错误。
                            |MCF_QSPI_QIR_WCEF   //清除写冲突错误标记
                            |MCF_QSPI_QIR_ABRT   //清除中止标记
                                |MCF_QSPI_QIR_SPIF;         //清除QSPI完成标记
//                MCF_QSPI_QWR = MCF_QSPI_QWR_CSIV;
}
/*
*功能:用QSPI发送一个字节
*
*参数:CSn:所选择的通道
*      data:要发送的数据
*/
void qspi_sendbyte(uint8 CSn,uint8 data)
{
        MCF_QSPI_QAR=MCF_QSPI_QAR_TRANS;
        MCF_QSPI_QDR=data;

        MCF_QSPI_QAR=MCF_QSPI_QAR_CMD;
        MCF_QSPI_QDR=(uint16)(MCF_QSPI_QDR_BITSE
                                                 &(~(1<<(8+CSn))
                                                 |MCF_QSPI_QDR_DT
                                                 |MCF_QSPI_QDR_DSCK));

        MCF_QSPI_QDLYR|=MCF_QSPI_QDLYR_SPE;
        while(!(MCF_QSPI_QIR&MCF_QSPI_QIR_SPIF))
        {
                ;
        }
        MCF_QSPI_QIR|=MCF_QSPI_QIR_SPIF;
}

/*
*
*功能:QSPI接收一个字节数据
*
*参数:CSn:选择的通道
*/
uint16 qspi_receivebyte(uint8 CSn)
{
        uint16 temp=0;
        MCF_QSPI_QAR=MCF_QSPI_QAR_ADDR(COMMAND_ADDR);
        MCF_QSPI_QDR=(uint16)(MCF_QSPI_QDR_BITSE
                                                &(~(1<<(8+CSn)))
                                                |MCF_QSPI_QDR_DT
                                                |MCF_QSPI_QDR_DSCK);
                                                
        MCF_QSPI_QAR=MCF_QSPI_QAR_TRANS;
        MCF_QSPI_QDR=temp;
        
        MCF_QSPI_QDLYR|=MCF_QSPI_QDLYR_SPE;
        while(!(MCF_QSPI_QIR&MCF_QSPI_QIR_SPIF)) ;
        MCF_QSPI_QIR|=MCF_QSPI_QIR_SPIF;
        MCF_QSPI_QAR=MCF_QSPI_QAR_ADDR(RECEIVE_ADDR);
        temp=MCF_QSPI_QDR;
        return temp;         
        
}
上面是MCF52259的QSPI的初始化
然后我想先在主程序里执行一个 NRF_Check();函数,检查芯片和24L01是否正常连接:

uint8 NRF_Check(void)
{
        uint8 buf[5]={0xC2,0xC2,0xC2,0xC2,0xC2};
        uint8 buf1[5];
        uint8 i;
        /*写入5个字节的地址.  */  
        SPI_NRF_WriteBuf(NRF_WRITE_REG+TX_ADDR,buf,5);

        /*读出写入的地址 */
        SPI_NRF_ReadBuf(TX_ADDR,buf1,5);
         
        /*比较*/               
        for(i=0;i<5;i++)
        {
                if(buf1!=0xC2)
   
            break;
        }
               
        if(i==5)
                return 1;        //MCU与NRF成功连接
        else
                return 0 ;        //MCU与NRF不正常连接
}
uint8 SPI_NRF_WriteBuf(uint8 reg ,uint8 *pBuf,uint8 bytes)
{
         uint8 status,byte_cnt;
         NRF_CE_LOW();
         delayms(0xff);
            /*置低CSN,使能SPI传输*/   
         NRF_CSN_LOW();
         delayms(0xff);        
         /*发送寄存器号*/        
           status = SPI_NRF_RW(reg);
         
            /*向缓冲区写入数据*/
         for(byte_cnt=0;byte_cnt<bytes;byte_cnt++)
                SPI_NRF_RW(*pBuf++);        //写数据到缓冲区         
                     
        /*CSN拉高,完成*/
        NRF_CSN_HIGH();                          
          return (status);        //返回NRF24L01的状态                 
}
uint8 SPI_NRF_ReadBuf(uint8 reg,uint8 *pBuf,uint8 bytes)
{
         uint8 status, byte_cnt;
          NRF_CE_LOW();
          delayms(0xff);
        /*置低CSN,使能SPI传输*/
        NRF_CSN_LOW();
        delayms(0xff);               
        /*发送寄存器号*/               
        status = SPI_NRF_RW(reg);
         /*读取缓冲区数据*/
         for(byte_cnt=0;byte_cnt<bytes;byte_cnt++)                  
           pBuf[byte_cnt] = SPI_NRF_RW(NOP); //从NRF24L01读取数据  

         /*CSN拉高,完成*/
        NRF_CSN_HIGH();                        
         return status;                //返回寄存器状态值
}
/*
* 函数名:SPI_NRF_RW
* 描述  :用于向NRF读/写一字节数据
* 输入  :写入的数据
* 输出  :读取得的数据
* 调用  :内部调用
*/
uint8 SPI_NRF_RW(uint8 dat)
{         
   /* 通过 QSPI发送一字节数据 */
     qspi_sendbyte(1,dat);               

  /* 通过 QSPI接收一字节数据 */
    return qspi_receivebyte(1);
}
然后我在主函数里用串口把NRF_Check();函数的返回值发到电脑上,但总是返回0;(PS:我在主函数的开头已将QSPI初始化的函数,和相应IO口初始化的函数执行过了)
回复

使用道具 举报

6

主题

54

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
489
威望
266
贡献
127
兑换币
130
注册时间
2013-11-18
在线时间
48 小时
毕业学校
长春理工大学
3#
 楼主| 发表于 2014-2-27 15:09:05 | 只看该作者
怎么没人帮我
回复

使用道具 举报

6

主题

54

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
489
威望
266
贡献
127
兑换币
130
注册时间
2013-11-18
在线时间
48 小时
毕业学校
长春理工大学
4#
 楼主| 发表于 2014-2-27 17:01:06 | 只看该作者
还是没人帮
回复

使用道具 举报

6

主题

54

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
489
威望
266
贡献
127
兑换币
130
注册时间
2013-11-18
在线时间
48 小时
毕业学校
长春理工大学
5#
 楼主| 发表于 2014-2-28 09:55:19 | 只看该作者
怎么还是没人回应呢:Q
回复

使用道具 举报

6

主题

54

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
489
威望
266
贡献
127
兑换币
130
注册时间
2013-11-18
在线时间
48 小时
毕业学校
长春理工大学
6#
 楼主| 发表于 2014-2-28 17:09:25 | 只看该作者
还是没人回应
回复

使用道具 举报

6

主题

54

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
489
威望
266
贡献
127
兑换币
130
注册时间
2013-11-18
在线时间
48 小时
毕业学校
长春理工大学
7#
 楼主| 发表于 2014-3-3 22:09:28 | 只看该作者
:(
回复

使用道具 举报

0

主题

8

帖子

0

精华

高级会员

Rank: 4

积分
632
威望
331
贡献
179
兑换币
181
注册时间
2013-12-28
在线时间
61 小时
毕业学校
南华大学
8#
发表于 2014-4-6 17:36:55 | 只看该作者
你的QSPI能正确发送和接收数据吗?
回复

使用道具 举报

6

主题

54

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
489
威望
266
贡献
127
兑换币
130
注册时间
2013-11-18
在线时间
48 小时
毕业学校
长春理工大学
9#
 楼主| 发表于 2014-4-8 22:36:30 | 只看该作者
Mr、C 发表于 2014-4-6 17:36
你的QSPI能正确发送和接收数据吗?

现在可以了,用的NRF24L01无线模块

回复

使用道具 举报

0

主题

8

帖子

0

精华

高级会员

Rank: 4

积分
632
威望
331
贡献
179
兑换币
181
注册时间
2013-12-28
在线时间
61 小时
毕业学校
南华大学
10#
发表于 2014-4-9 10:54:54 | 只看该作者
守候一米阳光 发表于 2014-4-8 22:36
现在可以了,用的NRF24L01无线模块

可以加个QQ讨论一下么?我说的QSPI写了两个多星期都没写出来
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-6 10:46 , Processed in 0.097509 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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