SPI簡介:
SPI,是英語Serial Peripheral Interface的縮寫,顧名思義就是串行外圍設備接口。SPI,是一種高速的,全雙工,同步的通信總線,并且在芯片的管腳上只占用四根線。
SPI 規定了兩個 SPI 設備之間通信必須由主設備 (Master) 來控制次設備 (Slave). 一個 Master 設備可以通過提供 Clock 以及對 Slave 設備進行片選 (Slave Select) 來控制多個 Slave 設備, SPI 協議還規定 Slave 設備的 Clock 由 Master 設備通過 SCK 管腳提供給 Slave 設備, Slave 設備本身不能產生或控制 Clock, 沒有 Clock 則 Slave 設備不能正常工作。
SPI總線是Motorola公司推出的三線同步接口,同步串行3線方式進行通信:一條時鐘線SCK,一條數據輸入線MOSI,一條數據輸出線MISO;用于 CPU與各種外圍器件進行全雙工、同步串行通訊。
SPI相關的縮寫或說法:
SPI的極性Polarity和相位Phase,最常見的寫法是CPOL和CPHA,不過也有一些其他寫法,簡單總結如下:
(1) CKPOL (Clock Polarity) = CPOL = POL = Polarity = (時鐘)極性
(2) CKPHA (Clock Phase) = CPHA = PHA = Phase = (時鐘)相位
(3) SCK=SCLK=SPI的時鐘
(4) Edge=邊沿,即時鐘電平變化的時刻,即上升沿(rising edge)或者下降沿(falling edge)
對于一個時鐘周期內,有兩個edge,分別稱為:
Leading edge=前一個邊沿=第一個邊沿,對于開始電壓是1,那么就是1變成0的時候,對于開始電壓是0,那么就是0變成1的時候;
Trailing edge=后一個邊沿=第二個邊沿,對于開始電壓是1,那么就是0變成1的時候(即在第一次1變成0之后,才可能有后面的0變成1),對于開始電壓是0,那么就是1變成0的時候;
本實驗默認設置CPOL=0,CPHA=0。
實驗要求:
按照SPI原理設計一個接收電路與一個發送電路,并作為從機進行自環測試。
實驗過程:
SPI的特點即外部從機串行輸入輸出數據,而主機可以并行讀取寫入數據。一個SPI從機必需四個輸入信號:sck——串行同步時鐘;ncs——片選信號;mosi——主機輸出從機輸入信號;miso——主機輸入從機輸出信號。同時還需要一個clk時鐘信號和一個rst復位信號。
本實驗共分為三個部分:myspi從機模塊,bcd2led輸出數據顯示模塊,sck_counter串行同步脈沖生成模塊。
1.從機模塊:
從機模塊又分為三個部分:sck跳變沿檢測部分,spi接收部分,spi發送部分。
sck跳變沿檢測部分:使用寄存器記錄SCK狀態,由狀態判斷SCK是否出現跳變沿。代碼截圖如下:
spi接收電路部分:當復位信號無效、片選信號有效且出現SCK上跳沿時,接收電路進入狀態一,接收寄存器(8位)通過左移方式存入mosi數據,存滿8位后進入狀態二,將接收標志信號置為1,等待4個時鐘周期后進入狀態三,將接收標志信號清零并返回狀態一。具體代碼截圖如下:
spi發送電路部分:當接收標志信號置1時發送標志信號也置為1。當復位信號無效、片選信號有效且發送標志信號為1時,發送電路進入狀態一,發送寄存器從數據緩存區中讀出8位數據進入狀態二,如果出現出現SCK上跳沿則從發送寄存器中取出最高位作為miso發送,進入狀態三,如果出現出現SCK下跳沿則將發送寄存器左移一位,最低位寫入0,直至發送寄存器中8位數據全部發送完畢,進入狀態四,將發送標志信號和miso信號都置為0,返回狀態一。具體代碼截圖如下:
2. 輸出數據顯示模塊:
將從機模塊輸出的miso信號傳入數據顯示模塊中,若miso為1則時七段液晶顯示管顯示數字1,若miso為0則顯示數字0,。具體代碼截圖如下:
3.sck脈沖生成模塊:
每10次clk時鐘周期使SCK信號跳反一次,該sck信號作為從機模塊的sck輸入信號。具體實現代碼截圖如下:
代碼編寫完成后管腳分配截圖如下:
把代碼下載DE0開發板后置SW0高電平,SW1低電平,SW2控制輸入數據,手動按BUTTON28次后存入對應8位數據,再手動按8次對應顯示上次輸入的8位數據。
上一篇:模擬SPI實現和調試流程
下一篇:stm32的斷言機制(assert)的理解
推薦閱讀
史海拾趣
Arima Lasers Corp的初期,是一個典型的初創企業,面臨著資金短缺和技術難題的雙重壓力。然而,公司的研發團隊在激光技術方面取得了重大突破,成功開發出一種新型的激光發射器,具有更高的功率和更穩定的性能。這一技術突破不僅吸引了投資者的關注,也為公司在市場上贏得了初步的聲譽。隨著產品的不斷迭代和優化,Arima Lasers Corp逐漸在激光行業中占據了一席之地。
Celduc Relais公司注重企業文化的建設,倡導創新、協作、責任和卓越的核心價值觀。公司通過舉辦各類文化活動、培訓和學習等方式,提升員工的凝聚力和歸屬感。同時,公司還建立了完善的激勵機制,鼓勵員工積極創新、追求卓越。這一舉措為公司的發展提供了強大的文化支撐和人才保障。
這五個故事只是Celduc Relais公司發展歷程中的冰山一角,但它們足以展現出公司在技術創新、市場拓展、質量管理、環保理念和企業文化建設等方面的努力和成就。正是這些因素的共同作用,使得Celduc Relais公司在電子行業中脫穎而出,成為一家備受尊敬的企業。
在獲得多輪融資后,H&D Wireless加快了全球化戰略的步伐。公司計劃利用融資資金進行全球業務擴張,并發布物聯網云服務平臺,以支持更多應用程序實現非現金支付和位置追蹤服務。此外,H&D Wireless還透露了上市計劃,考慮在斯德哥爾摩納斯達克北歐交易所(Nasdaq First North)尋求上市。這一計劃將為公司帶來更多的資金支持和市場關注,進一步推動其全球化發展。
高頻電子的業務范圍廣泛且多元化,主要包括FEI-NY、Gillam-FEI和FEI-Zyfer三個部門。FEI-NY部門主要負責紐約總部設施和子公司FEI-Asia與FEI-Elcom的運營;Gillam-FEI部門則負責比利時與法國的業務,并專注于電纜網絡同步產品的設計、研發和生產;FEI-Zyfer部門則主要經營公司加州業務,并設計生產附帶GPS技術的產品。這種多元化業務布局不僅降低了公司的經營風險,還實現了各業務之間的戰略協同和資源共享。
高頻電子深知技術創新是企業持續發展的核心動力。因此,公司一直保持著對研發的持續投入,不斷推出新產品、新技術和新服務。同時,高頻電子還積極與高校、科研機構等合作,共同開展前沿技術的研發和應用。這些努力使得高頻電子在技術創新方面始終保持著領先地位,為公司的長期發展奠定了堅實的基礎。
綜上所述,高頻電子通過戰略轉型、技術創新、全球化布局、多元化業務布局以及持續投入研發等舉措,實現了從一家小型國防合同制造商到全球領先的高科技供應商的華麗蛻變。這些故事不僅展現了高頻電子的發展歷程和成就,也為我們揭示了企業成功背后的關鍵因素。
在公司的發展過程中,DDP Engineered LED Solutions公司高度重視團隊建設和人才培養。公司建立了完善的組織架構和人力資源管理體系,通過內部培訓和外部引進相結合的方式,不斷提升員工的專業素養和綜合能力。同時,公司還注重營造積極向上的企業文化氛圍,激發員工的工作熱情和創造力。正是這些努力,讓DDP的團隊成為了推動公司不斷前進的重要力量。
本帖最后由 paulhyde 于 2014-9-15 09:09 編輯 比賽時會用到的 [ 本帖最后由 燕子寶貝 于 2009-9-1 21:01 編輯 ] … 查看全部問答∨ |
我附件的程序有個問題: 如果修改了參數不按SET突然斷電就保存不了,,要修改為只要修改了參數不按SET也可以自動保存 把哪個地方修了發個說明過來,...最好發個修改后完整的版本和完整版本哪里有修改的說明過來....麻煩了,,, … 查看全部問答∨ |
MSP430芯片SPI的驅動程序,存儲器用的芯片AT45DB161D 編譯時找不到頭文件include "AT45DB161D.h" 我寫的程序是關于MSP430的SPI驅動,實現數據的簡單讀寫,但在編譯時總提示 找不到頭文件 include "AT45DB161D.h"的源文件,下面是我寫的程序: #include <msp430x16x.h> #include "AT45DB161D.h" #define NOP() { _nop_ ...… 查看全部問答∨ |
|
.Net Compact Framework 1.1中有沒有獲得當前線程ID的方法? .Net Compact Framework 1.1中有沒有獲得當前線程ID的方法? 完全版中倒是有AppDomain.GetCurrentThreadID() coredll.dll中有沒有我也不知道。 哪位大蝦幫幫我啊~… 查看全部問答∨ |
|
使用EP2C35 FPGA 設計了多個串口工作,出現了幾個問題. 第一次, 由于內核電源1.2V 供電不是完整平面,而是帶狀線供電,EP2C35 在代碼容量大的情況下,而且輸入FPGA 信號變換頻繁, 造成整個EP2C35 所有的D觸發器停止翻轉. 經過多次驗證, 只要輸入 ...… 查看全部問答∨ |
請問:Error[e16]: Segment CSTACK (size: 0x50 align: 0x1) is too long for segment de Error[e16]: Segment CSTACK (size: 0x50 align: 0x1) is too long for segment definition. At least 0x4 more bytes needed. The pro××em occurred while processing the segment placement command "-Z(DATA)CSTACK+_STACK_SIZE#", wher ...… 查看全部問答∨ |