欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

Spi控制器及通信方法

文檔序號(hào):6385447閱讀:567來源:國知局
專利名稱:Spi控制器及通信方法
SPI控制器及通信方法
技術(shù)領(lǐng)域
本發(fā)明涉及串行通信技術(shù),尤其涉及一種改進(jìn)型的SPI控制器及基于該SPI控制器的通信方法。
背景技術(shù)
SPI (Serial Peripheral Interface,串行外圍設(shè)備接口)最早由 Motorola 公司提出的一種全雙工、同步串行傳輸總線,主要用于微控制器和外圍設(shè)備之間的通信,以及用于微處理器和微處理器之間的通信。具有電路結(jié)構(gòu)簡(jiǎn)單、傳輸速度快、通信可靠等優(yōu)點(diǎn)。SPI 總線包括 4 根信號(hào)線SS(Slave Select,從機(jī)選擇),SCLK(SPI Clock,SPI 傳輸時(shí)鐘),M0SI (Master Output Slave Input,主機(jī)輸出從機(jī)輸入)和 MISO (Master InputSlave Output,主機(jī)輸入從機(jī)輸出)。其中,SS由SPI主機(jī)輸出,用于SPI主機(jī)選擇SPI從機(jī),低電平有效,即當(dāng)SS輸入為低時(shí),SPI從機(jī)與SPI主機(jī)進(jìn)行通信;SCLK是SPI主機(jī)輸出的用于同步MOSI和MISO的時(shí)鐘;M0SI是主機(jī)輸出給從機(jī)的數(shù)據(jù)線;MIS0是從機(jī)輸出給主機(jī)的數(shù)據(jù)線。SPI總線的連接關(guān)系如圖1所示。SPI控制器控制SS的方法,如圖2所示,具體為(I)、當(dāng)被配置為從機(jī)時(shí)SS管腳配置為SPI專用SS功能,作為輸入連接到外面的SPI主機(jī)的SS輸出,只用當(dāng)SS輸入為低時(shí),SPI控制器才能和外面的SPI主機(jī)進(jìn)行通信;(2)、當(dāng)被配置為主機(jī)時(shí)(2a)、如果為單SPI主機(jī)系統(tǒng),不需檢測(cè)MODF (Mode Fault,模式錯(cuò)誤)即多個(gè)SPI主機(jī)同時(shí)操作SPI總 線,CPlXCentral Processing Unit,中央處理單元)配置SPI控制器不使能M0DF,SS作為輸出連接到外部的SPI從機(jī),此時(shí)SS輸出通過CPU控制GPIO (GenericPurpose Input Output,通用輸入輸出)來實(shí)現(xiàn),即SS管腳配置為GPIO功能,GPIO配置為輸出狀態(tài),輸出電平由CPU控制;此種情況下需軟件控制以模擬SS輸出;(2b)、如果為多SPI主機(jī)系統(tǒng),需檢測(cè)M0DF,CPU配置SPI控制器使能M0DF,SS管腳配置為SPI專用SS功能作為輸入,SPI控制器檢測(cè)SS輸入當(dāng)SS輸入為低,說明有其他的SPI主機(jī)正在操作SPI總線,SPI控制器需硬件自動(dòng)配置為從機(jī),并向CPU報(bào)告MODF ;相反,當(dāng)SS輸入為高,說明沒有其他的SPI主機(jī)在操作SPI總線,SPI控制器工作在主機(jī)模式,CPU配置SPI控制器不使能M0DF,SS作為輸出連接到外部的SPI從機(jī),SS輸出控制通過CPU控制GPIO來實(shí)現(xiàn),并需軟件控制以模擬SS輸出。如圖3所示,SPI控制器接收數(shù)據(jù)緩存器工作原理初始接收數(shù)據(jù)緩存器未存儲(chǔ)數(shù)據(jù),為空狀態(tài),將寫入的數(shù)據(jù)依次存儲(chǔ)到相應(yīng)的位置,當(dāng)存儲(chǔ)N個(gè)數(shù)據(jù)后,假設(shè)接收數(shù)據(jù)緩存器最大容量為N,接收數(shù)據(jù)緩存器中存滿數(shù)據(jù),為滿狀態(tài),此時(shí)沒有空間存儲(chǔ)新的數(shù)據(jù)。如果SPI控制器接收新的數(shù)據(jù)并寫入接收數(shù)據(jù)緩存器,由于接收數(shù)據(jù)緩存器中的數(shù)據(jù)不會(huì)改變,新的數(shù)據(jù)將不會(huì)成功寫入到接收數(shù)據(jù)緩存器中;只有將接收數(shù)據(jù)緩存器里面的數(shù)據(jù)讀走,接收數(shù)據(jù)緩存器才有空間存儲(chǔ)新的數(shù)據(jù),新的數(shù)據(jù)才能成功寫入到接收數(shù)據(jù)緩存器。從上述分析中可以看到,SPI控制器存在如下兩個(gè)不足
1、當(dāng)SPI控制器配置為主機(jī)時(shí),SS輸出不由SPI控制器直接控制,通過CPU(Central Processing Unit,中央處理單兀)控制 GPIO (Generic Purpose Input Output,通用輸入輸出)來實(shí)現(xiàn),需要軟件控制來模擬SS輸出。該方法通過CPU來控制GPIO來模擬SS輸出,需要軟件設(shè)計(jì)人員通過軟件來控制,雖提供了一定的設(shè)計(jì)靈活性,但軟件設(shè)計(jì)人員需要準(zhǔn)確地用軟件控制來模擬SS輸出以滿足SPI傳輸時(shí)序要求,增加了軟件人員的負(fù)擔(dān);同時(shí),軟件控制需要額外占用CPU資源,增加了 CPU的工作負(fù)荷。2、SPI控制器中的接收數(shù)據(jù)緩存器存滿數(shù)據(jù)后,里面的數(shù)據(jù)須要及時(shí)被讀走,否則接收數(shù)據(jù)緩存器將不能接收新的數(shù)據(jù)。即,當(dāng)SPI控制器被配置為主機(jī)SPI控制器對(duì)外圍器件內(nèi)部的控制寄存器進(jìn)行寫操作,SPI控制器輸出有用的寫數(shù)據(jù)到SPI從機(jī),而此時(shí)SPI從機(jī)輸出給SPI控制器的數(shù)據(jù)沒有實(shí)際用途,SPI控制器也不關(guān)心這些數(shù)據(jù),但當(dāng)SPI控制器對(duì)SPI從機(jī)進(jìn)行讀操作時(shí),SPI從機(jī)輸出的有用數(shù)據(jù)需要寫入接收數(shù)據(jù)緩存器,接收數(shù)據(jù)緩存器里面的數(shù)據(jù)必須要及時(shí)被讀走;同理,當(dāng)SPI控制器被配置為從機(jī)時(shí)外部的SPI主機(jī)對(duì)SPI控制器進(jìn)行讀操作時(shí),SPI控制器輸出有用的數(shù)據(jù)到SPI主機(jī),而此時(shí)SPI主機(jī)輸出給SPI控制器的數(shù)據(jù)也沒有實(shí)際用途,SPI控制器也不關(guān)心這些數(shù)據(jù),但當(dāng)外部SPI主機(jī)對(duì)SPI控制器進(jìn)行寫操作時(shí),SPI主機(jī)輸出的有用數(shù)據(jù)需要寫入接收數(shù)據(jù)緩存器,接收數(shù)據(jù)緩存器里面的數(shù)據(jù)也必須及時(shí)被讀走。目前SPI控制器配置為主機(jī)時(shí)進(jìn)行SPI傳輸?shù)能浖僮髁鞒倘缦翴)、CPU配置SPI控制器為主機(jī),如果需要檢測(cè)MODF (多SPI主機(jī)系統(tǒng)),CPU配置SPI控制器使能MODF,SPI控制器將SS管腳配置為SPI專用SS功能作為輸入,并檢測(cè)SS輸入當(dāng)SS為低,此時(shí)有其他的SPI主機(jī)正在操作SPI總線,SPI控制器需要硬件自動(dòng)配置為SPI從機(jī),并向CPU報(bào)告MODF ;當(dāng)SS為高,此時(shí)沒有其他的SPI主機(jī)在操作SPI總線,則SPI控制器可以工作在主機(jī)模式,之后CPU配置SPI控制器不使能MODF ;如果是單SPI主機(jī)系統(tǒng),則跳過前述的MODF檢測(cè)過程,CPU配置SPI控制器為主機(jī)并且不使能MODF ;2)、CPU寫操作波特率寄存器配置SCLK波特率參數(shù);3)、CPU寫操作控制寄存器配置SPI傳輸參數(shù);4)、CPU配置SS管腳為GPIO功能,將GPIO配置為輸出狀態(tài)(軟件操作控制);5)、CPU控制GPIO輸出低電平選擇從機(jī)準(zhǔn)備開始SPI傳輸(軟件操作控制);6)、CPU將需要發(fā)送的數(shù)據(jù)寫入SPI控制器中的發(fā)送數(shù)據(jù)緩存器,該寫操作將啟動(dòng)SPI傳輸;7)、如果CPHA=O則執(zhí)行步驟8),否則,如果CPHA=I則執(zhí)行步驟10);8)、每傳輸完一個(gè)數(shù)據(jù)后,將模擬SS輸出的GPIO拉高(高電平),如果SPI控制器中的發(fā)送數(shù)據(jù)緩存器中還有數(shù)據(jù)要傳輸,則延時(shí)一段時(shí)間后(SS高電平保持時(shí)間)將模擬SS輸出的GPIO拉低(低電平),開始下一個(gè)數(shù)據(jù)傳輸,以此類推,直到傳輸完發(fā)送數(shù)據(jù)緩存器里面的數(shù)據(jù);等待傳輸完成后,CPU讀取接收數(shù)據(jù)緩存器中的數(shù)據(jù),如果需要繼續(xù)傳輸則執(zhí)行步驟5),開始下一次傳輸,否則傳輸完成;其中模擬SS輸出的GPIO拉高時(shí)間、延時(shí)時(shí)間和拉低時(shí)間需軟件人員控制以滿足SPI傳輸時(shí)序要求(軟件操作控制);9)、等待發(fā)送數(shù)據(jù)緩存器里面的所有數(shù)據(jù)傳輸完成后,CPU讀取接收數(shù)據(jù)緩存器中的數(shù)據(jù),如果需要繼續(xù)傳輸則執(zhí)行步驟5),開始下一次傳輸,否則將模擬SS輸出的GPIO拉高,完成傳輸(軟件操作控制)。
因此,不管SPI控制器被配置為主機(jī)還是從機(jī),接收數(shù)據(jù)緩存器存滿數(shù)據(jù)后,不管接收到的數(shù)據(jù)有無實(shí)際用途,接收數(shù)據(jù)緩存器中的數(shù)據(jù)都必須及時(shí)被讀走,否則接下來的數(shù)據(jù)就不能寫進(jìn)接收數(shù)據(jù)緩存器,大大增加了軟件開銷、以及對(duì)CPU資源的占用,同時(shí),增加了軟件設(shè)計(jì)人員的負(fù)擔(dān)。

