IO口模擬SPI的問題,其實光模擬來說,就時序問題,讀取和寫入一個字節(jié)的時序。
首先選4個IO口,作模擬用,分別模擬CS、SCLK、SI、SO.即是片選、時鐘、數(shù)據(jù)輸入、數(shù)據(jù)輸出。
IO口初始化,分別把對應的IO口設置輸入輸出。CS、SCLK、SO、設置為輸出,SI設置為輸入。
然后就是時序問題了,一般如下:
//設要寫的數(shù)據(jù)是abyte表示。
CS_1; //片選高,
SCLK_1; //時鐘高
CS_0; //片選低,開始工作。
for(i=0;i<8;i++)//循環(huán)產(chǎn)生時鐘,寫入數(shù)據(jù)。
{
SCLK_0; //時鐘低,下降沿
if(0x80&abyte)
SO_1;
else
SO_0;
SCLK_1;
abyte<<=1;
}
SCLK_0;
CS_1;
//設要讀的數(shù)據(jù)是abyte表示。
CS_0;
SCLK_1;
for(i=0;i<8;i++)//讀取數(shù)據(jù)值。
{
SCLK_0;
;;
SCLK_1;
abyte<<=1;
if(in_SI)
abyte++;
}
SCLK_0;
CS_1;