常驻嘉宾
- 积分
- 4101
- 威望
- 1708
- 贡献
- 1133
- 兑换币
- 885
- 注册时间
- 2012-6-23
- 在线时间
- 630 小时
|
1贡献
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;
}
|
|