关于SPI通讯的问题

来源:百度知道 编辑:UC知道 时间:2024/06/27 20:43:49
现在做一个项目,使用三星的MCU,来控制一个音乐芯片录放音, 使用I/O脚模拟SPI通讯模式,但是一直调试不通,测试发送数据,和想象中的不一样,

U8 SPI_Byte(U8 byt) // U8 为 unsigned char 类型
{ U8 i;
U8 j=0;
SS=1;SCLK=1;MOSI=0
SS=0;

for(i=0;i<8;i++)
{
SCLK=0; // start
if (byt&0x01) MOSI=1;
else MOSI=0; //output bit
byt>>=1; // 1Tstru delay effect
SCLK=1; //enable write
if (MISO==1) j|=1<<i; //read from ISD1730
}
return j;
//SS=1;
}

有没人懂SPI的, 帮我分析下, 我用示波器测试,得到的波形和我传送的数据不一样,SPI_Byte(0x01)结果得到的波形不是1的波形。
这个延迟时间是怎么来计算的?

我也设置过延迟。可能是我设置的时间不对吧,那我要怎么设置这个时间呢?

SPI在时钟的边沿进行采样,所以在时钟的边沿,MOSI应该保持一段时间;另外循环中应该有一定的延时,循环部分改写如下:

int j;
for(i=0;i<8;i++)
{
SCLK=0; // start
if (byt&0x01) MOSI=1;
else MOSI=0; //output bit
byt>>=1; // 1Tstru delay effect
for(j=0;j<100;j++);// delay for a while,根据实际调整等待时间
SCLK=1; //enable write
for(j=0;j<100;j++);// delay for a while
if (MISO==1) j|=1<<i; //read from ISD1730
}