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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

雙CPU通過普通IO口通信3線雙向零等待通信的詳細概述

Wildesbeast ? 來源:福星電子網 ? 作者:佚名 ? 2019-11-09 11:08 ? 次閱讀

3線雙向零等待IO通訊機制

許多設備需要通過IO通訊交互數(shù)據,怎樣才做到速度最快,通訊可靠,所用資源又少呢?

下面介紹一個我編寫的通訊協(xié)議:

它沒有1線,2線那樣節(jié)省IO資源,但是它的通訊速度絕對最快,無需延時,且不用中斷,還可以

對等傳輸。

實際情況下C51編寫,實現(xiàn)了50us傳輸一個字節(jié),折合160Kbps左右,晶振22M。

特點如下:

使用3根普通IO通訊

不使用中斷

雙方都可以主動發(fā)起數(shù)據通訊,也都可以被動接收數(shù)據,即可以對等傳輸。

有發(fā)送和接收的檢查等待機制,發(fā)送方知道對方什么時候收了數(shù)據,接收方知道發(fā)送方什么時

候發(fā)了數(shù)據。

無需進行數(shù)據延時,最大可能地加快了通訊速度。

CPU閑的時候通訊速率可以最快。忙的時候又可以無限等待。保證絕對同步,不會出錯。

雙方CPU工作速度可以任意,即使是51和P4通訊,也能保證正確無誤。

ask w1 w2 w3 w4 w5 w6 w7 w8

MCLK ┐┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌───

└┘ └──┘ └──┘ └──┘ └──┘

SDT ___┌─┐┌─┐┌─┐┌─┐┌─┐┌─┐┌─┐┌─┐________

└─┘└─┘└─┘└─┘└─┘└─┘└─┘└─┘

SCLK ┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌─

└─┘ └──┘ └──┘ └──┘ └──┘

res r1 r2 r3 r4 r5 r6 r7 r8

1.主機發(fā)起通訊申請到從機

主機檢測MCLK是否為0,為0的話是對方在申請通訊,退出函數(shù)。

主機檢測到MCLK=1,表示通訊空閑。

主機將MCLK=0,表示申請通訊。 之后檢測SCLK是否為0(是否響應通訊)

2.從機響應通訊,從機在閑時檢測MCLK是否為0,發(fā)現(xiàn)為0則主機向它發(fā)起了通訊申請。

從機將SCLK=0,表示接受申請,之后檢測MCLK是否變?yōu)?,如果是1則主機已經發(fā)出了第一個bit

的數(shù)據。

3.主機發(fā)現(xiàn)SCLK=0,知道從機已經開始準備接受數(shù)據。

4.主機發(fā)送第一個bit到SDA.

5.主機將MCLK=1,表示已經發(fā)送第一個bit到SDA.

6.從機發(fā)現(xiàn)MCLK=1,知道主機已經發(fā)出第一個數(shù)據

7.從機收第一個bit的數(shù)據。

8.從機將SCLK=1,表示已經收了第一個bit.之后等待MCLK是否變0,如果變0,則主機已經發(fā)出

了第二個bit

9.主機發(fā)現(xiàn)SCLK=1,知道從機已經開始準備接受第二個數(shù)據。

10.主機發(fā)送第二個bit到SDA.

11.主機將MCLK=0,表示已經發(fā)送第二個bit到SDA.

12.從機發(fā)現(xiàn)MCLK=0,知道主機已經發(fā)出第二個數(shù)據

13.從機收第二個bit的數(shù)據。

14.從機將SCLK=0,表示已經收了第二個bit.之后等待MCLK是否變1,如果變1,則主機已經發(fā)出

了第三個bit

15.再重復3-14,3遍,傳完8bit數(shù)據。

16.主機發(fā)現(xiàn)SCLK=0,知道從機已經收完8位數(shù)據

17.主機將MCLK=1,準備下一輪通訊

18.從機發(fā)現(xiàn)MCLK=1,知道主機已經收起MCLK

19.從機將SCLK=1,準備下一輪通訊

附源代碼:

sbit MCLK=P3^5;

sbit SCLK=P3^6;

sbit SDA=P3^7;

uchar bdata DATA;

sbit BIT0=DATA^0;

sbit BIT7=DATA^7;

// 發(fā)送一個數(shù)據

putbytespi(uchar ch)

{

uchar i;

uint c;

if(!MCLK)return; //

MCLK=0; //申請通訊

DATA=ch;

for(i=4;i!=0;i--)

{

while(SCLK); //檢測從機響應

SDA=BIT0; //放一個bit到SDA

MCLK=1;

DATA=DATA》》1; //準備下一個bit

while(!SCLK); //檢測從機響應

SDA=BIT0; //放一個bit到SDA

MCLK=0;

DATA=DATA》》1; //準備下一個bit

}

while(SCLK); //檢測從機收完

MCLK=1;

while(!SCLK);//等待從機準備好

SDA=1;

}

//接收一個數(shù)據

//調用之前最好檢測MCLK是否為0(對方是否申請數(shù)據通訊)再進入,否則里面是死等此信

號!

uchar getbytespi()

{

uchar i;

while(MCLK);

SCLK=0; //接受通訊請求

for(i=4;i!=0;i--)

{

DATA=DATA》》1; //準備收下一個bit

while(!MCLK); //檢測主機放數(shù)據

BIT7=SDA;//收一個bit

SCLK=1;

DATA=DATA》》1; //準備收下一個bit

while(MCLK); //檢測主機放數(shù)據

BIT7=SDA; //收一個bit

SCLK=0;

}

while(!MCLK); //檢測主機發(fā)完

SCLK=1;

return(DATA);

}

