打印
[AVR单片机]

avr atmega64 SPI主从机通讯问题

[复制链接]
2789|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fish_zou|  楼主 | 2013-2-27 17:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
哪位大侠指点一下,我用2块板子进行SPI通信,主机发送数据给从机,而从机好像并没有收到数据,程序如下:
从机:
void Slaver_Init()
{
        DDRB |= ((~(1<<PB0))|(~(1<<PB1))|(~(1<<PB2))|(1<<PB3)); //PB2:MOSI输入 PB3:MISO输出 SS输入
        SPCR = (1<<SPIE)|(1<<SPE)|(~(1<<MSTR))|(1<<SPR0);
        SPSR = 0x0;
}

char SPI_SlaveReceive(void)
{
        SPDR = 0x0;
        /* 等待接收结束 */
        while(!(SPSR & (1<<SPIF)));

        /* 返回数据 */
        return SPDR;
}

SIGNAL(SIG_SPI) //SPI中断函数 SPI_STC_vect  SIG_SPI
{
        buzzering(200, 4000);
        rdata = SPI_SlaveReceive();
}

volatile static char rdata = 0;

int main()
{
      Slaver_Init();
       while(1)
      {
          if (rdata != 0)
         {
        //重新恢复主机SPI模式,进行LCD显示数据
        cli();
        lcd_init();
                sei();
                       
        lcd_show_a_num8x16(2, 2, 7);
        lcd_show_a_num8x16(4, 2, rdata);
        rdata = 0;
        _delay_ms(1000);
        cli();
        Slaver_Init();
        sei();
           } else{
        continue;
          }
    }
}

主机:
void Master_Init()
{
        DDRB |= ((1<<PB0)|(1<<PB1)|~((1<<PB3))|(1<<PB2)|(1<<PB4)|(1<<PB5));  //PB2 MOSI 输出
        /* 使能SPI 主机模式,设置时钟速率为fck/16 */
        SPCR = (1<<SPIE)|(1<<SPE)|(1<<MSTR)|(1<<SPR0);
        SPSR = 0x0;
}

void SPI_MasterTransmit(char cData)
{
        /* 启动数据传输 */
        SPDR = cData;
        /* 等待传输结束 */
        while(!(SPSR & (1<<SPIF)));
}

void Transmit(char cData)
{
        Load_Low;
        SPI_MasterTransmit(cData);
        Load_High;
}

int main()
{
    Master_Init();
    keyFlag = 0;
    while(1)
    {
        keyFlag = key_scan();//扫描按键
     if(keyFlag)
       {
        keyFlag = 0;
        Transmit(2);
       } else {
          continue;
       }
    }
    return 0;
}

主要SPI程序如上,希望大虾帮忙看下

相关帖子

沙发
fish_zou|  楼主 | 2013-2-27 17:07 | 只看该作者
PB0--SS
PB1--SCK
PB2--MOSI
PB3--MISO
对应引脚如上

使用特权

评论回复
板凳
fish_zou|  楼主 | 2013-2-28 10:00 | 只看该作者
没有人帮我么?求指点呀

使用特权

评论回复
地板
airwill| | 2013-3-5 12:52 | 只看该作者
1. 是不是同一种芯片, 不同的芯片, SPI 的引脚是不同的.
2. 检查主从芯片的 SPI 同名脚是否可靠连接.
3. SPI 从机接收, 需要外部置低 SS 引脚. 请实际确认一下.

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
qin552011373 + 2 很给力!
5
fish_zou|  楼主 | 2013-3-8 15:25 | 只看该作者
airwill 发表于 2013-3-5 12:52
1. 是不是同一种芯片, 不同的芯片, SPI 的引脚是不同的.
2. 检查主从芯片的 SPI 同名脚是否可靠连接.
3. SP ...

谢谢版主。 是同一款芯片。已经有接收到数据了,具体是什么问题导致的,我也不确定,调着调着就出来了。 但是现在的问题是,从机收到数据之后,切换成主机模式LCD显示该数据,再切换成从机模式接收时,就收不到数据了。 主从切换之间需要注意些什么吗?

使用特权

评论回复
6
fish_zou|  楼主 | 2013-3-11 16:24 | 只看该作者
问题已解决。还是电路问题,SPI切换时候,引脚的配置有影响

使用特权

评论回复
7
qin552011373| | 2013-3-11 21:43 | 只看该作者
fish_zou 发表于 2013-3-11 16:24
问题已解决。还是电路问题,SPI切换时候,引脚的配置有影响

解决就好  欢迎常来

使用特权

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

本版积分规则

1

主题

5

帖子

0

粉丝