#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 下降沿时进行采样。
文章详细解释了SPI总线的四种工作模式(CPOL=0/CPHA=0,0/1,1/0,1/1),以及GPIO在不同模式下的控制操作,如clk、MOSI的设置和数据传输时机。
1206

被折叠的 条评论
为什么被折叠?



