RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

面向接口的編程——SPI總線和IIC總線

AGk5_ZLG_zhiyua ? 來源:互聯(lián)網(wǎng) ? 作者:佚名 ? 2017-10-26 18:20 ? 次閱讀

>>> 4.4.1 中斷與事件驅(qū)動

無論采用哪種總線都使用時鐘信號和數(shù)據(jù)/控制線,時鐘信號由 MCU 主機(jī)進(jìn)行控制。用于控制的信號線中的 SPI 為 4 根,除了具有傳輸?shù)男盘柾?,還具有片選信號,通過該信號的有效與否,主機(jī)指定哪個器件作為目標(biāo)對象。

>>> 4.6.1 SPI 總線簡介

在這里,以 LPC824 為例來介紹主機(jī) SPI 的原理和應(yīng)用設(shè)計。

  • SSEL:片選輸入

當(dāng) SPI 作為主機(jī)時,則在串行數(shù)據(jù)啟動前驅(qū)動 SSEL 信號,使之變?yōu)橛行顟B(tài),并在串行數(shù)據(jù)發(fā)送后釋放該信號,使之變?yōu)闊o效狀態(tài)。默認(rèn) SSEL 為低電平有效,也可將其選為高電平有效。當(dāng) SPI 作為從機(jī)時,處于有效狀態(tài)的任意 SSEL 信號都表示該從機(jī)正在被尋址。

  • MOSI :主機(jī)輸出從機(jī)輸入

MOSI 信號可將串行數(shù)據(jù)從主機(jī)傳送到從機(jī)。當(dāng) SPI 作為主機(jī)時,則串行數(shù)據(jù)從 MOSI輸出;當(dāng) SPI 作為從機(jī)時,則串行數(shù)據(jù)從 MOSI 輸入。

  • MISO :主機(jī)輸入從機(jī)輸出

MISO 信號可將串行數(shù)據(jù)由從機(jī)傳送到主機(jī)。當(dāng) SPI 作為主機(jī)時,則串行數(shù)據(jù)從 MISO輸入;當(dāng) SPI 作為從機(jī)時,則串行數(shù)據(jù)輸出至 MISO。

  • SCK:時鐘信號

SCK 同步數(shù)據(jù)傳送時鐘信號。它由主機(jī)驅(qū)動從機(jī)接收,使用 SPI 接口時,則時鐘可編程為高電平有效或低電平有效。

>>> 4.6.2 74HC595 接口

在同一時鐘信號作用下,74HC595 實(shí)現(xiàn)數(shù)據(jù)的串行輸入/并行輸出轉(zhuǎn)換。除了 8 個并行輸出口之外,74HC595 還有 5 個輸入控制口,其中的Q 7 ~ Q 0 端輸出;同時將V CC ,從而保證 74HC595 處于永久選通狀態(tài)。另外還有 3 個輸入端:CP 時鐘信號端、D 數(shù)據(jù)輸入端與 STR 鎖存信號,其分別連接 MCU 的 SCK、MOSI 與 SSEL,詳見圖 4.18。

圖 4.18 74HC595 電路圖

在 CP 時鐘信號上升沿的作用下,保證將加載 D端的二進(jìn)制數(shù)據(jù)依次送入 74HC595 中。當(dāng)數(shù)據(jù)移位完成后,在 STR 上升沿的作用下,數(shù)據(jù)將一次性地在 Q 7 ~ Q 0 端輸出,從而保證在移位的過程中,輸出端的數(shù)據(jù)保持不變。

MiniPort-595 模塊采用 74HC595 擴(kuò)展 8 路 I/O,可以直接驅(qū)動 LED 顯示模塊,其對應(yīng)AM824-Core 的 MiniPort 接口 J4 功能定義詳見圖 4.19(b)。MiniPort-595 模塊輸出信號引腳J2 功能定義詳見圖 4.19(c)。

圖 4.19 595 模塊實(shí)物與控制接口定義

