📄 sim_spi.txt
字号:
具体实现如下:
#define SPI_DATA GPIO0
#define SPI_CLK GPIO1
void spi_write(char data)
{
int8 i = 7;
uint8 mask[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
for(; i >= 0; i--) {
gpio_out(SPI_CLK, GPIO_LOW_VALUE); /*把clock线拉低,模拟一个时钟*/
gpio_out(SPI_DATA, ((data & mask[i]) >> i)); /*把数据送上DATA线*/
spi_delay(10); /*等待适当的时间,以等待数据稳定*/
gpio_out(SPI_CLK, GPIO_HIGH_VALUE); /*拉高clock线,让设备端接收数据*/
spi_delay(10);
}
}
实际上模拟SPI是很简单的事情, 只要对照SPI传输模式的时序图来模拟就行了。需要注意的是一定要有个等待时间,以使数据在数据线上稳定下来, 并使设备端有时间取数据。刚开始调试的时候可以适当把等待时间延长一点,当调通了SPI后在降下等待时间。
我写的等待时间如下:
#define spi_delay(delay) \
{ \
register uint32 i = 0; \
while(i < delay) { \
__asm{ \
NOP; \
NOP; \
NOP; \
NOP; \
}; \
i -= 4; \
} \
}
呵呵,整个过程就是这样简单。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -