您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> BF518的SPI1设置问题
本帖共有715个阅读者
发表帖子 发表投票 回复主题
BF518的SPI1设置问题
hb923(论坛新手)
hb923
头衔:社区公民
帮派:无帮无派
帖数:9
金钱:170
积分:12
注册时间:2013/4/1
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
BF518的SPI1设置问题

问题:采用SPI1,CS采用SPI1_SSEL2,发现:CS控制出错,SPI1_FLG寄存器经常由FF04变更成0004,高8位没更改的情况下被改动了。发现:MOSI发送数据OK,SPI1设备能收到数据,但是MISO无效,该管教对应SCK的时候有凸起,但是电压幅度在1V以下,,判断得数SPI1_RBDR=0.

备注:该SPI设备:输入输出同时进行,在SCK脉冲到来时,数据在CLK脉冲低电平期间采样,同时输出键盘数据,SPI应设置在CLK的上升沿采样MISO数据。

疑问:就算MISO采样点不对,波形怎么会没有高低变化?看不到波形啊。

程序如下:Set_PLL(16,4);

Init_EBIU();

Init_Bc7277_Ports();
SPI0_init();

while(1)
          {
            keydata=Bc7277_SPI0_rw(0x1d,0x00);
            keydata=Bc7277_SPI0_rw(0x1d,0xFF);}

void Init_Bc7277_Ports(void)
{
  *pPORTF_FER                   |=PF0;
*pPORTF_MUX                   =0x0002;      

*pPORTH_FER                   |=PH0|PH1|PH2|PH3;      

*pPORTH_MUX                   =0x0001;//0x3fff;
}

void SPI0_init(void)
{
*pSPI1_BAUD=0x0320;                     //配置速率为<64k

*pSPI1_FLG |=FLS2;    //选择SPI0SEL2接口
*pSPI1_CTL = 0x1001|CPHA| CPOL;  //|EMISO|GM;  //配置模式为手动片选模式
*pSPI1_CTL = (*pSPI1_CTL | SPE);   //使能SPI1接口
}

unsigned int Bc7277_SPI0_rw(unsigned char address,unsigned char data)                        

{          
          unsigned int read_bc7277_buf;
unsigned int  i,j;
*pSPI1_FLG &=~FLS2;                                
delay(0x0320);
          while(!(*pSPI1_STAT&SPIF));              //查看SPI传输状态是否完成          
          *pSPI1_TDBR         =address;                 //将数据传入SPI传输数据寄存器0X55          
          *pSPI1_FLG          |=FLS2;             //-----------?在ADS7843.C中不用
          while(*pSPI1_STAT & RXS)                 //查看SPI传输状态是否有数据需要接受
          j                   =*pSPI1_RDBR;        //读取数据          
          *pSPI1_FLG           |=FLS2;             //将SPI0SEL2拉到1,完成数据传输.-----------?在ADS7843.C中不用
          
          *pSPI1_FLG &=~FLS2;                      //将SPI0SEL2拉到0-----------?在ADS7843.C中不用          
          while(!(*pSPI1_STAT&SPIF));              //查看SPI传输状态是否完成          
          *pSPI1_TDBR         =data;                 //将数据传入SPI传输数据寄存器0X55          
          *pSPI1_FLG          |=FLS2;             //-----------?在ADS7843.C中不用
          *pSPI1_FLG          &=FLS2;             //将SPI0SEL2拉到0-----------?在ADS7843.C中不用
          while(*pSPI1_STAT & RXS)                 //查看SPI传输状态是否有数据需要接受
          j                   =*pSPI1_RDBR;        //读取数据          
          *pSPI1_FLG           |=FLS2;            

          read_bc7277_buf     =j;                 //格式转换=>read_bc7277_buf=(unsigned char) j;
          return(read_bc7277_buf);
}    



做有音效的鼓击器。
等级:论坛新手 参考IP地址:*.*.*.*
2013/4/8 16:53:11
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
*pSPI1_FLG          |=FLS2;
片选用FLG,不应用FLS。



这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2013/4/9 9:39:07
hb923(论坛新手)
hb923
头衔:社区公民
帮派:无帮无派
帖数:9
金钱:170
积分:12
注册时间:2013/4/1
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

用FLG可行,唯一的缺点是看SPI1寄存器的时候,当*pSPI1_FLG &=~FLG2;时,SPI1_FLG=0X0400,当*pSPI1_FLG          |=FLG2;时,SPI1_FLG=0XFFFF;不过功能也可以用。。另外我在第一次读数据前添加了*pSPI1_FLG &=~FLG2;,

但是MISO的波形还是不对,他的幅度是0.5V,当SCK为低->高时,产生0.5V的尖峰,之后一直回落。跟随SCK波形。有这种情况发生么?MOSI波形正常,但MISO波形不对的情况?


做有音效的鼓击器。
等级:论坛新手 参考IP地址:*.*.*.*
2013/4/9 10:50:25
hb923(论坛新手)
hb923
头衔:社区公民
帮派:无帮无派
帖数:9
金钱:170
积分:12
注册时间:2013/4/1
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

我采用的是PF0口做SPI1_SSEL2做片选。

结果:SPI1_FLG |=FLG2;寄存器SPI1_FLG=0XFFFF;

结果:SPI1_FLG&=~FLG2;寄存器SPI1_FLG=0X0400;

这2个都脱离我的预期,唯一安慰的是:MOSI可以正常传送数据到设备,但是设备的CS脚没受控制,直接一路低电平。

我又采用PF0口做普通IO口输出

结果:单步运行和我预期一样,但是全速的时候,8位SCK就产生CS=1了。造成的后果是后8位SCK无法传输到设备。这样的结果是数据无法正常发送。

我是把SPI1做8位数据发送,第一次发送8位地址,同时接受8位按键高,第二次发送8位数据,同时接受8位按键低。

求救啊。。困在这里几天了。。


做有音效的鼓击器。
等级:论坛新手 参考IP地址:*.*.*.*
2013/4/9 15:47:20
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
MISO电压低,可能是驱动能力不足造成,在SPI1接口上,挂了音频芯片和触摸屏芯片。
为避免其他模块影响,建议你改用SPI0接口,采用PF7作为SPI0的器件选择脚。将SW5和SW6开关全部拨到OFF,将液晶屏拆下。
另外必要的话,在MISO接口上增加上拉电阻,以增大驱动能力。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2013/4/10 13:12:20
hb923(论坛新手)
hb923
头衔:社区公民
帮派:无帮无派
帖数:9
金钱:170
积分:12
注册时间:2013/4/1
5信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

解决,封贴!

由于外设是open drive的MISO,所以需要外接上拉,接了上拉,就正常了。。

感谢andy


做有音效的鼓击器。
等级:论坛新手 参考IP地址:*.*.*.*
2013/4/12 11:04:13
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.159276 Call, 1 Queries, Processed in 0.015625 second(s),