發(fā)明內(nèi)容本發(fā)明要解決的技術(shù)問題在于減少CPU操作SPI控制器時(shí)所需的軟件控制,從而提高CPU的使用率。為此,本發(fā)明一方面提供一種SPI控制器,包括內(nèi)部總線接口模塊,用于經(jīng)內(nèi)部總線實(shí)現(xiàn)CPU操作SPI控制器、寄存器模塊,接收通過內(nèi)部總線接口模塊傳輸?shù)腃PU對(duì)SPI控制器的配置、數(shù)據(jù)轉(zhuǎn)換模塊,用于輸出數(shù)據(jù)并串轉(zhuǎn)換和輸入數(shù)據(jù)串并轉(zhuǎn)換、狀態(tài)與中斷控制模塊,用于報(bào)告SPI控制器的狀態(tài)和產(chǎn)生中斷,還包括有限狀態(tài)機(jī),用于根據(jù)寄存器模塊中控制寄存器寄存的SPI傳輸參數(shù)和波特率寄存器寄存的SCLK波特率參數(shù)產(chǎn)生SS和SCLK輸出;發(fā)送和接收數(shù)據(jù)緩存器,分別用于緩存待傳輸和接收到的數(shù)據(jù);所述有限狀態(tài)機(jī)包括空閑、開始、傳輸和結(jié)束四個(gè)狀態(tài)。進(jìn)一步地,所述SPI控制器還包括發(fā)送數(shù)據(jù)緩存器和接收數(shù)據(jù)緩存器,所述接收數(shù)據(jù)緩存器用于緩存SPI控制器接收到的數(shù)據(jù);所述接收數(shù)據(jù)緩存器,進(jìn)行如下控制接收數(shù)據(jù)緩存器中數(shù)據(jù)存滿后,當(dāng)有新數(shù)據(jù)寫入接收數(shù)據(jù)緩存器時(shí),最先寫入的數(shù)據(jù)被最先寫入的數(shù)據(jù)之后的數(shù)據(jù)覆蓋,依次類推,最后寫入的數(shù)據(jù)之前的數(shù)據(jù)被最后寫入的數(shù)據(jù)覆蓋,進(jìn)而形成一數(shù)據(jù)空間存儲(chǔ)寫入的新數(shù)據(jù)。進(jìn)一步地,所述數(shù)據(jù)轉(zhuǎn)換模塊包括輸出數(shù)據(jù)并串轉(zhuǎn)換單元和輸入數(shù)據(jù)串并轉(zhuǎn)換單元,所述輸出數(shù)據(jù)并串轉(zhuǎn)換單元用于讀取發(fā)送數(shù)據(jù)緩存器中的并行數(shù)據(jù)后進(jìn)行并串轉(zhuǎn)換后輸出,其中,當(dāng)SPI控制器被配置為主機(jī)時(shí),輸出至MOSI信號(hào)線;反之,當(dāng)SPI控制器被配置為從機(jī)時(shí),輸出至MISO信號(hào)線;所述輸入數(shù)據(jù)串并轉(zhuǎn)換單元用于將輸入串行數(shù)據(jù)進(jìn)行串并轉(zhuǎn)換后寫入接收數(shù)據(jù)緩存器,其中,當(dāng)SPI控制器被配置為主機(jī)時(shí),輸入為MISO信號(hào)線;反之,當(dāng)SPI控制器被配置為從機(jī)時(shí)`,輸入為MOSI信號(hào)線。進(jìn)一步地,所述寄存器模塊包括控制寄存器和波特率寄存器,所述控制寄存器用于接收并寄存CPU配置SPI傳輸參數(shù);所述波特率寄存器用于接收并寄存CPU配置SCLK時(shí)鐘波特率參數(shù)。進(jìn)一步地,所述傳輸參數(shù)包括SPIE (SPI Enable, SPI 使能)、MSS (Master SlaveSelect,主從選擇,其中 ‘I’ 為主、‘O,為從)、CPHA、CPOL、MODFEN 和 DataSize。進(jìn)一步地,所述CPHA和CPOL傳輸參數(shù),支持8位、16位或32位的數(shù)據(jù)傳輸、最高位先傳輸或者最低位先傳輸。本發(fā)明另一方面還提供一種SPI控制器的通信方法,包括,S1、系統(tǒng)復(fù)位,有限狀態(tài)機(jī)處于空閑狀態(tài),SS輸出高電平,SCLK輸出即CPOL ;S2、CPU配置SPI控制器為主機(jī),不使能M0DF,使能SPI控制器,SPI控制器為主機(jī)并等待SPI傳輸;S3、CPU將待傳輸?shù)臄?shù)據(jù)寫入發(fā)送數(shù)據(jù)緩存器,寫操作將啟動(dòng)SPI傳輸;S4、有限狀態(tài)機(jī)保持空閑狀態(tài),當(dāng)檢測(cè)到遞增計(jì)數(shù)器計(jì)數(shù)為ClockNumber/2-l,有限狀態(tài)機(jī)進(jìn)入開始狀態(tài),并將SS輸出低電平開始SPI傳輸;S5、有限狀態(tài)機(jī)保持開始狀態(tài),當(dāng)遞增計(jì)數(shù)器計(jì)數(shù)到ClockNumber/2-l時(shí)SCLK輸出翻轉(zhuǎn),同時(shí)SS輸出低電平;S6、有限狀態(tài)機(jī)處于傳輸狀態(tài)直至數(shù)據(jù)傳輸結(jié)束,進(jìn)入結(jié)束狀態(tài);進(jìn)一步地,還包括,S7、有限狀態(tài)機(jī)保持在結(jié)束狀態(tài)到遞增計(jì)數(shù)器計(jì)數(shù)到ClockNumber/2-l,之后有限狀態(tài)機(jī)進(jìn)行狀態(tài)轉(zhuǎn)換S8、當(dāng)CPHA=O,有限狀態(tài)機(jī)進(jìn)入空閑狀態(tài),同時(shí)SS輸出高電平并結(jié)束當(dāng)前SPI傳輸、等待下次SPI傳輸;S9、當(dāng)CPHA=O,如果發(fā)送數(shù)據(jù)緩存器中仍存有數(shù)據(jù),有限狀態(tài)機(jī)進(jìn)入傳輸狀態(tài),同時(shí)保持SS輸出低電平開始下次SPI傳輸;反之,如果發(fā)送數(shù)據(jù)緩存器中無數(shù)據(jù),有限狀態(tài)機(jī)進(jìn)入空閑狀態(tài),同時(shí)SS輸出高電平并結(jié)束當(dāng)前SPI傳輸、等待下次SPI傳輸。其中,步驟S1-S9為有限狀態(tài)機(jī)的工作流程。進(jìn)一步地,所述SPI傳輸為S10, CPU配置SPI控制器為主機(jī),并判斷SPI主機(jī)系統(tǒng)類型;S11、當(dāng)為多SPI 主機(jī)系統(tǒng),檢測(cè)MODF,CPU配置SPI控制器使能MODF,SPI控制器配置SS為輸入并檢測(cè)SS輸入電平SS為低,有其他的SPI主機(jī)操作SPI總線,此時(shí)SPI控制器硬件自動(dòng)配置為從機(jī),并向CPU報(bào)告MODF ;SS為高,沒有其他的SPI主機(jī)操作SPI總線,SPI控制器可以配置為主機(jī)并開始SPI傳輸,CPU配置SPI控制器不使能MODF,SPI控制器配置SS為輸出,準(zhǔn)備SPI傳輸;當(dāng)為單SPI主機(jī)系統(tǒng),CPU配置不使能MODF,SPI控制器配置SS為輸出,準(zhǔn)備SPI傳輸;S12、CPU寫操作波特率寄存器配置SCLK波特率參數(shù);S13、CPU寫操作控制寄存器配置SPI傳輸參數(shù);S14、CPU將待傳輸?shù)臄?shù)據(jù)寫入發(fā)送數(shù)據(jù)緩存器;數(shù)據(jù)轉(zhuǎn)換模塊將發(fā)送數(shù)據(jù)緩存器中的數(shù)據(jù)讀出進(jìn)行并串轉(zhuǎn)換后輸出至MOSI,同時(shí)將輸入MISO進(jìn)行串并轉(zhuǎn)換后寫入到接收數(shù)據(jù)緩存器;S15、持續(xù)SPI控制器數(shù)據(jù)傳輸;S16、當(dāng)發(fā)送數(shù)據(jù)緩存器中還有數(shù)據(jù),需繼續(xù)傳輸執(zhí)行步驟S14,并開始下次傳輸,否則傳輸結(jié)束。進(jìn)一步地,S17、CPU讀取接收數(shù)據(jù)緩存器里面接收到的數(shù)據(jù)。本發(fā)明提供的改進(jìn)型SPI控制器,I)當(dāng)被配置為主機(jī)時(shí),SS輸出完全由SPI控制器硬件自動(dòng)控制,無需軟件控制模擬SS輸出,2)接收數(shù)據(jù)緩存器中數(shù)據(jù)的讀取是可選的,減少了不必要的CPU讀取接收數(shù)據(jù)緩存器操作,這兩點(diǎn)大大減少CPU操作SPI控制器時(shí)所需的軟件控制,從而提高CPU的使用率。

圖1示出現(xiàn)有技術(shù)的SPI總線的連接示意圖。圖2示出現(xiàn)有技術(shù)的SPI控制器控制SS的示意圖。
圖3示出現(xiàn)有技術(shù)的SPI控制器接收緩存控制器的工作原理圖。圖4示出本發(fā)明的SPI控制器的結(jié)構(gòu)框架圖。圖5示出本發(fā)明的SPI控制器控制SS的示意圖。圖6示出本發(fā)明的SPI控制器的有限狀態(tài)機(jī)的轉(zhuǎn)換圖。圖7示出本發(fā)明的SPI控制器接收緩存控制器的工作原理圖。圖8示出本發(fā)明的CPHA=O時(shí)的SPI傳輸時(shí)序圖。圖9示出本發(fā)明的CPHA=I時(shí)的SPI傳輸時(shí)序圖。
具體實(shí)施方式下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明作進(jìn)一步詳細(xì)說明。本發(fā)明提供一種SPI控制器,如圖4所示,包括內(nèi)部總線接口模塊,用于經(jīng)內(nèi)部總線實(shí)現(xiàn)CPU操作SPI控制器、寄存器模塊,接收通過內(nèi)部總線接口模塊傳輸?shù)腃PU對(duì)SPI控制器的配置、數(shù)據(jù)轉(zhuǎn)換模塊,用于輸出數(shù)據(jù)并串轉(zhuǎn)換和輸入數(shù)據(jù)串并轉(zhuǎn)換、狀態(tài)與中斷控制模塊,用于報(bào)告SPI控制器的狀態(tài)和產(chǎn)生中斷,其特征在于,還包括有限狀態(tài)機(jī),用于根據(jù)寄存器模塊中控制寄存器寄存的SPI傳輸參數(shù)和波特率寄存器寄存的SCLK波特率參數(shù)產(chǎn)生SS和SCLK輸出;發(fā)送和接收數(shù)據(jù)緩存器,分別用于緩存待傳輸和接收到的數(shù)據(jù);上述有限狀態(tài)機(jī)包括空閑、開始、傳輸和結(jié)束四個(gè)狀態(tài)。如圖5所示,為SPI控制器的SS端連接示意圖,CPUl通過內(nèi)部總線2與SPI控制器3連接,SPI控制器控制SS工作原理如下I)、當(dāng)CPU配置SPI控制器為從機(jī)時(shí)SPI控制器硬件自動(dòng)配置SS管腳為輸入,并連接到外部的SPI主機(jī)的SS輸出,此狀態(tài)下只有當(dāng)SS輸入為低時(shí),SPI控制器才與外部的SPI主機(jī)進(jìn)行通信;2)、當(dāng)CPU配置SPI控制器為主機(jī)時(shí)a)、當(dāng)為單SPI主機(jī)系統(tǒng),不需檢測(cè)MODF (Mode Fault,模式錯(cuò)誤即多個(gè)SPI主機(jī)同時(shí)操作SPI總線),CPU配置SPI控制器不使能M0DF,即MODFEN=O), SPI控制器硬件自動(dòng)配置SS管腳為輸出,SS輸出電平由SPI控制器根據(jù)SPI傳輸參數(shù)硬件控制,上述傳輸參數(shù)如 CPHA (Clock Phase,時(shí)鐘相位)和 CPOL (Clock Polarity,時(shí)鐘極性);b)、當(dāng)為多SPI主機(jī)系統(tǒng),需檢測(cè)MODF,CPU配置SPI控制器使能MODF即MODFEN=I,SPI控制器硬件自動(dòng)配置SS管腳為輸入,SPI控制器檢測(cè)SS輸入如果SS輸入為低電平,則有其他的SPI主機(jī)正在操作SPI總線,SPI控制器硬件自動(dòng)配置為從機(jī),并向CPU報(bào)告MODF ;相反,如果SS輸入為高,則沒有其他的SPI主機(jī)在操作SPI總線,SPI控制器可以工作在主機(jī)模式,之后CPU配置SPI控制器不使能M0DF,即MODFEN=O, SPI控制器硬件自動(dòng)配置SS管腳為輸出,SS輸出電平由SPI控制器根據(jù)SPI傳輸參數(shù)硬件控制,上述傳輸參數(shù)如CPHA 和 CPOL。如圖6所示,為有限狀態(tài)機(jī)的轉(zhuǎn)換圖,上述有限狀態(tài)機(jī)包括空閑、開始、傳輸和結(jié)束四個(gè)狀態(tài)。本發(fā)明提供的改進(jìn)型SPI 控制器,I)當(dāng)被配置為主機(jī)時(shí),SS輸出完全由SPI控制器硬件自動(dòng)控制,無需軟件控制模擬SS輸出,2)接收數(shù)據(jù)緩存器中數(shù)據(jù)的讀取是可選的,減少了不必要的CPU讀取接收數(shù)據(jù)緩存器操作,減少CPU操作SPI控制器時(shí)所需的軟件控制,從而提高CPU的使用率。進(jìn)一步地,上述SPI控制器還包括發(fā)送數(shù)據(jù)緩存器和接收數(shù)據(jù)緩存器,上述接收數(shù)據(jù)緩存器用于緩存SPI控制器接收到的數(shù)據(jù);上述接收數(shù)據(jù)緩存器,進(jìn)行如下控制接收數(shù)據(jù)緩存器中數(shù)據(jù)存滿后,當(dāng)有新數(shù)據(jù)寫入接收數(shù)據(jù)緩存器時(shí),最先寫入的數(shù)據(jù)被最先寫入的數(shù)據(jù)之后的數(shù)據(jù)覆蓋,依次類推,最后寫入的數(shù)據(jù)之前的數(shù)據(jù)被最后寫入的數(shù)據(jù)覆蓋,進(jìn)而形成一數(shù)據(jù)空間存儲(chǔ)寫入的新數(shù)據(jù)。如圖7所示,本發(fā)明SPI控制器接收數(shù)據(jù)緩存器工作原理為,初始接收數(shù)據(jù)緩存器中沒有數(shù)據(jù),為空狀態(tài),之后將寫入的數(shù)據(jù)依次存儲(chǔ)到相應(yīng)的位置,假設(shè)接收數(shù)據(jù)緩存器最大容量為N,則當(dāng)存儲(chǔ)N個(gè)數(shù)據(jù)后,接收數(shù)據(jù)緩存器中即存滿了數(shù)據(jù),為滿狀態(tài)。若SPI控制器接收新的數(shù)據(jù)并寫入接收數(shù)據(jù)緩存器,此時(shí),數(shù)據(jù)I會(huì)覆蓋最先寫入的數(shù)據(jù)0,同理,數(shù)據(jù)2覆蓋數(shù)據(jù)1,依次類推,數(shù)據(jù)N覆蓋數(shù)據(jù)N-1,這樣將在地址N上產(chǎn)生一空間可用于存儲(chǔ)寫入的新數(shù)據(jù)。因此,即保證先進(jìn)先出,又在存滿數(shù)據(jù)后,將新的數(shù)據(jù)寫入并覆蓋之前寫入的數(shù)據(jù)。本發(fā)明提供的改進(jìn)型SPI控制器,接收數(shù)據(jù)緩存器中數(shù)據(jù)的讀取是可選的如果有實(shí)際用途,則讀走,否則可以不進(jìn)行讀操作,這樣后續(xù)接收到的數(shù)據(jù)會(huì)自動(dòng)覆蓋掉接收數(shù)據(jù)緩存器中已經(jīng)寫入的數(shù)據(jù),減少了不必要的CPU讀取接收數(shù)據(jù)緩存器操作,同時(shí)減少CPU操作SPI控制器時(shí)所需的軟件控制,從而提高CPU的使用率。進(jìn)一步地,上述數(shù)據(jù)轉(zhuǎn)換模塊包括輸出數(shù)據(jù)并串轉(zhuǎn)換單元和輸入數(shù)據(jù)串并轉(zhuǎn)換單元,上述輸出數(shù)據(jù)并串轉(zhuǎn)換單元用于讀取發(fā)送數(shù)據(jù)緩存器中的并行數(shù)據(jù)后進(jìn)行并串轉(zhuǎn)換后輸出,其中,當(dāng)SPI控制器被配置為主機(jī)時(shí),輸出至MOSI信號(hào)線;反之,當(dāng)SPI控制器被配置為從機(jī)時(shí),輸出至MISO信號(hào)線;上述輸入數(shù)據(jù)串并轉(zhuǎn)換單元用于將輸入串行數(shù)據(jù)進(jìn)行串并轉(zhuǎn)換后寫入接收數(shù)據(jù)緩存器,其中,當(dāng)SPI控制器被配置為主機(jī)時(shí),輸入為MISO信號(hào)線;反之,當(dāng)SPI控制器被配置為從機(jī)時(shí),輸入為MOSI信號(hào)線。進(jìn)一步地,上述寄存器模塊包括控制寄存器和波特率寄存器,上述控制寄存器用于接收并寄存CPU配置SPI傳輸參數(shù);上述波特率寄存器用于接收并寄存CPU配置SCLK時(shí)鐘波特率參數(shù)。其中,上述傳輸參數(shù)包括SPIE (SPI Enable,SPI 使能)、MSS (Master SlaveSelect,主從選擇:‘I,為主、‘O,為從)、CPHA, CPOL, MODFEN (模式錯(cuò)誤使能)和DataSize(數(shù)據(jù)位寬選擇‘00,表示8-bit,‘01,表示16-bit, ‘10,表示32-bit)。上述狀態(tài)與中斷控制模塊,用于報(bào)告SPI控制器的工作狀態(tài)和產(chǎn)生中斷,包括TxFIFOEmpty (發(fā)送數(shù)據(jù)緩存器空標(biāo)志)、TxFIF0Ful I (發(fā)送數(shù)據(jù)緩存器滿標(biāo)志)、RxFIFOEmpty(接收數(shù)據(jù)緩存器空標(biāo)志)、RxFIFOFull (接收數(shù)據(jù)緩存器滿標(biāo)志)和M0DF。SPI控制器可支持不同組合的CPHA和CPOL傳輸參數(shù),支持8位、16位和32位的數(shù)據(jù)傳輸,以及支持最高位先傳輸MLFS=I或者最低位先傳輸MLFS=O。其中,MLFS(MSB LSBFirst Select,高低位選擇‘I’為MSB First最高位先傳輸,‘0’為LSB First最低位先傳輸)。本發(fā)明另一方面針對(duì)SPI控制器還提供一種SPI控制器的通信方法,包括,S1、系統(tǒng)復(fù)位,有限狀態(tài)機(jī)處于空閑狀態(tài),SS輸出高電平,SCLK輸出即CPOL ;S2、CPU配置SPI控制器為主機(jī)MSS=I,不使能MODF (M0DFFEN=0),使能SPI控制器(SPIEN=I),SPI控制器為主機(jī)并等待SPI傳輸;S3、CPU將要傳輸?shù)臄?shù)據(jù)寫入發(fā)送數(shù)據(jù)緩存器,該寫操作將啟動(dòng)SPI傳輸SPI控制器檢測(cè)到發(fā)送數(shù)據(jù)緩存器中有數(shù)據(jù)(TxFIFOEmpty=O)就讀出發(fā)送數(shù)據(jù)緩存器中的數(shù)據(jù)并啟動(dòng)SPI傳輸;S4、有限狀態(tài)機(jī)保持空閑狀態(tài),當(dāng)檢測(cè)到遞增計(jì)數(shù)器計(jì)數(shù)為ClockNumber/2-l,有限狀態(tài)機(jī)處于開始狀態(tài),并將SS輸出低電平開始SPI傳輸;S5、有限狀態(tài)機(jī)保持開始狀態(tài),當(dāng)遞增計(jì)數(shù)器計(jì)數(shù)到ClockNumber/2-l時(shí)SCLK輸出翻轉(zhuǎn),以產(chǎn)生SCLK時(shí)鐘輸出,同時(shí)SS輸出低電平,ClockNumber (波特率數(shù)值);S6、有限狀態(tài)機(jī)處于傳輸狀態(tài)直至數(shù)據(jù)傳輸結(jié)束,進(jìn)入結(jié)束狀態(tài);進(jìn)一步地,還包括,S7、有限狀態(tài)機(jī)保持在結(jié)束狀態(tài)到遞增計(jì)數(shù)器計(jì)數(shù)到ClockNumber/2-l,之后有限狀態(tài)機(jī)進(jìn)行狀態(tài)轉(zhuǎn)換S8、如圖8所示,當(dāng)CPHA=O,有限狀態(tài)機(jī)進(jìn)入空閑狀態(tài),同時(shí)SS輸出高電平并結(jié)束當(dāng)前SPI傳輸、等待下次SPI傳輸;S9、如圖9所示,當(dāng)CPHA=I,如果發(fā)送數(shù)據(jù)緩存器中仍存有數(shù)據(jù),有限狀態(tài)機(jī)進(jìn)入傳輸狀態(tài),同時(shí)保持SS輸出低電平開始下次SPI傳輸;反之,如果發(fā)送數(shù)據(jù)緩存器中無數(shù)據(jù),有限狀態(tài)機(jī)進(jìn)入空閑狀態(tài),同時(shí)SS輸出高電平并結(jié)束當(dāng)前SPI傳輸、等待下次SPI傳輸。其中,上述SPI傳輸為S10, CPU配置SPI控制器為主機(jī),并判斷SPI主機(jī)系統(tǒng)類型;S11、當(dāng)為多SPI主機(jī)系統(tǒng),需檢測(cè)MODF,CPU配置SPI控制器使能MODF,SPI控制器配置SS為輸入并檢測(cè)SS輸入電平SS為低電平,有其他的SPI主機(jī)操作SPI總線,此時(shí)SPI控制器硬件自動(dòng)配置為從機(jī),并向CPU報(bào)告MODF ;SS為高電平,沒有其他的SPI主機(jī)操作SPI總線,SPI控制器可以配置為主機(jī)并開始SPI傳輸,CPU配置SPI控制器不使能MODF,SPI控制器配置SS為輸出,準(zhǔn)備SPI傳輸;當(dāng)為單SPI主機(jī)系統(tǒng),CPU配置不使能MODF,SPI控制器配置SS為輸出,準(zhǔn)備SPI傳輸;S12、CPU寫操作波特率寄存器配置SCLK波特率參數(shù);SCLK時(shí)鐘頻率=系統(tǒng)時(shí)鐘頻率/波特率寄存器的值,其中,最低位永遠(yuǎn)為0,即波特率寄存器的值為偶數(shù),系統(tǒng)時(shí)鐘頻率為SPI控制器所掛的內(nèi)部總線接口時(shí)鐘工作頻率。S13、CPU寫操作控制寄存器配置SPI傳輸參數(shù),如CPHA、CPOL ;S14、CPU將待傳輸?shù)臄?shù)據(jù)寫入發(fā)送數(shù)據(jù)緩存器;數(shù)據(jù)轉(zhuǎn)換模塊將發(fā)送數(shù)據(jù)緩存器中的數(shù)據(jù)讀出進(jìn)行并串轉(zhuǎn)換后輸出至M0SI,同時(shí)將輸入MISO進(jìn)行串并轉(zhuǎn)換后寫入到接收數(shù)據(jù)緩存器;S15、持續(xù)SPI控制器數(shù)據(jù)傳輸;S16、當(dāng)發(fā)送數(shù)據(jù)緩存器中還有數(shù)據(jù),需繼續(xù)傳輸執(zhí)行步驟S14,并開始下次傳輸,否則傳輸結(jié)束。S17、CPU讀取接收數(shù)據(jù)緩存器里面接收到的數(shù)據(jù)。其中,步驟S17可選擇性的應(yīng)用;步驟S10-S17是CPU操作SPI控制器實(shí)現(xiàn)SPI傳輸?shù)牧鞒?。以上所述本發(fā)明的具體實(shí)施方式
,并不構(gòu)成對(duì)本發(fā)明保護(hù)范圍的限定。任何根據(jù)本發(fā)明的技術(shù)構(gòu)思所作出的各種其他相應(yīng)的改變與變形,均應(yīng)包含在本發(fā)明權(quán)利要求的保護(hù)范圍內(nèi)。
權(quán)利要求
1.一種SPI控制器,包括內(nèi)部總線接口模塊,用于經(jīng)內(nèi)部總線實(shí)現(xiàn)CPU操作SPI控制器、寄存器模塊,接收通過內(nèi)部總線接口模塊傳輸?shù)腃PU對(duì)SPI控制器的配置、數(shù)據(jù)轉(zhuǎn)換模塊,用于輸出數(shù)據(jù)并串轉(zhuǎn)換和輸入數(shù)據(jù)串并轉(zhuǎn)換、狀態(tài)與中斷控制模塊,用于報(bào)告SPI控制器的狀態(tài)和產(chǎn)生中斷,其特征在于,還包括有限狀態(tài)機(jī),用于根據(jù)寄存器模塊中控制寄存器寄存的SPI傳輸參數(shù)和波特率寄存器寄存的SCLK波特率參數(shù)產(chǎn)生SS和SCLK輸出;發(fā)送和接收數(shù)據(jù)緩存器,分別用于緩存待傳輸和接收到的數(shù)據(jù); 所述有限狀態(tài)機(jī)包括空閑、開始、傳輸和結(jié)束四個(gè)狀態(tài)。
2.根據(jù)權(quán)利要求1所述的SPI控制器,其特征在于,所述SPI控制器還包括發(fā)送數(shù)據(jù)緩存器和接收數(shù)據(jù)緩存器,所述接收數(shù)據(jù)緩存器用于緩存SPI控制器接收到的數(shù)據(jù); 所述接收數(shù)據(jù)緩存器,進(jìn)行如下控制接收數(shù)據(jù)緩存器中數(shù)據(jù)存滿后,當(dāng)有新數(shù)據(jù)寫入接收數(shù)據(jù)緩存器時(shí),最先寫入的數(shù)據(jù)被最先寫入的數(shù)據(jù)之后的數(shù)據(jù)覆蓋,依次類推,最后寫入的數(shù)據(jù)之前的數(shù)據(jù)被最后寫入的數(shù)據(jù)覆蓋,進(jìn)而形成一數(shù)據(jù)空間存儲(chǔ)寫入的新數(shù)據(jù)。
3.根據(jù)權(quán)利要求2所述的SPI控制器,其特征在于,所述數(shù)據(jù)轉(zhuǎn)換模塊包括輸出數(shù)據(jù)并串轉(zhuǎn)換單元和輸入數(shù)據(jù)串并轉(zhuǎn)換單元, 所述輸出數(shù)據(jù)并串轉(zhuǎn)換單元用于讀取發(fā)送數(shù)據(jù)緩存器中的并行數(shù)據(jù)后進(jìn)行并串轉(zhuǎn)換后輸出,其中,當(dāng)SPI控制器被配置為主機(jī)時(shí),輸出至MOSI信號(hào)線;反之,當(dāng)SPI控制器被配置為從機(jī)時(shí),輸出至MISO信號(hào)線; 所述輸入數(shù)據(jù)串并轉(zhuǎn)換單元用于將輸入串行數(shù)據(jù)后進(jìn)行串并轉(zhuǎn)換寫入接收數(shù)據(jù)緩存器,其中,當(dāng)SPI控制器被配置為主機(jī)時(shí),輸入為MISO信號(hào)線;反之,當(dāng)SPI控制器被配置為從機(jī)時(shí),輸入為MOSI信號(hào)線。
4.根據(jù)權(quán)利要求1所述的SPI控制器,其特征在于,所述寄存器模塊包括控制寄存器和波特率寄存器,所述控制寄存器用于接收并寄存CPU配置SPI傳輸參數(shù);所述波特率寄存器用于接收并寄存CPU配置SCLK時(shí)鐘波特率參數(shù)。
5.根據(jù)權(quán)利要求4所述的SPI控制器,其特征在于,所述傳輸參數(shù)包括SPIE、MSS、CPHA、CPOL、MODFEN 和 DataSize。
6.根據(jù)權(quán)利要求5所述的SPI控制器,其特征在于,所述CPHA和CPOL傳輸參數(shù),支持8位、16位或32位的數(shù)據(jù)傳輸、最高位先傳輸或者最低位先傳輸。
7.—種SPI控制器的通信方法,其特征在于,包括, 51、系統(tǒng)復(fù)位,有限狀態(tài)機(jī)處于空閑狀態(tài),SS輸出高電平,SCLK輸出即CPOL; 52、CPU配置SPI控制器為主機(jī),不使能M0DF,使能SPI控制器,SPI控制器為主機(jī)并等待SPI傳輸; 53、CPU將待傳輸?shù)臄?shù)據(jù)寫入發(fā)送數(shù)據(jù)緩存器,寫操作將啟動(dòng)SPI傳輸; 54、有限狀態(tài)機(jī)保持空閑狀態(tài),當(dāng)檢測(cè)到遞增計(jì)數(shù)器計(jì)數(shù)為ClockNumber/2-l,有限狀態(tài)機(jī)進(jìn)入開始狀態(tài),并將SS輸出低電平開始SPI傳輸; 55、有限狀態(tài)機(jī)保持開始狀態(tài),當(dāng)遞增計(jì)數(shù)器計(jì)數(shù)到ClockNumber/2-l時(shí)SCLK輸出翻轉(zhuǎn),同時(shí)SS輸出低電平; 56、有限狀態(tài)機(jī)處于傳輸狀態(tài)直至數(shù)據(jù)傳輸結(jié)束,進(jìn)入結(jié)束狀態(tài)。
8.根據(jù)權(quán)利要求7所述的SPI控制器的通信方法,其特征在于,還包括, S7、有限狀態(tài)機(jī)保持在結(jié)束狀態(tài)到遞增計(jì)數(shù)器計(jì)數(shù)到ClockNumber/2-l,之后有限狀態(tài)機(jī)進(jìn)行狀態(tài)轉(zhuǎn)換 ·58、當(dāng)CPHA=O,有限狀態(tài)機(jī)進(jìn)入空閑狀態(tài),同時(shí)SS輸出高電平并結(jié)束當(dāng)前SPI傳輸、等待下次SPI傳輸; ·59、當(dāng)CPHA=O,如果發(fā)送數(shù)據(jù)緩存器中仍存有數(shù)據(jù),有限狀態(tài)機(jī)進(jìn)入傳輸狀態(tài),同時(shí)保持SS輸出低電平開始下次SPI傳輸;反之,如果發(fā)送數(shù)據(jù)緩存器中無數(shù)據(jù),有限狀態(tài)機(jī)進(jìn)入空閑狀態(tài),同時(shí)SS輸出高電平并結(jié)束當(dāng)前SPI傳輸、等待下次SPI傳輸。
9.根據(jù)權(quán)利要求8所述的SPI控制器的通信方法,其特征在于,所述SPI傳輸為 510、CPU配置SPI控制器為主機(jī),并判斷SPI主機(jī)系統(tǒng)類型; 511、當(dāng)為多SPI主機(jī)系統(tǒng),檢測(cè)MODF,CPU配置SPI控制器使能MODF,SPI控制器配置SS為輸入并檢測(cè)SS輸入電平SS為低,有其他的SPI主機(jī)操作SPI總線,此時(shí)SPI控制器硬件自動(dòng)配置為從機(jī),并向CPU報(bào)告MODF ;SS為高,沒有其他的SPI主機(jī)操作SPI總線,SPI控制器可以配置為主機(jī)并開始SPI傳輸,CPU配置SPI控制器不使能M0DF,SPI控制器配置SS為輸出,準(zhǔn)備SPI傳輸; 當(dāng)為單SPI主機(jī)系統(tǒng),CPU配置SPI控制器為主機(jī)并且不使能MODF,SPI控制器配置SS為輸出,準(zhǔn)備SPI傳輸; 512、CPU寫操作波特率寄存器配置SCLK波特率參數(shù); 513、CPU寫操作控制寄存器配置SPI傳輸參數(shù); 514、(PU將待傳輸?shù)臄?shù)據(jù)寫入發(fā)送數(shù)據(jù)緩存器;數(shù)據(jù)轉(zhuǎn)換模塊將發(fā)送數(shù)據(jù)緩存器中的數(shù)據(jù)讀出后進(jìn)行并串轉(zhuǎn)換后輸出至M0SI,同時(shí)輸入MISO進(jìn)行串并轉(zhuǎn)換后寫入到接收數(shù)據(jù)緩存器; 515、持續(xù)SPI控制器數(shù)據(jù)傳輸; 516、當(dāng)發(fā)送數(shù)據(jù)緩存器中還有數(shù)據(jù),需繼續(xù)傳輸執(zhí)行步驟S14,并開始下次傳輸,否則傳輸結(jié)束。
10.根據(jù)權(quán)利要求9所述的SPI控制器的通信方法,其特征在于,S17、CPU讀取接收數(shù)據(jù)緩存器里面接收到的數(shù)據(jù)。
全文摘要
本發(fā)明涉及一種SPI控制器,包括內(nèi)部總線接口模塊,寄存器模塊,數(shù)據(jù)轉(zhuǎn)換模塊,狀態(tài)與中斷控制模塊,發(fā)送和接收數(shù)據(jù)緩存器,還包括有限狀態(tài)機(jī),用于根據(jù)寄存器模塊中控制寄存器寄存的SPI傳輸參數(shù)和波特率寄存器寄存的SCLK波特率參數(shù)產(chǎn)生SS和SCLK輸出。本發(fā)明提供的改進(jìn)型SPI控制器,1)當(dāng)被配置為主機(jī)時(shí),SS輸出完全由SPI控制器硬件自動(dòng)控制,無需軟件控制模擬SS輸出,2)接收數(shù)據(jù)緩存器中數(shù)據(jù)的讀取是可選的,減少了不必要的CPU讀取接收數(shù)據(jù)緩存器操作,上述兩點(diǎn)大大減少CPU操作SPI控制器時(shí)所需的軟件控制,從而提高CPU的使用率。
文檔編號(hào)G06F13/20GK103064805SQ201210572669
公開日2013年4月24日 申請(qǐng)日期2012年12月25日 優(yōu)先權(quán)日2012年12月25日
發(fā)明者段長江, 聶澤東 申請(qǐng)人:深圳先進(jìn)技術(shù)研究院
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
临沂市| 修武县| 宁晋县| 罗平县| 北海市| 日喀则市| 申扎县| 阿拉善盟| 彭阳县| 万盛区| 青田县| 师宗县| 松潘县| 安丘市| 武义县| 界首市| 文昌市| 定兴县| 顺平县| 吉木萨尔县| 石泉县| 黔江区| 商南县| 万载县| 山东省| 禄丰县| 神木县| 永济市| 甘南县| 舟山市| 甘泉县| 阿勒泰市| 海林市| 汽车| 马公市| 旌德县| 洪洞县| 福泉市| 天津市| 东莞市| 二连浩特市|