假設(shè)要將 1000 0000 串行傳送到 74HC595 的并行輸出端 Q 7 ~ Q 0,此數(shù)據(jù)在時鐘脈沖的作用下,從 Q 7 ~ Q 0逐位送到串行數(shù)據(jù)輸入端 D。待 8 個時鐘脈沖過后,10000000在Q 7 ~ Q 0并行輸出。AMetal針對 74HC595 提供了相應(yīng)的 hc595.h 接口,詳見程序清單 4.44。

程序清單 4.44 hc595.h 接口

由此可見,在初始化 74HC595 相關(guān)的操作后調(diào)用 hc595_send_data(),則串行輸入并行輸出一個 8 位二進(jìn)制數(shù),74HC595 的輸出管腳當(dāng)作 8位 I/O 口使用。此前控制 8 個 LED 流水燈不得不使用 8 個 I/O 口,現(xiàn)在有了 74HC595,則可以節(jié)省的更多 I/O 口留作其它用途。

顯然,只要將 AM824-Core 主機(jī)、MiniPort-595 模塊的 MiniPort A(排針)與 MiniPort-LED 模塊的 MiniPort B(排母)直接對插即可,其原理圖詳見圖 4.20,模塊的組合詳見圖 4.21(a),組合之后對應(yīng) MCU 的 MiniPort 接口 J4 端口功能定義詳見圖 4.21(b),MCU 通過 STR、CP和 D 這 3 個端口控制 74HC595 芯片驅(qū)動8 個 LED,詳見程序清單 4.45。

圖 4.20 8 路輸出 I/O 擴(kuò)展

圖 4.21 模塊組合實(shí)物與控制接口定義

程序清單 4.45 74HC595 通用接口范例程序

顯然,同樣可以用 74HC595 來驅(qū)動數(shù)碼管的 8 個段,其原理圖詳見圖 4.22。

圖 4.22 2 位數(shù)碼驅(qū)動電路

將AM824-Core、MiniPort-595模塊的MiniPort A(排針)與MiniPort-View模塊的MiniPort B(排母)3 個模塊直接對插即可,詳見圖 4.23(a),組合之后對應(yīng) MCU 的MiniPort接口J4功能定義詳見圖4.23 (b)。MCU 除了使用 STR、CP 和 D 端口控制74HC595,還需要使用 COM0 和 COM1控制數(shù)碼管的位選。

圖 4.23 模塊組合實(shí)物與控制接口定義

其實(shí)使用 74HC595 與直接使用 I/O驅(qū)動數(shù)碼管,唯一的不同是段碼的輸出方式不一樣,因此僅需修改段碼傳送函數(shù),并將實(shí)現(xiàn)代碼添加到digitron1.c 中,詳見程序清單 4.46。

程序清單 4.46 新增 74HC595 驅(qū)動數(shù)碼管的相關(guān)函數(shù)

由于用戶不會直接調(diào)用 digitron_hc595_segcode_set(),因此僅將 digitron_hc595_init()和digitron_hc595_disp_scan()添加到程序清單 4.47 所示的 digitron1.h 接口中。

程序清單 4.47 digitron1.h

當(dāng)使用 74HC595 驅(qū)動數(shù)碼管時,只要調(diào)用相關(guān)函數(shù)即可,詳見程序清單 4.48。

程序清單 4.48 74HC595 驅(qū)動數(shù)碼管實(shí)現(xiàn)秒計數(shù)器范例程序

4.7 I2C 總線

>>> 4.7.1 I2C 總線簡介

