5877|17

71

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于WINCE的SPI的流驱动的读数据的问题,很奇怪,我能发数据,但是读不了数据 [复制链接]

我的SPI驱动程序里面的读写函数,并且我设置为POLLING模式和中断模式都试过
DWORD SPI_Read(DWORD Handle, LPVOID pBuffer, DWORD dwNumBytes)
{

PUCHAR readtemp=(PUCHAR)pBuffer;

while( (v_pSSPregs->rSPSTA0 & 0x01) != 1 );
v_pSSPregs->rSPTDAT0=0xff;  //发送0XFF数据,单片机接受到0XFF后,就发送消息;
while( (v_pSSPregs->rSPSTA0 & 0x01) != 1 );

        *readtemp=v_pSSPregs->rSPRDAT0; //此时接收到的数据,应该是上一个0XFF发给单片机后,单片机往它的SPI发送寄存器打入的数据
return 1;
}


DWORD SPI_Write(DWORD Handle, LPCVOID pBuffer, DWORD dwNumBytes)
{

  PUCHAR writetemp = (PUCHAR)pBuffer;

  while( (v_pSSPregs->rSPSTA0 & 0x01) != 1 );
  v_pSSPregs->rSPTDAT0 = *writetemp;
  while( (v_pSSPregs->rSPSTA0 & 0x01) != 1 );

return 1;
}

以下为我在EVC的API函数,测试驱动的
hDrv=CreateFile(L"SPI1:",GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0);//打开API

char datavalue[10]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};  //写API,循环发送0--9
    int ret,datacount;
    ret=WriteFile(hDrv,datavalue+datacount,1,&dwWritten,NULL);
    datacount=datacount+1;
    if(datacount==10)
  {
datacount=0;
  }


char datavalue1;  读API
ReadFile(hDrv,&datavalue1,1,&dwread,NULL);


现在出现一个问题是:

我的ARM是2410,2410的SPI和一个单片机的SPI口连接
我现在遇到的问题是,将驱动程序烧进WINCE内核,然后用EVC写了个程序来运行,先打开API,然后写API函数时候,SPI能把数据发给单片机。但是读API函数就不行了,读不到任值。

写API的时候,在时钟线上用示波器可以看到时钟,但是读API的时候,在时钟线上用示波器看不到时钟(按道理说应该能看到的,应为我读API的时候,其实在驱动程序的SPI_Read函数里面,其实是先发送了一个0XFF出去的),我觉得很奇怪,但是我自己也找不到什么原因

请高手指教
此帖出自WindowsCE论坛

最新回复

XY
我用的是s3c2440 ,还没入门呢  详情 回复 发表于 2009-4-16 13:29
点赞 关注
 

回复
举报

77

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
ding
此帖出自WindowsCE论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
检查一下SDI的功能脚配置正确吗?如果都配置正确的话,至少读的时候时钟的波形应该是有的!
此帖出自WindowsCE论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

4
 
如果波形都看不到,那先查一下Read的函数被调用到没有
如果被调用到了再查为什么往Data寄存器上写数据没有写出来,是不是SPI别的寄存器配置有问题?
SPI没有几个寄存器可以配置的,应该很快就可搞定这问题的
此帖出自WindowsCE论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

5
 
LS正解呀

看不到波形的话,那就先确定驱动的Read函数是不是被系统调用了,
如果调用了的话,再确认相关的寄存器设置是否正确
此帖出自WindowsCE论坛
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

6
 
记得正确配置SPI的工作模式
此帖出自WindowsCE论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

7
 
三星的SPI驱动调试想想都怕。我曾经折腾了一个月
此帖出自WindowsCE论坛
 
 
 

回复

57

帖子

0

TA的资源

一粒金砂(初级)

8
 
mark
此帖出自WindowsCE论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

9
 
问题是写成功了吗?单片机有收到数据,并做成回应吗?
此帖出自WindowsCE论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

10
 
是的,成功了的,2410做主机,单片机做从机,单片机能收到2410发的数据。
但是2410收不到单片机发的数据
此帖出自WindowsCE论坛
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

11
 
用示波器量量看,单片机有没发出来!
此帖出自WindowsCE论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

12
 
如果确定ReadFile被调用了,而数据没有发送出去,那我觉得最大可能是SPI配置有问题
你可以做个试验,把Write里的代码放到Read里看能不能Write成功?
此帖出自WindowsCE论坛
 
 
 

回复

90

帖子

0

TA的资源

一粒金砂(初级)

13
 
mark
此帖出自WindowsCE论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

14
 
WriteFile能够发送数据,但是把SPI_Write的内容放到SPI_Read里面去,例如ReadFile一次,就发送一个0X01,这样发送是不成功的,发送不了数据,也看不到时钟波形。
此帖出自WindowsCE论坛
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(中级)

15
 
我的SPI的设置如下
SPI_Init(DWORD dwContext)
{
   unsigned int pclk = S2410PCLK;
   v_pIOPregs->rGPECON &= 0xfabfffff;
   v_pIOPregs->rGPECON |= 0xa800000;
   v_pIOPregs->rGPEUP|=0x3800;
   v_pSSPregs->rSPPRE0 = 10;
   v_pSSPregs->rSPCON0 = 0x3a
   v_pSSPregs->rSPPIN0=0x02;
}
此帖出自WindowsCE论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

16
 
时钟是主设备产生的,从设备不会产生clock。 你要从单片机上读数据,必须向单片机端发一个dummy数据,来产生clock。Samsung规格书里有写。
此帖出自WindowsCE论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

17
 

是不是跟我上次一样,查到最后原来是SPI的读管脚有问题,最后更换了核心板就好了
此帖出自WindowsCE论坛
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

18
 
我用的是s3c2440 ,还没入门呢
此帖出自WindowsCE论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表