2416的SPI时钟采集数据为什么上不去?

zw20105 2011-01-27 02:15:38
我在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操作系统线程之间的延时导致的呢???
...全文
81 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
91program 2011-01-31
  • 打赏
  • 举报
回复
丢数据,说明性能可能是无法达到LZ的要求,系统性能/驱动/应用都有可能引起这个问题

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