全功能SPI接口的設(shè)計(jì)與實(shí)現(xiàn)
寫入SPICRR寄存器里的Char0~Char3位將會(huì)配置SPI狀態(tài)控制模塊里的計(jì)數(shù)器。狀態(tài)控制是系統(tǒng)的核心部分,為了使系統(tǒng)結(jié)構(gòu)化,設(shè)計(jì)了狀態(tài)機(jī),如圖3所示,分為3種狀態(tài),分別是空閑狀態(tài)、發(fā)送命令狀態(tài)(配置SPI各個(gè)寄存器)、數(shù)據(jù)狀態(tài)。其中數(shù)據(jù)狀態(tài)包括數(shù)據(jù)的傳送和讀取。本文引用地址:http://2s4d.com/article/153493.htm
作為全功能SPI接口,在設(shè)計(jì)時(shí)加入了測(cè)試模塊。使能相關(guān)地址譯碼,將使系統(tǒng)內(nèi)部關(guān)鍵節(jié)點(diǎn)通過(guò)輸出控制模塊傳送到數(shù)據(jù)總線。
2.3 全功能SPI控制器的時(shí)鐘設(shè)計(jì)
SPI控制器為了和外部數(shù)據(jù)進(jìn)行交換,根據(jù)外設(shè)工作要求,其輸出串行同步時(shí)鐘極性和時(shí)鐘相位可以進(jìn)行匹配。但時(shí)鐘極性對(duì)傳輸協(xié)議沒(méi)有重大影響。如圖4所示,全功能SPI控制器包括4種不同的時(shí)鐘模式:
無(wú)延時(shí)的上升沿:SPI在SPICLK信號(hào)上升沿發(fā)送數(shù)據(jù),在SPICLK信號(hào)下降沿接收數(shù)據(jù);
無(wú)延時(shí)的下降沿:SPI在SPICLK信號(hào)下降沿發(fā)送數(shù)據(jù),在SPICLK信號(hào)上升沿接收數(shù)據(jù);
有延時(shí)的上升沿:SPI在SPICLK信號(hào)上升沿之前的半個(gè)周期發(fā)送數(shù)據(jù),在SPICLK信號(hào)下降沿接收數(shù)據(jù);
有延時(shí)的下降沿:SPI在SPICLK信號(hào)下降沿之前的半個(gè)周期發(fā)送數(shù)據(jù),在SPICLK信號(hào)上升沿接收數(shù)據(jù);
對(duì)于SPI控制器內(nèi)部時(shí)鐘的產(chǎn)生,在對(duì)系統(tǒng)時(shí)鐘進(jìn)行分頻之后,還要對(duì)生成的時(shí)鐘進(jìn)行一定處理,因?yàn)榉诸l后的時(shí)鐘其高電平時(shí)間是幾個(gè)系統(tǒng)時(shí)鐘周期的和,控制移位寄存器的時(shí)鐘采用的是系統(tǒng)時(shí)鐘,為了在SPICLK的一個(gè)時(shí)鐘周期內(nèi)只移位一位數(shù)據(jù),必須要求內(nèi)部時(shí)鐘的高電平時(shí)間為一個(gè)系統(tǒng)時(shí)鐘的周期,才能保證在SPICLK的一個(gè)時(shí)鐘周期內(nèi),只有一位數(shù)據(jù)的接收和發(fā)送。
圖5為實(shí)現(xiàn)上述功能的具體電路,即SPI控制器時(shí)鐘產(chǎn)生的電路結(jié)構(gòu)。在圖5中,分頻后的時(shí)鐘為DICLK,作為與門的一個(gè)輸入端進(jìn)入模塊后對(duì)其進(jìn)行處理。節(jié)點(diǎn)Y1和Y2的輸出方程為:
分頻時(shí)鐘DICLK通過(guò)節(jié)點(diǎn)Y1和Y2后,其高電平時(shí)間僅為一個(gè)系統(tǒng)時(shí)鐘周期,且Y1較Y2延遲半個(gè)周期。MUX1的選擇端S來(lái)自配置寄存器的Phase端,選擇有延遲的Y1還是無(wú)延遲的Y2通過(guò)。分頻后的時(shí)鐘將被用于兩個(gè)用途,一是產(chǎn)生SPICLK作為從控制器的輸入時(shí)鐘。二是作為主控制器的內(nèi)部時(shí)鐘,被用于計(jì)數(shù)器的計(jì)數(shù)脈沖和用于控制串行移位寄存器SPIDAT。
評(píng)論