一種非分時(shí)端口復(fù)用方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種通訊裝置技術(shù)領(lǐng)域,特別是一種非分時(shí)端口復(fù)用方法及裝置。
【背景技術(shù)】
[0002]在數(shù)據(jù)通訊中,經(jīng)常碰到這樣的情況:主控設(shè)備需要與多個(gè)外圍設(shè)備同時(shí)通訊,而主控設(shè)備上的通訊端口數(shù)量有限,無法同時(shí)連接多個(gè)外圍設(shè)備。例如:1,GNSS終端(全球?qū)Ш叫l(wèi)星系統(tǒng))的CPU要與GNSS接收機(jī)、電臺(tái)、藍(lán)牙、GPRS (通用無線分組業(yè)務(wù))、電腦等設(shè)備連接,每個(gè)設(shè)備都需要一到兩個(gè)串口,而CPU上是很難提供這么多串口的;2,藍(lán)牙設(shè)備目前在廣泛使用,而MCU或者CPU通過藍(lán)牙設(shè)備連接外圍串口設(shè)備,一個(gè)藍(lán)牙設(shè)備也只能連接一個(gè)串口外圍設(shè)備,對于I2C總線的設(shè)備也無法連接。這大大限制了藍(lán)牙的可用性。此前也有一種設(shè)備來解決串口復(fù)用的問題,但是所采用的是模擬開關(guān)分時(shí)復(fù)用的原理,在一個(gè)時(shí)刻,只能由一個(gè)外圍設(shè)備可以和主控設(shè)備通訊,一旦錯(cuò)過這個(gè)時(shí)間片,則數(shù)據(jù)就發(fā)生丟失的現(xiàn)象,并且只能連接串口設(shè)備,無法真正解決端口復(fù)用的問題。
【發(fā)明內(nèi)容】
[0003]本發(fā)明正是為了解決上述問題,用一種操作簡便的裝置,準(zhǔn)確、快速、批量地測量相機(jī)的快門延遲時(shí)間。
[0004]本發(fā)明的技術(shù)方案提供一種非分時(shí)端口復(fù)用方法,設(shè)置微處理器MCU,MCU上分配一個(gè)端口與主控設(shè)備進(jìn)行連接,稱為主控端口,再針對每一個(gè)外圍設(shè)備分別分配一個(gè)對應(yīng)的端口進(jìn)行連接,稱為外圍端口,對每一個(gè)外圍端口預(yù)先命名,作為端口數(shù)據(jù)標(biāo)志;主控設(shè)備發(fā)送數(shù)據(jù)到各外圍設(shè)備時(shí),在發(fā)送的數(shù)據(jù)前面加上相應(yīng)外圍端口的“端口數(shù)據(jù)標(biāo)志”;MCU執(zhí)行以下流程,
步驟1,從MCU內(nèi)部的非易失性存儲(chǔ)器中讀取預(yù)存的各端口的參數(shù);
步驟2,根據(jù)讀取的參數(shù)配置各個(gè)端口 ;
步驟3,判斷主控端口是否收到數(shù)據(jù),若否則進(jìn)入步驟5,若是則進(jìn)入步驟4 ;
步驟4,判斷主控端口收到的數(shù)據(jù)是否是指令,
是則區(qū)分是哪種類型的指令,如果是端口的配置指令,則執(zhí)行配置指令并存儲(chǔ)參數(shù),如果是復(fù)位指令,則直接復(fù)位MCU ;然后進(jìn)入步驟5 ;
否則根據(jù)收到的數(shù)據(jù)中攜帶的“端口數(shù)據(jù)標(biāo)志”確定數(shù)據(jù)發(fā)送的目的外圍端口,將去掉“端口數(shù)據(jù)標(biāo)志”的數(shù)據(jù)轉(zhuǎn)發(fā)至對應(yīng)外圍端口 ;然后進(jìn)入步驟5 ;
步驟5,判斷各外圍端口是否收到數(shù)據(jù),
是則根據(jù)收到數(shù)據(jù)的外圍端口,在數(shù)據(jù)頭部添加“端口數(shù)據(jù)標(biāo)志”,然后轉(zhuǎn)發(fā)到主控端口,最后返回繼續(xù)執(zhí)行步驟3,
否則直接返回繼續(xù)執(zhí)行步驟3。
[0005]而且,所述區(qū)分是哪種類型的指令,根據(jù)數(shù)據(jù)頭部的預(yù)定標(biāo)識(shí)判斷實(shí)現(xiàn)。
[0006]而且,MCU上分配的端口類型為UART、IIC、SPI總線接口或其他類型。
[0007]本發(fā)明提供一種非分時(shí)端口復(fù)用裝置,設(shè)置微處理器MCU,MCU上分配一個(gè)端口與主控設(shè)備進(jìn)行連接,稱為主控端口,再針對每一個(gè)外圍設(shè)備分別分配一個(gè)對應(yīng)的端口進(jìn)行連接,稱為外圍端口,對每一個(gè)外圍端口預(yù)先命名,作為端口數(shù)據(jù)標(biāo)志;主控設(shè)備包括標(biāo)識(shí)添加單元,用于發(fā)送數(shù)據(jù)到各外圍設(shè)備時(shí),在發(fā)送的數(shù)據(jù)前面加上相應(yīng)外圍端口的“端口數(shù)據(jù)標(biāo)志” ;MCU中包括以下單元,
參數(shù)讀取單元,用于從MCU內(nèi)部的非易失性存儲(chǔ)器中讀取預(yù)存的各端口的參數(shù); 初始化單元,用于根據(jù)讀取的參數(shù)配置各個(gè)端口 ;
主控端口接收判斷單元,用于判斷主控端口是否收到數(shù)據(jù),若否則進(jìn)入步驟5,若是則進(jìn)入步驟4 ;
指令判斷單元,單元判斷主控端口收到的數(shù)據(jù)是否是指令,
是則區(qū)分是哪種類型的指令,如果是端口的配置指令,則執(zhí)行配置指令并存儲(chǔ)參數(shù),如果是復(fù)位指令,則直接復(fù)位MCU ;然后命令外圍端口接收判斷單元工作;
否則根據(jù)收到的數(shù)據(jù)中攜帶的“端口數(shù)據(jù)標(biāo)志”確定數(shù)據(jù)發(fā)送的目的外圍端口,將去掉“端口數(shù)據(jù)標(biāo)志”的數(shù)據(jù)轉(zhuǎn)發(fā)至對應(yīng)外圍端口 ;然后命令外圍端口接收判斷單元工作;
外圍端口接收判斷單元,用于判斷各外圍端口是否收到數(shù)據(jù),
是則根據(jù)收到數(shù)據(jù)的外圍端口,在數(shù)據(jù)頭部添加“端口數(shù)據(jù)標(biāo)志”,然后轉(zhuǎn)發(fā)到主控端口,命令主控端口接收判斷單元工作,
否則直接命令主控端口接收判斷單元工作。
[0008]而且,指令判斷單元中,所述區(qū)分是哪種類型的指令,根據(jù)數(shù)據(jù)頭部的預(yù)定標(biāo)識(shí)判斷實(shí)現(xiàn)。
[0009]而且,MCU上分配的端口類型為UART、IIC、SPI總線接口或其他類型。
[0010]本發(fā)明使用一個(gè)微處理器(MCU)來協(xié)調(diào)主控設(shè)備和外圍設(shè)備的端口之間的數(shù)據(jù)流,主控設(shè)備與外圍設(shè)備不是直接連接,而是經(jīng)過MCU轉(zhuǎn)發(fā),并采用“端口數(shù)據(jù)標(biāo)志”的方法區(qū)分端口,由于MCU有自己的存儲(chǔ)器,因此系統(tǒng)可以同時(shí)緩存多個(gè)端口的數(shù)據(jù),不必再使用分時(shí)的方法,避免了數(shù)據(jù)丟失,提高了處理能力。由于MCU自身具備一些通訊端口并且具有強(qiáng)大的可擴(kuò)展性(例如軟件仿真端口),因此本發(fā)明中的端口復(fù)用不再限于串口,而是任何MCU支持的通訊端口類型,例如IIC、IIS等總線接口。裝置的接口包括一個(gè)主控端口和幾個(gè)外圍端口,主控端口接主控設(shè)備,外圍端口接外圍設(shè)備。如果把主控端口接到一個(gè)藍(lán)牙設(shè)備上,就可以把帶有藍(lán)牙功能的主控設(shè)備的藍(lán)牙仿真串口擴(kuò)展成多個(gè)端口復(fù)用。
【附圖說明】
[0011]圖1為本發(fā)明實(shí)施例結(jié)構(gòu)圖;
圖2為本發(fā)明實(shí)施例流程圖。
【具體實(shí)施方式】
[0012]以下結(jié)合附圖和實(shí)施例對本發(fā)明技術(shù)方案進(jìn)行具體描述。
[0013]本發(fā)明實(shí)施例使用一個(gè)微處理器(MCU)來協(xié)調(diào)主控設(shè)備端口與外圍設(shè)備端口之間的數(shù)據(jù),主控設(shè)備與外圍設(shè)備之間不再是直接連接,而是通過MCU進(jìn)行轉(zhuǎn)發(fā),其實(shí)現(xiàn)方法是: MCU上分配一個(gè)端口與主控設(shè)備連接,再給每一個(gè)外圍設(shè)備分配一個(gè)對應(yīng)的端口分別連接;
MCU上收到來自外圍設(shè)備的數(shù)據(jù)后,在其數(shù)據(jù)頭部添加“端口識(shí)別標(biāo)志”,以對不同端口進(jìn)行區(qū)分,然后將帶有“端口識(shí)別標(biāo)志”頭部的數(shù)據(jù)轉(zhuǎn)發(fā)到主控設(shè)備;
MCU上收到來自主控設(shè)備的數(shù)據(jù)后,首先判斷其頭部的“端口識(shí)別標(biāo)志”,根據(jù)“端口只別標(biāo)志”,將數(shù)據(jù)發(fā)送到正確的外圍設(shè)備端口 ;
MCU上收到來自主控設(shè)備的數(shù)據(jù)后,如果數(shù)據(jù)頭部不是“端口識(shí)別標(biāo)志”而是設(shè)備配置指令,則根據(jù)指令內(nèi)容對端口進(jìn)行參數(shù)設(shè)置或者將本裝置復(fù)位等操作。
[0014]以上所涉及的“端口”包括但不僅限于UART、IIC、SPI總線接口。UART為通用異步收發(fā)器;Iic為一種由PHILIPS公司開發(fā)的兩線式串行總線,用于連接微控制器及其外圍設(shè)備;SPI總線是串行外設(shè)接口總線,是一種高速,全雙工,同步通信總線。
[0015]具體實(shí)施時(shí),首先選擇一款本身通訊端口比較豐富的MCU,例如ST公司出品的STM32F系列的MCU中有多款可以滿足這個(gè)要求,已經(jīng)實(shí)現(xiàn)的方案是在STM32F103上開發(fā)的,該M⑶具有5個(gè)UART和一個(gè)IIC接口;
主控設(shè)備和外圍設(shè)備不直接連接,而是由MCU上分配一個(gè)端口與主控設(shè)備進(jìn)行連接,稱為主控端口,再針對每一個(gè)外圍設(shè)備分別分配一個(gè)對應(yīng)的端口進(jìn)行連接,稱為外圍端口,對每一個(gè)外圍端口預(yù)先命名,作為端口數(shù)據(jù)標(biāo)志;
可確定主控端口的類型(一般是UART/IIC/SPI三者之一),例如主控端口是UART總線接口,記為UARTO ;
可確定外圍端口的類型,例如有5個(gè)外圍設(shè)備,有4個(gè)為UART總線接口,I個(gè)為IIC接P,分別記為 UART1、UART2、UART3、UART4、IICl ;
對每一個(gè)外圍設(shè)備的通訊端口命名作為端口數(shù)據(jù)標(biāo)志,命名原則是簡單清晰,例如將UARTl、UART2、UART3、UART4、IICl,分別命名為 Ul、U2、U3、U4、11,以便在數(shù)據(jù)流前加“端口數(shù)據(jù)標(biāo)志”進(jìn)行區(qū)分。
[0016]基于MCU可以實(shí)現(xiàn)如下功能:
如果收到來自外圍設(shè)備的數(shù)據(jù),則根據(jù)端口名稱,在數(shù)據(jù)流前面加上“端口數(shù)據(jù)標(biāo)志”,例如數(shù)據(jù)來自于UART1,則在數(shù)據(jù)前加上“U1”(表示UARTl)作為標(biāo)志,然后將加了標(biāo)志的數(shù)據(jù)轉(zhuǎn)發(fā)到UARTO ;
如果收到來自主控設(shè)備的數(shù)據(jù),則首先分析“端口數(shù)據(jù)標(biāo)志”,例如數(shù)據(jù)以“U4”開頭,表示這個(gè)數(shù)據(jù)是要發(fā)給連接到UART4的外圍設(shè)備的,則將端口數(shù)據(jù)標(biāo)志“U4”去掉,然后將數(shù)據(jù)發(fā)到UART4 ;
如果收到來自主控端口 UARTO的數(shù)據(jù)頭部不是“端口識(shí)別標(biāo)志”而是以預(yù)定標(biāo)識(shí)(例如“!CONFIG”)開頭,則說明這是一個(gè)設(shè)備配置指令,不對此后的數(shù)據(jù)轉(zhuǎn)發(fā),而是根據(jù)數(shù)據(jù)