打印

请教2410 SPI问题

[复制链接]
2372|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lolly33|  楼主 | 2010-1-17 20:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 lolly33 于 2010-1-17 21:00 编辑

2410的SPI程序非得是在LINUX或者WINCE下么?不带系统不行么?我是初学者,还玩不转系统,只是照着书的寄存器设定之类的参考资料写的。但是结果就是SPI的输入输出口子上都没有数据。不明白是不是自己哪里出错,麻烦帮我看看程序好么?
PS:哪里可以找到SPI的TEST程序?能给发一个,或者给个下载地址么?我的邮箱lolly_macro@yahoo.com.cn
------------------
#include  "config.h"
void  DelayNS(uint32  dly)
{  
uint32  i;
    for(; dly>0; dly--)
       for(i=0; i<50000; i++);
}

int num1;
char rec_data[128];
void spi_init()
{
rSPPRE1=24;
rSPCON1=0x02;  
rSPPIN1=0x03;  
rGPGCON = rGPGCON & ~0xFCF3 | 0xFCF1;
rGPGDAT = rGPGCON & ~1;  //使GPG0输出0
}
int  main(void)
{  
int  j;
spi_init();
num1=0;
for(;num1<128;)
{
  while(rSPSTA1&1==0);  
  rec_data[num1] = rSPRDAT1;
  num1++;
}
  
for(j=0;j<500;j++)
{
rSPTDAT1= 1;
DelayNS(2);
//rSPTDAT1= 0;
//DelayNS(2);
}
#define rSPTDAT1   (*(volatile unsigned *)0x59000030)  //SPI1 Tx data
#define rSPRDAT1   (*(volatile unsigned *)0x59000034)  //SPI1 Rx data
}

相关帖子

沙发
David_ming| | 2010-1-17 21:05 | 只看该作者
不带系统肯定可以呀,系统的API就是也是要配置的

使用特权

评论回复
板凳
lolly33|  楼主 | 2010-1-17 21:24 | 只看该作者
2# David_ming
要对哪些进行配置??
不是这段里对寄存器的配置么?
rSPPRE1=24;
rSPCON1=0x02;  
rSPPIN1=0x03;  
rGPGCON = rGPGCON & ~0xFCF3 | 0xFCF1;
rGPGDAT = rGPGCON & ~1;  //使GPG0输出0

使用特权

评论回复
地板
armfan| | 2010-1-17 21:30 | 只看该作者
手册上有写的,初学者应该培养独自解决问题的能力,一个曾经初学者飘过。

使用特权

评论回复
5
lolly33|  楼主 | 2010-1-17 21:41 | 只看该作者
4# armfan
这位大人啊,不是偶要偷懒啊,而是我快整崩溃了,初学者者的迷茫大人也是经历过的吧,小的我学习能力太低了,有高手点拨一下更有效率不是?

使用特权

评论回复
6
lolly33|  楼主 | 2010-1-18 23:08 | 只看该作者
关于DATASHEET上SPI状态寄存器bit[2]的一个说明看不太明白。
-------------
中文翻译的手册上说:
如果当传输在过程中且通过读SPSTAn清除,写SPTDAT或读SPRDATn,则该标志置位。
0 不检测,1 冲突错误检测
-----------
英文原文为:
This flag is set if the SPTDATn is written or the SPRDATn is read while a transfer is in progress and cleared by reading the SPSTAn.
0 = not detect,                 1 = collision error detect
----------
中文的读起来怎么感觉很别扭呢。
不知道我这样理解对不对——当数据传输过程中SPTDAT写或者SPRDAT读时,此位为1,即数据冲突,此时数据传输将中断。(那个cleared到底是SPTDAT flag被清除还是transfer被清除?)

使用特权

评论回复
7
lolly33|  楼主 | 2010-1-18 23:09 | 只看该作者
本帖最后由 lolly33 于 2010-1-20 11:55 编辑

后来想明白了,这个位是不停置0,已检测是否有数据传输,有传输则为1,下次再查询状态时又先被置0再查询,直到传输结束0不再变1.

使用特权

评论回复
8
lolly33|  楼主 | 2010-1-18 23:10 | 只看该作者
本帖最后由 lolly33 于 2010-1-20 11:55 编辑

不过为什么会叫冲突错误检测呢?

使用特权

评论回复
9
lolly33|  楼主 | 2010-1-18 23:17 | 只看该作者
本帖最后由 lolly33 于 2010-1-20 11:58 编辑

数据传输时,SPI状态寄存器bit[0]READY信号是不是每隔8个时钟自动由0到1?

使用特权

评论回复
10
lolly33|  楼主 | 2010-1-18 23:17 | 只看该作者
本帖最后由 lolly33 于 2010-1-20 12:02 编辑

如果照前面的bit2的理解,它和bit0又有什么区别?
以发送2个数据为例,发完第一个数据是哪一位变1?发完2个呢?
[因为自己的SPI程序发不出数据,正在查程序设置是不是哪里出错。所以,没办法检验,哪位大侠告诉偶一声]

使用特权

评论回复
11
megaf| | 2010-2-21 11:16 | 只看该作者
楼主,现在问题解决了没,能发数据没

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

11

帖子

1

粉丝