现在的情况是,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的工作方式呢?