責任編輯 LK

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

    關注

    0

    文章

    418

    瀏覽量

    38881
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10702

    瀏覽量

    209373
  • 通信
    +關注

    關注

    18

    文章

    5880

    瀏覽量

    135317
收藏 人收藏

    評論

    相關推薦

    請問有關于STM32普通IO模擬操作SMBus通信的相關實踐經驗嗎?

    求助啊,哪位有關于STM32普通IO模擬操作SMBus通信的相關實踐經驗?分享下,多謝。普通IO
    發(fā)表于 10-22 08:43

    AT32F403A 224K RAM 和非等待區(qū)關系詳解

    等待區(qū)(ZW)使用,96K劃給用戶使用作為RAM使用256K的非等待區(qū)里可以通過軟件配置將其中的128K劃出來給用戶作為RAM使用,那么此時用戶就有96+128K RAM可以使用,這
    發(fā)表于 11-20 21:25

    普通IO做模擬通信設計的方法

    給從機的目的。(因沒有使用到從機給主機發(fā)數(shù)據,所以沒有設計)二、使用過程設計在比較熟悉Iic、Spi通信協(xié)議,了解時鐘、數(shù)據之后,便可以嘗試使用
    發(fā)表于 02-09 06:50

    怎樣通過IO端口模擬實現(xiàn)單片機與從設備的SPI通信

    IO模擬SPI根據SPI通信規(guī)范,與IO模擬I2C類似,通過
    發(fā)表于 02-17 07:19

    CH32V307等待區(qū)和非等待區(qū)的區(qū)別是什么?

    and non-0waiting areas),分為了等待區(qū)和非等待區(qū),那么請問:1、這個非等待
    發(fā)表于 05-13 06:52

    如何提升非等待區(qū)Flash效能

    部分 AT32 帶有非等待區(qū),當代碼超過等待區(qū)后,且時鐘不高于 72MHz,讀取Flash 的效能會降低。此時不改變外圍時鐘,如何快速修改程序以提高 Flash 效能?
    發(fā)表于 10-20 08:26

    閃存等待(ZW)和非等待(NZW)說明

    閃存等待區(qū)(ZW)和非等待區(qū)(NZW)有何區(qū)別?請說明。
    發(fā)表于 10-20 07:01

    如何利用AT32系列MCU存儲器中的等待區(qū)(ZW)

    本應用筆記詳細描述了如何利用AT32系列MCU存儲器中的等待區(qū)(ZW),實現(xiàn)在擦除或者編程過程中保證CPU重要內容正常運行,免受MCU失速影響。
    發(fā)表于 10-24 08:17

    基于RAM的LonWorks智能通信節(jié)點設計

    介紹一種基于RAM 的LonWorks 現(xiàn)場總線智能通信節(jié)點的設計方法,并給出詳細的設計步驟、硬件及軟件實現(xiàn)。通過此LonWorks 智
    發(fā)表于 04-15 10:17 ?23次下載

    基于RAM的CPU并行通信的研究與實現(xiàn)

    本文從現(xiàn)代通信系統(tǒng)的要求出發(fā),詳細研究了利用RAM 來實現(xiàn)CPU 之間高速的并行數(shù)據
    發(fā)表于 08-26 11:56 ?40次下載

    基于RAM的LonWorks智能通信節(jié)點設計

    ?摘要:介紹一種基于RAM的LonWorks現(xiàn)場總線智能通信節(jié)點的設計方法,并給出詳細的設計步驟、硬件及軟件實現(xiàn)。通過此LonWor
    發(fā)表于 03-24 12:46 ?1225次閱讀
    基于<b class='flag-5'>雙</b><b class='flag-5'>口</b>RAM的LonWorks智能<b class='flag-5'>通信</b>節(jié)點設計

    3雙向等待IO通訊機制

    許多設備需要通過IO通訊交互數(shù)據,怎樣才做到速度最快,通訊可靠,所用資源又少呢?下面介紹一個我編寫的通訊協(xié)議
    發(fā)表于 09-28 17:53 ?921次閱讀

    3雙向等待IO通訊機制

    許多設備需要通過IO通訊交互數(shù)據,怎樣才做到速度最快,通訊可靠,所用資源又少呢?下面介紹一個我編寫的通訊協(xié)議:它沒有1,2那樣節(jié)省IO
    發(fā)表于 12-21 09:48 ?17次下載
    <b class='flag-5'>3</b><b class='flag-5'>線</b><b class='flag-5'>雙向</b><b class='flag-5'>零</b><b class='flag-5'>等待</b><b class='flag-5'>IO</b>通訊機制

    IO模擬SPI

    IO模擬SPI根據SPI通信規(guī)范,與IO模擬I2C類似,通過
    發(fā)表于 12-22 19:17 ?20次下載
    <b class='flag-5'>IO</b><b class='flag-5'>口</b>模擬SPI

    關于stm32單片機準雙向IO配置

    我們在開始學習51內核的單片機的時候就知道,p0的引腳都是雙向IO,P1,P2,P3IO
    發(fā)表于 12-24 19:19 ?19次下載
    關于stm32單片機準<b class='flag-5'>雙向</b><b class='flag-5'>IO</b><b class='flag-5'>口</b>配置