时钟极性与时钟相位的组合时序
(1)CPOL=0, CPHA=0
????????正脉冲周期形式,数据在上升沿存取,下降沿就绪。?
u8 SPI_WriterByte(u8 dat)
{
u8 i = 0;
u8 ret = 0;
for (i=0; i<8; i++)
{
CLK_Set();
ret <<= 1;
if (MISO_READ())
ret |= 1;
CLK_Clr();
if (dat & 0x80)
MOSI_Set();
else
MOSI_Clr();
dat <<= 1;
}
return ret;
}
(2)CPOL=0, CPHA=1
????????正脉冲周期形式,数据在上升沿就绪,下降沿存取。
u8 SPI_WriterByte(u8 dat)
{
u8 i = 0;
u8 ret = 0;
for (i=0; i<8; i++)
{
CLK_Set();
if (dat & 0x80)
MOSI_Set();
else
MOSI_Clr();
dat <<= 1;
CLK_Clr();
ret <<= 1;
if (MISO_READ())
ret |= 1;
}
return ret;
}
(3)CPOL=1, CPHA=0
????????负脉冲周期形式,数据在下降沿存取,上升沿就绪。
u8 SPI_WriterByte(u8 dat)
{
u8 i = 0;
u8 ret = 0;
for (i=0; i<8; i++)
{
CLK_Clr();
ret <<= 1;
if (MISO_READ())
ret |= 1;
CLK_Set();
if (dat & 0x80)
MOSI_Set();
else
MOSI_Clr();
dat <<= 1;
}
return ret;
}
(4)CPOL=1, CPHA=1
????????负脉冲周期形式,数据在下降沿就绪,上升沿存取。
u8 SPI_WriterByte(u8 dat)
{
u8 i = 0;
u8 ret = 0;
for (i=0; i<8; i++)
{
CLK_Clr();
if (dat & 0x80)
MOSI_Set();
else
MOSI_Clr();
dat <<= 1;
CLK_Set();
ret <<= 1;
if (MISO_READ())
ret |= 1;
}
return ret;
}
|