I2C 總線(Inter Integrated Circuit)是 NXP 公司開發(fā)的用于連接微控制器與外圍器件的兩線制總線,不僅硬件電路非常簡潔,而且還具有極強(qiáng)的復(fù)用性和可移植性。I2C 總線不僅適用于電路板內(nèi)器件之間的通信,而且通過中繼器還可以實(shí)現(xiàn)電路板與電路板之間長距離的信號傳輸,因此使用 I2C 器件非常容易構(gòu)建系統(tǒng)級電子產(chǎn)品開發(fā)平臺。其特點(diǎn)如下:

  • 總線僅需 2 根信號線,減少了電路板的空間和芯片管腳的數(shù)量,降低了互連成本;

  • 同一條 I2C 總線上可以掛接多個器件,器件之間按不同的編址區(qū)分,因此不需要任何附加的 I/O 或地址譯碼器;

  • 非常容易實(shí)現(xiàn) I2C 總線的自檢功能,以便及時發(fā)現(xiàn)總線的異常情況;

  • 總線電氣兼容性好,I2C 總線規(guī)定器件之間以開漏 I/O 互連,因此只要選取適當(dāng)?shù)纳侠?a target="_blank">電阻就能輕易實(shí)現(xiàn) 3V/5V 邏輯電平的兼容;

  • 支持多種通信方式,一主多從是最常見的通信方式。此外還支持雙主機(jī)通信、多主機(jī)通信與廣播模式;

  • 通信速率高,其標(biāo)準(zhǔn)傳輸速率為100Kbps (每秒100K位),在快速模式下為400Kbps,按照后來修訂的版本,位速率可高達(dá) 3.4Mbps。

>>> 4.7.2 LM75B 接口

AM824-Core 選擇與 LM75A 兼容的 LM75B 數(shù)字測溫傳感器,其關(guān)斷模式下消耗的電流僅為 1μA。

1. 特性

LM75B 是 NXP 半導(dǎo)體推出的具有 I2C 接口的數(shù)字溫度傳感器芯片,其關(guān)鍵特性如下:

  • 器件地址 1001xxx,同一總線上可以外擴(kuò) 8 個器件;

  • 供電范圍:2.8~5.5V,溫度范圍:-55~125℃;

  • 11 位 ADC 提供溫度分辨率達(dá) 0.125℃;

  • 精度:±2℃(-25~100℃),±3℃(-55~125℃)。

LM75B 的管腳排列詳見圖 4.24,從機(jī)地址為 0x90,A0~A2 分別為地址選擇位 0~2,且必須在 SCL 串行時鐘輸入與 SDA 串行數(shù)據(jù)信號線上添加上拉電阻。當(dāng)芯片過熱時,則關(guān)斷輸出。

圖 4.24 LM75B 管腳圖

2. 應(yīng)用電路

LM75B 典型應(yīng)用電路詳見圖 4.25,R5 和 R6 是 I2C總線的上拉電阻。由于板載只有一片 LM75B,因此不用考慮芯片的地址問題,即可將芯片的 A0~A2 引腳直接接地。OS 為芯片的過熱輸出,可以外接繼電器等器件實(shí)現(xiàn)獨(dú)立溫控器的功能。由于是通過 MCU 實(shí)現(xiàn)測溫的,因此該引腳可以懸空。只要短接(J13_1、J13_2)與(J11_1、J11_2),則 SDA、SCL 分別與 PIO0_18、PIO0_16 相連。

圖 4.25 LM75B 應(yīng)用電路圖

如圖 4.26 所示為 AM824-Core 的加熱電路,R32 的阻值為 20~50Ω(2W)。短接 J14_2與J14_3即可將焊接在LM75B附近的加熱電阻R32與KEY相連,當(dāng) KEY 鍵按下時,則 R32 開始發(fā)熱,此時電阻上產(chǎn)生的熱量會通過較粗的導(dǎo)線傳導(dǎo)到 LM75B 的下面,于是LM75B 也會跟著熱起來。如果電阻越小,則通過的電流越大,產(chǎn)生的熱量也就越大。當(dāng)按鍵按下時電路導(dǎo)通,這時可以通過測溫電路觀察溫度上升情況。

圖 4.26 加熱電路

3. 溫度測量

針對 LM75B,AMetal 提供了相應(yīng)的軟件包,其函數(shù)原型為:

顯然,使用這兩個通用接口,很容易讀取當(dāng)前的溫度值。由于只有兩位數(shù)碼管,因此只顯示整數(shù)部分;當(dāng)溫度為負(fù)數(shù)時,也不顯示負(fù),僅顯示溫度值,詳見程序清單 4.49。

