智能车制作

标题: K60 SPI模块有调出来的吗 [打印本页]

作者: 天地亁堃    时间: 2012-10-21 20:35
标题: K60 SPI模块有调出来的吗
SPI0主机,SPI1从机,发送的波形没有错误,从机SPI1_POPR总是没有数据。求高人指点。
uint8 SPI1_init(uint8 mstr,uint8 pcsis,uint8 frame, uint8 mbps)
{
   
  
    //使能时钟,引脚
    SIM_SCGC6|=SIM_SCGC6_SPI1_MASK;
    PORTE_PCR0=PORT_PCR_MUX(2);
    PORTE_PCR1=PORT_PCR_MUX(2);
    PORTE_PCR2=PORT_PCR_MUX(2);
    PORTE_PCR3=PORT_PCR_MUX(2);
    //设置SPI
    if(mstr)
      SPI1_MCR|=SPI_MCR_MSTR_MASK;
    else
      SPI1_MCR&=~SPI_MCR_MSTR_MASK;
    SPI1_MCR |=SPI_MCR_PCSIS(pcsis);
    SPI1_MCR &=~SPI_MCR_MDIS_MASK;
    SPI1_MCR |=SPI_MCR_CLR_TXF_MASK;
    SPI1_MCR |=SPI_MCR_CLR_RXF_MASK;
    if(mstr)
    {
     SPI1_CTAR0|=SPI_CTAR_FMSZ(frame-1);
     SPI1_CTAR0&=~SPI_CTAR_CPOL_MASK;
     SPI1_CTAR0&=~SPI_CTAR_CPHA_MASK;
     SPI1_CTAR0&=~SPI_CTAR_LSBFE_MASK;
    }
    else
    {
     SPI1_CTAR0_SLAVE|=SPI_CTAR_FMSZ(frame-1);
     SPI1_CTAR0_SLAVE&=~SPI_CTAR_CPOL_MASK;
     SPI1_CTAR0_SLAVE&=~SPI_CTAR_CPHA_MASK;
    }
   
    //频率设定
    if(mstr)
    {
    uint8 i,j;
    uint8 temp=periph_clk_khz/1000/mbps;
    if(temp>50)
    {  
      return 0;
    }
    else if(temp>=32)
    {
      if(temp>48){i=4;j=1;}
      else if(temp>42){i=2;j=3;}
      else if(temp>40){i=3;j=2;}
      else {i=4;j=0;}
    }
    else if(temp>=16)
    {
      if(temp>30){i=2;j=2;}
      else if(temp>28){i=1;j=3;}
      else if(temp>24){i=3;j=1;}
      else if(temp>20){i=1;j=2;}
      else if(temp>18){i=2;j=1;}
      else{i=3;j=0;}
    }
    else if(temp>=6)
    {
      if(temp>14){i=0;j=3;}
      else if(temp>12){i=1;j=1;}
      else if(temp>10){i=0;j=2;}
      else if(temp>8){i=1;j=0;}
      else {i=2;j=0;SPI0_CTAR0|=SPI_CTAR_DBR_MASK;}
    }
    else
    {
      return 0;
    }      
   
    SPI1_CTAR0|=SPI_CTAR_PBR(j);
    SPI1_CTAR0|=SPI_CTAR_BR(i);
   
    }
//  SPI0_CTAR0|=SPI_CTAR_PBR(2);//预分频10M    预分频2n+1
//   SPI0_CTAR0|=SPI_CTAR_BR(2);//最终分频2MHz
   
    SPI1_SR=SPI_SR_EOQF_MASK|SPI_SR_TFUF_MASK|SPI_SR_TFFF_MASK|SPI_SR_RFOF_MASK|SPI_SR_RFDF_MASK;
    SPI1_MCR &=~SPI_MCR_HALT_MASK;  
   
    return 1;
}


uint16 SPI1_rev1()
{
  uint16 ch;
  while((SPI1_SR&SPI_SR_RFDF_MASK)==0);
  ch=SPI1_POPR;
  return ch;
}


作者: jianbo2006    时间: 2012-12-15 00:02
楼主,你的波特率设置是多少?
作者: /回憶_┌過去    时间: 2013-2-8 17:20
不知道你现在成功了吗。。。。 我也遇到这个问题了,准备直接上外设慢慢调了
作者: 天地亁堃    时间: 2013-2-8 18:09
/回憶_┌過去 发表于 2013-2-8 17:20
不知道你现在成功了吗。。。。 我也遇到这个问题了,准备直接上外设慢慢调了

用下LPLD的代码试试吧,LPLD的代码我没试,不过有SPI模块的
作者: /回憶_┌過去    时间: 2013-2-8 19:55
天地亁堃 发表于 2013-2-8 18:09
用下LPLD的代码试试吧,LPLD的代码我没试,不过有SPI模块的

我知道 他们的有代码,我综合了好多的代码,但我的还是不能用,主机能发送,但从机接收不了,从机的配置也对了呀。。

作者: lotuse1    时间: 2015-5-14 13:33
你确定这样分出来的是2M???好快好快的

作者: lotuse1    时间: 2015-5-14 13:40
/回憶_┌過去 发表于 2013-2-8 19:55
我知道 他们的有代码,我综合了好多的代码,但我的还是不能用,主机能发送,但从机接收不了,从机的配置 ...

我的是从机可以,主机不可以,嘻嘻





欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2