社区导航

 

搜索
查看: 4463|回复: 17
打印 上一主题 下一主题

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

[复制链接]

103

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

跳转到指定楼层
楼主
发表于 2008-12-27 21:22 | 只看该作者 |倒序浏览 |阅读模式
我的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论坛
0

113

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

沙发
发表于 2008-12-27 21:37 | 只看该作者
ding

117

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

板凳
发表于 2008-12-27 23:05 | 只看该作者
检查一下SDI的功能脚配置正确吗?如果都配置正确的话,至少读的时候时钟的波形应该是有的!

101

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

4
发表于 2008-12-27 23:16 | 只看该作者
如果波形都看不到,那先查一下Read的函数被调用到没有
如果被调用到了再查为什么往Data寄存器上写数据没有写出来,是不是SPI别的寄存器配置有问题?
SPI没有几个寄存器可以配置的,应该很快就可搞定这问题的

101

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

5
发表于 2008-12-28 00:38 | 只看该作者
LS正解呀

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

92

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

6
发表于 2008-12-28 08:40 | 只看该作者
记得正确配置SPI的工作模式

94

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

7
发表于 2008-12-28 10:29 | 只看该作者
三星的SPI驱动调试想想都怕。我曾经折腾了一个月

98

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

8
发表于 2008-12-31 15:42 | 只看该作者
mark

112

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

9
发表于 2008-12-31 16:22 | 只看该作者
问题是写成功了吗?单片机有收到数据,并做成回应吗?

92

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

10
发表于 2009-1-4 10:34 | 只看该作者
是的,成功了的,2410做主机,单片机做从机,单片机能收到2410发的数据。
但是2410收不到单片机发的数据

117

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

11
发表于 2009-1-4 13:12 | 只看该作者
用示波器量量看,单片机有没发出来!

114

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

12
发表于 2009-1-4 13:15 | 只看该作者
如果确定ReadFile被调用了,而数据没有发送出去,那我觉得最大可能是SPI配置有问题
你可以做个试验,把Write里的代码放到Read里看能不能Write成功?

124

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

13
发表于 2009-1-4 13:33 | 只看该作者
mark

115

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

14
发表于 2009-1-4 19:14 | 只看该作者
WriteFile能够发送数据,但是把SPI_Write的内容放到SPI_Read里面去,例如ReadFile一次,就发送一个0X01,这样发送是不成功的,发送不了数据,也看不到时钟波形。

129

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

15
发表于 2009-1-4 19:19 | 只看该作者
我的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;
}

108

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

16
发表于 2009-2-24 17:26 | 只看该作者
时钟是主设备产生的,从设备不会产生clock。 你要从单片机上读数据,必须向单片机端发一个dummy数据,来产生clock。Samsung规格书里有写。

101

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

17
发表于 2009-2-24 17:47 | 只看该作者

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

104

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

18
发表于 2009-4-16 13:29 | 只看该作者
我用的是s3c2440 ,还没入门呢

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

关闭

站长推荐上一条 1/4 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( )

GMT+8, 2020-4-5 20:53 , Processed in 0.511808 second(s), 19 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表
飞鸟公众号系统 下载app赠送彩金平台 彩票大赢家 天音彩票网 hg平台送彩金 充值送彩金购彩软件 送彩金信誉娱乐平台 那个娱乐网送彩金 送彩金的彩票平台799彩票 在线送彩金真钱赌博