智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2832|回复: 3
打印 上一主题 下一主题

[单片机] 问个spi的问题..

[复制链接]

0

主题

9

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
389
威望
270
贡献
79
兑换币
58
注册时间
2008-10-8
在线时间
20 小时
跳转到指定楼层
1#
发表于 2009-4-22 19:43:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1贡献
向SPIDR写入0xff之后(调试可看到SPIDR中的数值变为255),SPTEF依然是1,说数据寄存器还是空的.
这是怎么回事?

void SPI_Init(void) //spi初始化
{
//  DDRT = 0xff;
  MODRR   = 0x00;  
  SPI0CR2 = 0x10;
  SPI0CR1 = 0x5e;   
  SPI0BR  = 0x42; //BR=busclk/((SPPR + 1)· 2^(SPR + 1))=16000/(5*8)=400k                 
}

//SPI写一个字节
void SPI_Write_Byte(unsigned char val)
{
while(SPI0SR_SPTEF) //发送器空时该标志为1;
   {
    SPI0DR=val;
   }
}

0

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
243
威望
187
贡献
22
兑换币
0
注册时间
2009-3-5
在线时间
17 小时
2#
发表于 2009-4-29 22:22:25 | 只看该作者
我现在也在做SPI,但是数据寄存器的值一直读不到,不知道是什么原因~~~~
回复

使用道具 举报

0

主题

18

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
236
威望
200
贡献
22
兑换币
0
注册时间
2009-3-4
在线时间
7 小时
3#
发表于 2009-5-5 16:20:16 | 只看该作者
2# songfangfang
SPI 的状态寄存器初始化中你也没有设置。还有当SPI_SPTEF=0的时候,你就跳过去了,没有等待,那时也可能是传输速度太慢,导致寄存器中还有数,你就写不了了。试着等待一下,等他为空的时候再往里写。
回复

使用道具 举报

3

主题

12

帖子

0

精华

注册会员

Rank: 2

积分
45
威望
31
贡献
14
兑换币
13
注册时间
2013-3-15
在线时间
0 小时
毕业学校
东南大学
4#
发表于 2013-4-16 15:49:14 | 只看该作者
并未清零SPTEF位,因为该标志位是通过读SPISR状态寄存器来清零的
回复

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-28 08:42 , Processed in 0.057961 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表