SPI
根据SPOL和SPHA可知SPI读写分为4个状态
- 模式0:
SPOL=0,SPHA=0 表示空闲状态为低电平,在第一个上升沿采样
写一字节:
void SPI_Write_byte(unsigned char data)
{
unsigned char i;
for(i=0;i<8;i++)
{
SPI_SCK = 0;
if(data&0x80)
MOSI = 1;
else
MOSI = 0;
data<<=1;
delay();
SPI_SCK = 1;
delay();
}
SPI_SCK = 0;
}
读一字节
unsigned char SPI_Read_byte()
{
unsigned char i,data;
for(i=0;i<8;i++)
{
SPI_SCK = 0;
delay();
data<<=1;
if(MISO)
data |= 0x01;
else
data &= 0xfe;
SPI_SCK = 1;
delay();
}
SPI_SCK = 0;
return data;
}
- 模式3
CPOL=1,CPHA=1 表示空闲状态为高电平,在第二个时钟沿(即上升沿)采样
写一字节:
void SPI_Write_byte(unsigned char data)
{
unsigned char i
SPI_SCK = 1;
delay();
for(i=0;i<8;i++)
{
SPI_SCK = 0;
delay();
if(data&0x80)
MOSI = 1;
else
MOSI = 0;
data<<=1;
SPI_SCK = 1;
delay();
}
}
读一字节:
unsigned char SPI_Read_byte()
{
unsigned char i,data;
SPI_SCK = 1;
delay();
for(i=0;i<8;i++)
{
SPI_SCK = 0;
delay();
data<<=1;
if(MISO)
data |= 0x01;
else
data &= 0xfe;
SPI_SCK = 1;
delay();
}
return data;
}
还有模式1和模式2。
模式1(CPOL=0,CPHA=1):空闲状态为低电平,在第二个时钟沿(即下降沿)采样。
模式2(CPOL=1,CPHA=0):空闲状态为高电平,在第一个下降沿采样。
这两个与模式0和3相似,也因为 FM25Q02只支持模式0和3就不作过多描述。