程序清單 4.49 LM75 溫度讀取和顯示范例程序

將程序編譯后下載到開發(fā)板上運(yùn)行,如果數(shù)碼管顯示 28,表示當(dāng)前溫度為 28℃。如果按下加熱按鍵,則低阻值加熱電阻 R32 開始發(fā)熱,那么顯示的溫度值會不斷升高。

在顯示溫度值時,之所以將溫度值右移了 8 位,這是因?yàn)?lm75_read()讀取的數(shù)值是實(shí)際溫度的 256 倍,所以實(shí)際溫度應(yīng)該是讀取的值除以 256.0。同時,由于不需要顯示小數(shù)部分,所以直接右移 8 位,就表示除以了 256,只剩下了整數(shù)部分。

>>> 4.7.3 溫控器

下面將結(jié)合此前編寫的程序,使用 LED、蜂鳴器、數(shù)碼管、矩陣鍵盤和溫度采集,實(shí)現(xiàn)一個簡易的溫控器。

1. 功能簡介

使用標(biāo)準(zhǔn)I2C接口LM75B溫度傳感器采集溫度在數(shù)碼管上顯示,由于只有兩位數(shù)碼管,因此只顯示整數(shù)部分;當(dāng)溫度為負(fù)數(shù)時,也不顯示負(fù),僅顯示溫度值。

可設(shè)置溫度上限值和溫度下限值,當(dāng)溫度高于上限值或低于下限值時,則蜂鳴器鳴叫。

2. 狀態(tài)指示

在調(diào)節(jié)過程中,使用兩個 LED 用于狀態(tài)指示,用短路跳線器連接 J9 和 J10 即可。

  • LED0 亮:表明當(dāng)前值為上限值,數(shù)碼管顯示上限值;

  • LED1 亮:表明當(dāng)前值為下限值,數(shù)碼管顯示下限值;

  • 兩燈閃爍:表明正常運(yùn)行狀態(tài),數(shù)碼管顯示環(huán)境溫度值。

3. 操作說明

設(shè)置上下限值時,共計使用 4 個按鍵。即:

  • SET 鍵:用于進(jìn)入設(shè)置狀態(tài)。點(diǎn)擊后首先進(jìn)入溫度上限值設(shè)定,再次點(diǎn)擊可進(jìn)入溫度下限值設(shè)定,再次點(diǎn)擊回到正常運(yùn)行狀態(tài);

  • 左移/右移鍵:用于切換當(dāng)前調(diào)節(jié)的位(個位/十位)。當(dāng)進(jìn)入設(shè)置狀態(tài)后,當(dāng)前調(diào)節(jié)的位會不斷的閃爍;點(diǎn)擊該鍵可以切換當(dāng)前調(diào)節(jié)的位,由個位切換到十位,或由十位切換到個位;

  • 加 1 鍵:當(dāng)進(jìn)入設(shè)置狀態(tài)后,當(dāng)前調(diào)節(jié)的位會不斷的閃爍,按該鍵可以使該位上的數(shù)值增加 1;

  • 減 1 鍵:當(dāng)進(jìn)入設(shè)置狀態(tài)后,當(dāng)前調(diào)節(jié)的位會不斷的閃爍,按該鍵可以使該位上的數(shù)值增減 1。

(1)設(shè)置上限值

首次按下 SET 鍵進(jìn)入上限值設(shè)置,此時 LED0 點(diǎn)亮,數(shù)碼管顯示上限值溫度,個位不停閃爍。按“加 1 鍵”或“減 1 鍵”可以對當(dāng)前閃爍位上得值進(jìn)行調(diào)整,按下“左移/右移鍵”可以切換當(dāng)前調(diào)節(jié)的位。

(2)設(shè)置下限值

