主题 : Micro2440下spi1口在ucos下的使用(分享自己的教训) 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 58767
精华: 0
发帖: 10
金钱: 50 两
威望: 10 点
贡献值: 0 点
综合积分: 20 分
注册时间: 2011-11-13
最后登录: 2013-05-10
楼主  发表于: 2012-04-27 20:07

 Micro2440下spi1口在ucos下的使用(分享自己的教训)

管理提醒: 本帖被 qq2440 从 micro2440技术交流专区 移动到本区(2013-11-18)
Micro2440底板上con8上是spi1的引脚,其中spi0的引脚不知道在哪,似乎没引出。
在网上找了TQ2440的spi.c驱动,修改后,短接spi1的数据输出输入线,可以实现读取数据。然而跟传感器通信后,却无法成功。

后来用示波器看了下时序,发现数据线数据发送正常,而SCLK时钟线却没有时钟,但是我看了很多遍spi1的寄存器配置,跟S3C2440手册对照,就是没发现问题。

最后搞明白了,竟然是因为SPI_Port_Init(1)函数里面,GPGIO口的配置问题,原来有句代码是:
rGPGCON=(rGPGCON&0xffff033f)|(3<<6)|(3<<10)|(3<<12)|(1<<14);
参考S3C2440的数据手册,正确配置应该是:
rGPGCON=(rGPGCON&0xffff033f)|(3<<6)|(3<<10)|(3<<12)|3<<14);

哎,其中3<<14,就是将端口G的引脚配置寄存器GPGCON [15:14]位配置成11,开启SCLK功能。

另外,片选信号需要自己写代码实现,我的外部传感器,每通信一次,必须把片选信号开关一次才能使用。

附spi1寄存器的配置:
    rSPPRE1=0x3;    //if PCLK=50Mhz,SPICLK=25/4Mhz
    rSPCON1=(0<<6)|(0<<5)|(1<<4)|(1<<3)|(1<<2)|(1<<1)|(1<<0);//Polling,en-SCK,master,low,A,normal
    rSPPIN1=(0<<2)|(1<<1)|(0<<0);//dis-ENMUL,SBO,release
[ 此帖被afche在2012-04-27 22:06重新编辑 ]