?? 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 + -