Mcbsp设置SPI模式数据无法传输

2019-07-17 16:19发布

请大家帮忙看看,DSPF2812的mcbsp设置SPI模式,DSP为主机,从机是AVR ATMEGA128,时钟停止模式,时钟频率分频后是37.5M,这里的SCK是MFSX引脚出来,1.875M。

问题应该是出在AVR里面,仿真时无论是从机接收还是从机发送,程序总是卡在while(!(SPSR&(1<<SPIF)));这里,看资料上的描述,SPIF这一位在数据传输结束后会自动置位,可是程序里一直是0.

AVR从机初始化如下

void SPI_SlaveInit(void)
{
         /* 设置MOSI、SCK CS为输入,MISO为输出
                           CS        SCK  MOSI  MISO
                        PB0 PB1  PB2   PB3
                        I        I       I      O
                        0       0       0     1
        */
        DDRB&=0x00;
        DDRB|=0x08;              
        SPCR |=(1<<SPE)|(1<<CPHA);            //SPI允许,从机模式,高字节在前,工作模式0,4分频
                                                                  //SPIE  SPE  DORD  MSTR  CPOL  CPHA  SPR1  SPR0
                                                                 //0      1        0        0        0     1        0        0   
}
在一些例程里也没有看到将接收器和发送器使能的语句,不知道是不是这个问题。SPE是使能SPI,CHPA是设置发送接收在上升下降沿的。
接收和发送子函数如下
char SPI_SlaveSend(char sdata)
{
          SPDR=sdata;                       //把数据放入SPI数据寄存器,开始发送
          while(!(SPSR&(1<<SPIF)));                        //等待数据传输结束
          return SPDR;                 //接收主机传来的数据
}


char SPI_SlaveReceive(void)
{
        while(!(SPSR&(1<<SPIF)));
        return SPDR;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。