在設(shè)置上限值的基礎(chǔ)上,再次點(diǎn)擊 SET 鍵即可進(jìn)入下限值的設(shè)定,此時 LED1 點(diǎn)亮,數(shù)碼管顯示下限值溫度,個位不停閃爍。按“加 1 鍵”或“減 1 鍵”可以對當(dāng)前閃爍位上的值進(jìn)行調(diào)整,按“左移/右移鍵”可以切換當(dāng)前調(diào)節(jié)的位。

4. 功能實(shí)現(xiàn)

如程序清單 4.50 所示為溫控器的范例程序,程序中比較繁瑣的是按鍵的處理程序。為了使程序結(jié)構(gòu)更加清晰,分別對 3 種按鍵:切換狀態(tài)(KEY0)、切換當(dāng)前調(diào)節(jié)位(KEY2)、調(diào)節(jié)當(dāng)前位的值(KEY1 和 KEY3)寫了 3 個函數(shù),各個函數(shù)直接在 key_process()按鍵處理程序中調(diào)用。其它部分均在 while(1)主循環(huán)中完成,主要完成 3 件事情:溫度值的采集,每隔 500ms 進(jìn)行一次;鍵盤掃描,每隔 10ms 進(jìn)行一次;數(shù)碼管掃描,每隔 5ms 進(jìn)行一次。

程序清單 4.50 綜合實(shí)驗(yàn)范例程序


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • SPI總線
    +關(guān)注

    關(guān)注

    4

    文章

    103

    瀏覽量

    27586
  • IIC總線
    +關(guān)注

    關(guān)注

    1

    文章

    66

    瀏覽量

    20297
  • 接口編程
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

    8733

原文標(biāo)題:周立功:面向接口的編程——SPI 總線和IIC 總線

