7070|17

65

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于2440 spi的一些疑问!!!! [复制链接]

这两天搞2440的SPI驱动,感觉有很多疑问,请大家帮忙解答!!!
我现在2440的SPI1采用从模式,单片机通过模拟SPI接口与其通信。当2440要发送数据的时候,就给单片机一个外部中断脉冲,而当单片机要发送数据的时候会去检测2440的一个I/O 口是不是拉高(也就是说虽然单片机是主模式,但是2440具有数据传输的控制权)。
我的2440 SPI1 的配置如下:       
///interrupt mode,disable sck,slave,active low,formatB,normal mode
g_pCHPSPIregs->SPCON1 = (0x1<<5)|(0x0<<4)|(0x0<<3)|(0x1<<2)|(0x1<<1)|(0x0<<0);


现在的情况是,2440发送4个字节的数据给单片机,每发送一个字节给一个中断脉冲,在往SPITDAT1写数据之前判断是否有写冲突,是否ready!结果发第一个字节的时候没问题,发第二字节之前检测发现写冲突标志置位,第三和第四个字节之前又没有写冲突。
if(g_pCHPSPIregs->SPSTA1 & 0x4) RETAILMSG(1, (TEXT("MULTI MASTER COLLISON!!!")));
while((g_pCHPSPIregs->SPSTA1 & 0x01)==0);// wait while busy
///reverse the byte
       
g_pCHPSPIregs->SPTDAT1 = *pSrc;// write left justified data


我的疑问有三点:
1.写冲突应该是指在SPI的传输过程中,又往SPITDAT1写了数据。这就很奇怪了,单片机那边肯定没有往2440写数据,而且每次写之前都判断了ready位,怎么会出现写冲突,而且只出现一次????
2.2440的手册感觉关于SPI部分写的不是很清楚,SPCONn 的Tx Auto Garbage Data mode enable(TAGD)位为0的时候,要手动发0xff,像我这种和模拟的SPI口通信也要发吗?
3.SPI的ready位Transfer ReadyFlag (REDY)指示SPI的传输或者接收ready,为什么接收和发送用一个位来指示??这样不是很难判断当前到底是接受ready还是发送ready?????
4.2440的SPCONn的SPI Mode Select(SMOD)选择位,手册上的说明是:Determine how SPTDAT is read/written,这就很奇怪了,这位只设置SPTDAT位的工作方式,那SPRDAT的工作方式呢?

最新回复

楼主搞好了么?我最近也在搞2440通讯,但是接受寄存器总是收不到东西。。。  详情 回复 发表于 2010-6-19 23:42
点赞 关注

回复
举报

63

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
大家帮忙看下啊!!!!是不是分部够多啊?了解SPI的来顶下~~~~~~
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
这个东西你看你的手册与实际用的是否一致,然后还得要认真看手册,按你的理解来测试。没有别的办法。
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

4
 
我仔细看了很多遍手册,但是我觉得手册说的确实不是很清楚,可能是我理解有问题,我现在不发数据只收数据,单片机那边发0x00-0x08,但是2440收到的数据都是0XFF,不知道为什么?
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

5
 
g_pCHPSPIregs->SPCON1 的配置是对的。

写数据的时候,先准备好数据,到SPTDAT1中,然后发中断到单片机,单片机执行读操作!
读数据的时候,可以通过判断接收中断标志位了,不用SPI的ready位!
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

6
 
像你这样的做法,需要5条线。IO nss miso mosi clk 你看硬件是不是都连了。
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

7
 
我对那个 REDY位也很疑惑,一个位同时控制接收和发送,会出现紊乱
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

8
 
SPI wifi code reading

hard!
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

9
 
wjf_zjut,现在接收和发送单独都比较正常了,但是有个问题,接收和发送不能同时,接收的时候是判断中断标志位,但是我发现spi的接收和发送时共用一个中断,也就是说发送也会产生spi中断, 这样在接收的处理函数里不知道当前的中断到底是接收产生的还是发送中断。
注:我现在的流驱动是有个线程和事件绑定等待SPI的接收中断, 而另外一个线程是在等待应用程序的命令随时往下面发spi
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用 8 楼 ivyfengwcm 的回复:
wjf_zjut,现在接收和发送单独都比较正常了,但是有个问题,接收和发送不能同时,接收的时候是判断中断标志位,但是我发现spi的接收和发送时共用一个中断,也就是说发送也会产生spi中断, 这样在接收的处理函数里不知道当前的中断到底是接收产生的还是发送中断。
注:我现在的流驱动是有个线程和事件绑定等待SPI的接收中断, 而另外一个线程是在等待应用程序的命令随时往下面发spi


看看采用共享中断的办法,GIISR 能否解决你的问题。

我搞了几天wifi SPI的无果。因为别的事情好几天不弄了。
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

11
 
帮你顶
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

12
 
接收和发送都是用一个中断实现的,你如果是想只是接收用中断的话,你设为从机方式可以吧,只是接收数据寄存器的值,不把发送的值给放入。
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

13
 
我的疑问有三点:
1.写冲突应该是指在想SPI数据发送,发现SPI发送数据寄存器中有数据,还没有发送完成。
一般while((v_pSPIPregs->rSPSTA0 &0x01)==0);等待



2.2440的手册感觉关于SPI部分写的不是很清楚,SPCONn 的Tx Auto Garbage Data mode enable(TAGD)位为0的时候,要手动发0xff,像我这种和模拟的SPI口通信也要发吗?

我在做两个2440 SPI双机通信的时候,如果作为主机,是要写0XFF的

3.SPI的ready位Transfer ReadyFlag (REDY)指示SPI的传输或者接收ready,为什么接收和发送用一个位来指示??这样不是很难判断当前到底是接受ready还是发送ready?????

没有用到这个ready位啊?2440有这个么?

4.2440的SPCONn的SPI Mode Select(SMOD)选择位,手册上的说明是:Determine how SPTDAT is read/written,这就很奇怪了,这位只设置SPTDAT位的工作方式,那SPRDAT的工作方式呢?

SPI Mode Select(SMOD)就是数据传输的工作方式啊,也是SPI的工作方式啊
SPI的主机从机设置是Master/Slave Select (MSTR)
谁做主机谁提供时钟
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

14
 
cfanlwn,
while((v_pSPIPregs->rSPSTA0 &0x01)==0);这不就是判断状态位是否Ready码?
我现在的情况是ARM做从,单片机提供时钟做主,单片机往我这边随时发送消息,我这边也可能接收应用程序的IO CONTROL 往单片机发送数据,由于发送和接收都会产生SPI0中断,我的驱动如何判断当前过来的是接收中断还是发送中断!!!!!
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

15
 
xilangyue,我现在是做从,但是如果不把发送的值给放入的话,我如何单片机发数据?
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

16
 
好久不上,不知道楼主搞定否:我觉得应用上可以把收和发错开,收的时候不发,发的时候不收啊!单片机给你发的时候,通过中断接收。你自己发送的时候先把中断关了。
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

17
 
没搞过SPI,路过参观
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(中级)

18
 
楼主搞好了么?我最近也在搞2440通讯,但是接受寄存器总是收不到东西。。。
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表