首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > WinCE >

关于2440 spi的一些疑问!该怎么处理

2012-02-19 
关于2440 spi的一些疑问!!!!这两天搞2440的SPI驱动,感觉有很多疑问,请大家帮忙解答!!!我现在2440的SPI1采

关于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的工作方式呢?

[解决办法]
我的疑问有三点:
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)
谁做主机谁提供时钟
[解决办法]

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

热点排行