文章出處:【微信號:ZLG_zhiyuan,微信公眾號:ZLG致遠(yuǎn)電子】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    IIC總線SPI總線的比較

    現(xiàn)今,在低端數(shù)字通信應(yīng)用領(lǐng)域,我們隨處可見IIC (Inter-Integrated Circuit) 和 SPI (Serial Peripheral Interface)的身影。原因是這兩種
    發(fā)表于 09-26 09:30 ?2520次閱讀
    <b class='flag-5'>IIC</b><b class='flag-5'>總線</b>和<b class='flag-5'>SPI</b><b class='flag-5'>總線</b>的比較

    IIC總線通訊接口器件的CPLD實(shí)現(xiàn)

    IIC總線通訊接口器件的CPLD實(shí)現(xiàn)摘要:介紹了采用ALTERA公司的可編程器件EPF10K10LC84-3實(shí)現(xiàn)IIC
    發(fā)表于 10-30 14:57

    IIC總線SPI總線通信詳解

    IIC總線SPI總線通信介紹
    發(fā)表于 12-23 07:02

    IIC總線具有哪些特點(diǎn)

    4路模擬輸入、一路DAC輸出和一個IIC總線接口。其主要的功能特性如下:單電源供電,典型值為5V。通過3個硬件地址引腳編址。8位逐次逼近式A/D轉(zhuǎn)換。片上跟蹤與保持電路,采樣速率取決與IIC
    發(fā)表于 12-09 07:40

    基于PC/104 總線與CPLD 的SPI 接口設(shè)計

    本文根據(jù)SPI 同步串行接口的通信協(xié)議,介紹了在CPLD 中利用VHDL 語言實(shí)現(xiàn)PC/104 總線擴(kuò)展SPI 接口的設(shè)計原理和
    發(fā)表于 05-30 09:28 ?41次下載

    數(shù)字接口系列文章之SPI總線

    數(shù)字接口系列文章之SPI總線  串行外設(shè)接口 (SPI) 總線是一種運(yùn)行于全雙工模式下的同步串
    發(fā)表于 01-08 10:46 ?903次閱讀
    數(shù)字<b class='flag-5'>接口</b>系列文章之<b class='flag-5'>SPI</b><b class='flag-5'>總線</b>

    SPI接口總線介紹

    SPI接口總線介紹 SPI 可以作為主、從器件工作,并可在同一總線上支持多個主、從器件。SPI
    發(fā)表于 11-24 08:41 ?4848次閱讀
    <b class='flag-5'>SPI</b><b class='flag-5'>接口</b><b class='flag-5'>總線</b>介紹

    IIC總線接口學(xué)習(xí)

    在多主設(shè)備IIC 總線模式下,多個S3C2440A 微處理器可以從從屬設(shè)備接收或發(fā)送串行數(shù)據(jù)。主設(shè)備S3C2440A 可以初始化和終止一個基于IIC 總線的數(shù)據(jù)傳輸。在S3C2440A
    發(fā)表于 04-27 15:31 ?61次下載
    <b class='flag-5'>IIC</b><b class='flag-5'>總線</b><b class='flag-5'>接口</b>學(xué)習(xí)

    深度解析IICSPI總線協(xié)議的區(qū)別與應(yīng)用場景

    IIC vs SPI: 哪位是贏家?我們來對比一下IICSPI的一些關(guān)鍵點(diǎn): 第一,總線拓?fù)浣Y(jié)構(gòu)/信號路由/硬件資源耗費(fèi)
    的頭像 發(fā)表于 12-22 16:48 ?1.9w次閱讀
    深度解析<b class='flag-5'>IIC</b>和<b class='flag-5'>SPI</b><b class='flag-5'>總線</b>協(xié)議的區(qū)別與應(yīng)用場景

    IIC總線接口的資料詳細(xì)說明

    S3C2440A RISC 微處理器可以支持多主設(shè)備 IIC 總線串行接口。專用串行數(shù)據(jù)線(SDA)和串行時鐘線(SCL)承載總線主設(shè)備和連接IIC
    發(fā)表于 05-18 08:00 ?6次下載
    <b class='flag-5'>IIC</b><b class='flag-5'>總線</b><b class='flag-5'>接口</b>的資料詳細(xì)說明

    基于SPI串行總線接口的Verilog實(shí)現(xiàn)

    簡 介: 集成電路設(shè)計越來越向系統(tǒng)級的方向發(fā)展,并且越來越強(qiáng)調(diào)模塊化的設(shè)計。SPI(Serial Peripheral Bus)總線是Motorola公司提出的一個同步串行外設(shè)接口,容許CPU
    的頭像 發(fā)表于 05-29 10:16 ?5095次閱讀
    基于<b class='flag-5'>SPI</b>串行<b class='flag-5'>總線</b><b class='flag-5'>接口</b>的Verilog實(shí)現(xiàn)

    SPI總線介紹

    SPI總線主要特點(diǎn)· 全雙工;· 可以當(dāng)作主機(jī)或從機(jī)工作;· 提供頻率可編程時鐘;· 發(fā)送結(jié)束中斷標(biāo)志;· 寫沖突保護(hù);.總線競爭保護(hù)等。2.SPI
    發(fā)表于 12-05 19:21 ?10次下載
    <b class='flag-5'>SPI</b><b class='flag-5'>總線</b>介紹

    數(shù)字接口(續(xù))— SPI 總線

    數(shù)字接口(續(xù))— SPI 總線
    發(fā)表于 11-07 08:07 ?0次下載
    數(shù)字<b class='flag-5'>接口</b>(續(xù))— <b class='flag-5'>SPI</b> <b class='flag-5'>總線</b>

    淺談SPI總線通信接口及其協(xié)議

    上篇內(nèi)容我們介紹了IIC總線通信接口及其協(xié)議,這一篇文章我們介紹另一種項(xiàng)目開發(fā)中非常常見的通信接口——SPI
    的頭像 發(fā)表于 03-22 16:11 ?1793次閱讀
    淺談<b class='flag-5'>SPI</b><b class='flag-5'>總線</b>通信<b class='flag-5'>接口</b>及其協(xié)議

    AXI IIC總線接口介紹

    LogiCORE?IPAXI IIC總線接口連接到AMBA?AXI規(guī)范,提供低速、兩線串行總線接口,可連接大量流行的設(shè)備。
    的頭像 發(fā)表于 09-28 15:56 ?5244次閱讀
    RM新时代网站-首页