智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 20270|回复: 16
打印 上一主题 下一主题

[软件类] spi双机通讯的程序问题

[复制链接]

3

主题

33

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
335
威望
216
贡献
39
兑换币
0
注册时间
2009-9-23
在线时间
40 小时
跳转到指定楼层
1#
发表于 2009-10-18 20:02:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1贡献
本帖最后由 4829543www 于 2009-10-18 20:07 编辑

我写了一个简单的spi双机的通讯程序,下到片子了以后主机能发,从机也有等待,但从机的时钟线一连到主机的时钟线上,从数据寄存器上读的数就是0xff。不知道是为什么,请问大虾们:从机是如何设定的,有什么说头吗?还有spi传两组数据时,中间需要有间隔吗?
(初始化已设定,32分频,dg128b,
SPI0CR1_SPIE = 0;//允许SPI中断
SPI0CR1_SPE = 1;//允许SPI
SPI0CR1_SPTIE = 0;//发送中断允许位,置位为0较好,否则数据发送完成,容易进入中断
SPI0CR1_CPHA = 0;//时钟相位选择位,
SPI0CR1_CPOL = 1;//时钟极性选择位,1为低电平有效,空闲时为高电平.
SPI0CR2_SPISWAI = 1;//1为等待模式下,时钟禁止
)
void main(void)//主机主程序
{
  SPI_Sdata = 0xaa;
  sysInit();//spi初始化
  EnableInterrupts;
  DDRB = 0XFF;
  while(1)
  SPI_Send(SPI_Sdata);//发送一个数据
  for(;;)
  {} /* wait forever */
}

void main(void)//从机主程序
{
  SPI_Sdata = 0xaa;
  sysInit();//spi初始化
  EnableInterrupts;
  DDRB = 0XFF;
  while(1)
  PORTB = SPI_Receive();//显示接收数据
  for(;;)
  {} /* wait forever */
}

////////发送数据函数
void SPI_Send(unsigned char SPI_Sdata)
{  
SPI0DR = SPI_Sdata;写入数据寄存器
while(0 == SPI0SR_SPIF);//数据寄存满后开始发送
}

////////接收数据函数
unsigned char SPI_Receive(void)
{
while( 0 == SPI0SR_SPIF);//等待SPIDR寄存器数据满
return SPI0DR;//读取SPI数据寄存器中的数据
}

最佳答案

查看完整内容

端口要首先初始化,另外带调试器调试时候总是读出的数据是:0xff,这是调试器的问题,调试器要把所有寄存器都要读取,所以,读出spi总是0xff,我开始调的时候就是在端口初始化上折腾了几天

22

主题

518

帖子

0

精华

版主

Rank: 9Rank: 9Rank: 9

积分
6442
QQ
威望
943
贡献
5041
兑换币
99
注册时间
2008-2-26
在线时间
229 小时
2#
发表于 2009-10-18 20:02:33 | 只看该作者
端口要首先初始化,另外带调试器调试时候总是读出的数据是:0xff,这是调试器的问题,调试器要把所有寄存器都要读取,所以,读出spi总是0xff,我开始调的时候就是在端口初始化上折腾了几天
回复

使用道具 举报

4

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
376
威望
253
贡献
35
兑换币
0
注册时间
2009-6-30
在线时间
44 小时
3#
发表于 2009-10-18 20:04:04 | 只看该作者
这个....
回复

使用道具 举报

4

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
376
威望
253
贡献
35
兑换币
0
注册时间
2009-6-30
在线时间
44 小时
4#
发表于 2009-10-18 20:04:07 | 只看该作者
这个....
回复

使用道具 举报

3

主题

33

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
335
威望
216
贡献
39
兑换币
0
注册时间
2009-9-23
在线时间
40 小时
5#
 楼主| 发表于 2009-10-19 16:05:30 | 只看该作者
我是把传出来的数据赋值给led,显示8位所传数据,请问楼上的大侠,您所说的端口初始化指什么啊?
回复

使用道具 举报

10

主题

126

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2604
威望
567
贡献
1795
兑换币
130
注册时间
2009-6-6
在线时间
121 小时
6#
发表于 2009-10-19 18:48:27 | 只看该作者
随便看看
回复

使用道具 举报

22

主题

518

帖子

0

精华

版主

Rank: 9Rank: 9Rank: 9

积分
6442
QQ
威望
943
贡献
5041
兑换币
99
注册时间
2008-2-26
在线时间
229 小时
7#
发表于 2009-10-20 22:42:17 | 只看该作者
5# 4829543www
我是使用的80脚的xs系列的,spi通信时PM口初始化   MODRR_MODRR4=1; //使用PM口
   DDRM|=0x38; //SCK0=1,MOSI=1,SS0=1:这里要吧输出方向定义了
如果是112管脚的话,也要注意管脚方向问题
回复

使用道具 举报

0

主题

42

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
250
QQ
威望
212
贡献
20
兑换币
0
注册时间
2008-12-22
在线时间
9 小时
8#
发表于 2009-11-10 19:13:29 | 只看该作者
jianguo
回复

使用道具 举报

14

主题

161

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1382
QQ
威望
406
贡献
768
兑换币
10
注册时间
2009-9-4
在线时间
104 小时
9#
发表于 2009-11-15 17:20:54 | 只看该作者
学习
回复

使用道具 举报

35

主题

168

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1215
威望
416
贡献
249
兑换币
22
注册时间
2009-9-10
在线时间
275 小时
10#
发表于 2009-11-15 17:36:19 | 只看该作者
通过串口,在pc机上得不到正确的数据,这是为什么啊 请指教



#include <hidef.h>      /* common defines and macros */
#include <MC9S12XS128.h>     /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"



/*************锁相环******************/
void PLL_Init(void){
  //锁相环设置:频率40M
         SYNR=0x49;
         REFDV=0x43;
         while(CRGFLG_LOCK!=1);
         CLKSEL_PLLSEL=1;
}
/***********************************/
void uart_Init(void) {    //40MHZ  波特率9600   8位无校验。
  SCI0CR2=0x0c;
  SCI0BD=0x104;

    SCI0CR2_RIE=0;

}

void uart_sendchar(char *cs) {  //单字符发送函数
  while(SCI0SR1_TDRE==0);
  SCI0DRL=*cs;
}

void uart_sendstring(char *ss){  //字符串发送函数
  while(*ss){
    uart_sendchar(ss);
    ++ss;
  }
}
//***********************************************

void main(void) {
  PLL_Init();
  uart_Init();
  DisableInterrupts;

  uart_sendstring("Hello World!");
   
  for(;;) {} /* wait forever */
  /* please make sure that you never leave this function */
}
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-25 15:16 , Processed in 0.057248 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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