2416的SPI时钟采集数据为什么上不去?
我在2416平台上做一个项目,使用SPI采集脉冲信号,使用windows ce操作系统,在VS2005中编写驱动程序。现在SPI能采集到数据,但是遇到了一些问题,希望有高手指点。
s2416SPI ->CH_CFG |= SPI_MASTER | CPOL_RISING | CPHA_FORMAT_A;
//s2416SPI ->CLK_CFG |= CLKSEL_PCLK | (5<<0) | (1<<8);//PCLK,Baud Rate =4.16M,clk enable
s2416SPI ->CLK_CFG |= CLKSEL_PCLK | (14<<0) | (1<<8);//PCLK,Baud Rate =5M,clk enable 9=2.5M
s2416SPI ->MODE_CFG = MODE_DEFAULT;
这段代码红色部分是设置SPI采集数据的时钟。
while (((s2416SPI ->SPI_STATUS>>13)&0x7f)==FIFO_EMPTY);
pReceiveBuffer[DwReceiveDataNum] = s2416SPI->SPI_RX_DATA;
DwReceiveDataNum++;
这段代码是利用查询的方式,接收来自SPI接收寄存器的值。
DwReceiveDataNum变量记录接收到数据量,并通过串口打印消息打印出来。
现在的问题是,我把s2416SPI ->CLK_CFG |= CLKSEL_PCLK | (14<<0) | (1<<8);//红色部分设置为14,表示SPI采集数据的频率为1.5M,这是通过计算SPI应该采集到2000个左右字节的数据。这是对的(理论值与实际采集到的数据相同)
但是我把这里的频率设置为5M时,即这里的值为4时,采集到的数据还是2000个字节左右,这样理论值就与实际值不相配,少收了6000个字节的数据。
然后我把这里的频率设置为比1.5M低,比如设置为1.25M,即这里的值设置为19,这是采集到的数据为1562,与理论采集到的数据也是相符的。
有没有那位高手做过SPI相关的数据采集工作呢??????有没有遇到过这种情况???不知道是SPI的性能关系还是我的程序的问题,还是Windows ce操作系统线程之间的延时导致的呢???