zho前面的已經說了如何去初始化SPI了,接下來說說發送函式,先上代碼
void OLED_Writ_Bus(uint8_t _data)
{
Delay20us();
if (SPI_Busy == 0)
{
SPI_Busy = 1;
OLED_CS_Clr();
SPDAT = _data;
}
}
SPI_Busy是一個狀態機,判斷SPI是否在忙碌,在OLED的例程中已經是軟體模擬SPI,模擬的時鐘跟不上硬體的速度,所以我們只需要稍加就該,把軟體的模擬更換成硬體驅動就完事了,看看兩者的速度差,軟體模擬在400k左右,硬體驅動(中斷)能達到3M左右,輪詢在1M左右,拉低CS(SS)管腳可選中從機,這里加了一個小小的延時,不然OLED顯示亂碼,可以試試用調度機能不能調解這個問題(以后的文章會講到)
所以在主機發送的時候要拉低SS管腳,然后將資料寫入SPDAT暫存器就完事了,其實他是一個位移暫存器,這就是為啥SPI傳輸速率比較高的原因,
中斷方式肯定得有interrupt SPI1的中斷號是9,接下來看看中斷該怎么處理,
void SPI_Isr() interrupt 9
{
SPSTAT = 0XC0; //清除中斷標志位
SPI_Busy = 0; //清除SPI忙碌狀態位
OLED_CS_Set(); //拉高從機ss管腳
}
中斷一次代表8位資料已經發完一次,也就是一位元組的資料發送完畢,在說明書中有寫

看會之前所說的忽略的章節
在中斷中得把狀態暫存器給寫1清零,所以在中斷中,SPSTAT = 0XC0;清除忙碌位,就把中斷給寫好了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/402539.html
標籤:其他
