#define BIT(n) (1ul << (n))
void _my_spi_putc_2(u8 ch)
{
u8 i;
for(i=0; i<8; i++) {
GPIOACLR = BIT(6);//clk
if(ch & 0x80) {
GPIOASET = BIT(7);//MOSI
} else {
GPIOACLR = BIT(7);//MOSI
}
ch <<= 1;
GPIOASET = BIT(6);//clk
}
}
注意SPI总线有四种工作模式,它们是:
模式0(CPOL=0, CPHA=0):在此模式下,SCK(时钟信号)在空闲状态下为低电平,数据在 SCK 上升沿时进行采样,数据在 SCK 下降沿时进行传输。
模式1(CPOL=0, CPHA=1):在此模式下,SCK 在空闲状态下为低电平,数据在 SCK 下降沿时进行采样,数据在 SCK 上升沿时进行传输。
模式2(CPOL=1, CPHA=0):在此模式下,SCK 在空闲状态下为高电平,数据在 SCK 下降沿时进行传输,数据在 SCK 上升沿时进行采样。
模式3(CPOL=1, CPHA=1):在此模式下,SCK 在空闲状态下为高电平,数据在 SCK 上升沿时进行传输,数据在 SCK 下降沿时进行采样。