*pSPI_FLG &= ~FLG2; //将SPISEL2拉到0
while(!(*pSPI_STAT& SPIF));//查看SPI传输状态是否完成
*pSPI_TDBR =0x55; //将数据送入SPI传输数据寄存器
*pSPI_FLG |=FLG2; //将SPISEL2拉到1,完成数据传输
我想请问的问题是,在写数据时为什么要将SPISEL2拉到0*pSPI_FLG &= ~FLG2; //将SPISEL2拉到0,完成数据传输在将SPISEL2拉到1
blackfin上SPI片选有两种控制方式,一种是自动控制方式,就是在发送数据时,片选会每一个字节自动拉低。还有一种是手动控制方式,即每次发送数据前,将片选拉低,等整个数据发送完成后,再拉高,这种控制方式应用比较多,因为有一些命令是需要在命令完成前,始终啊保持SPI片选为低的,这样自动片选的每一个字节拉高拉低一次显然就不符合要求。
代码中*pSPI_FLG &= ~FLG2; 是控制SPISEL2片选的,在硬件上即为PF2接口。在发送数据前通过配置*pSPI_FLG &= ~FLG2; 将其拉到0,表示使能相连接的SPI设备。发送完数据后拉高,表示释放SPI设备的使能。具体可以看一下连接SPI设备的时序图。所有SPI时序配置都要符合要操作的SPI设备的时序。