国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

一線總線器件異步讀寫(xiě)實(shí)現(xiàn)方法

2014-06-01 09:19于志豪肖林京張瑞雪槐瑞托
自動(dòng)化儀表 2014年1期
關(guān)鍵詞:時(shí)序隊(duì)列中斷

于志豪 常 龍 肖林京 張瑞雪 槐瑞托

(山東科技大學(xué)機(jī)械電子工程學(xué)院1,山東 青島 266590;山東科技大學(xué)信息與電氣工程學(xué)院2,山東 青島 266590)

0 引言

一線總線技術(shù)將地址線、數(shù)據(jù)線、控制線、電源線合為一根信號(hào)線,這根信號(hào)線上允許掛數(shù)百個(gè)使用一線總線技術(shù)的測(cè)控對(duì)象,較大規(guī)模地減少了測(cè)控設(shè)備的引線數(shù)量[1]。一線總線結(jié)構(gòu)的數(shù)字式溫度傳感器以其檢測(cè)精度高、抗干擾力強(qiáng)、硬件結(jié)構(gòu)簡(jiǎn)單等諸多優(yōu)點(diǎn)得以廣泛應(yīng)用[2-3]。

在基于MCU的一線總線驅(qū)動(dòng)程序設(shè)計(jì)中,因一線總線器件的時(shí)序要求相對(duì)嚴(yán)格,大多采用CPU延時(shí)等待的方法來(lái)實(shí)現(xiàn)精確延時(shí)[4-5]。這種延時(shí)屬于典型的同步程序風(fēng)格。在整個(gè)一線總線操作期間,CPU延時(shí)等待方法直接導(dǎo)致了CPU大量消耗于總線時(shí)序的處理而無(wú)法顧及其他工作[6-7]。

本文以Arm-Cortex芯片作為一線總線器件的主控器,通過(guò)一個(gè)定時(shí)器的四個(gè)中斷實(shí)現(xiàn)一線總線器件的讀寫(xiě)時(shí)序。將一線總線單個(gè)數(shù)據(jù)位讀寫(xiě)過(guò)程中的四個(gè)關(guān)鍵時(shí)間點(diǎn)作為MCU系統(tǒng)的中斷點(diǎn),在中斷程序中由CPU完成總線狀態(tài)位的修改,從而實(shí)現(xiàn)一線總線數(shù)據(jù)位的讀寫(xiě)。該方法充分發(fā)揮了MCU系統(tǒng)外設(shè)的工作能力。在定時(shí)器的協(xié)助下,以極低的CPU占用率實(shí)現(xiàn)了一線總線的異步讀寫(xiě)。

1 一線總線讀寫(xiě)時(shí)序

18B20是工業(yè)現(xiàn)場(chǎng)廣泛采用的數(shù)字式溫度傳感器。該器件采用了一線總線技術(shù),可以大規(guī)模地減少多點(diǎn)溫度測(cè)量系統(tǒng)中測(cè)溫傳感器的引線數(shù)量。

使用基于一線總線結(jié)構(gòu)的數(shù)字式溫度傳感器DS18B20測(cè)量溫度,特別是在多點(diǎn)測(cè)量領(lǐng)域,必須首先確定總線上所有器件的64位的序列號(hào)[8]。典型的溫度讀取方法是通過(guò)搜索算法,查找出所有總線上的器件的64位ID號(hào),并固化于MCU內(nèi)。在溫度讀取過(guò)程中,一線總線控制器先向總線上所有器件下發(fā)溫度轉(zhuǎn)化指令,然后控制器通過(guò)指令逐個(gè)鎖定總線器件,并讀取各個(gè)傳感器的溫度數(shù)據(jù)[9]。

準(zhǔn)確完成單只18B20的溫度讀取應(yīng)經(jīng)過(guò)如下幾步操作:①主機(jī)發(fā)送復(fù)位指令;②主機(jī)發(fā)送MachRom指令;③主機(jī)發(fā)送64位ID號(hào);④主機(jī)發(fā)送溫度轉(zhuǎn)化指令;⑤延時(shí)500 ms以上;⑥主機(jī)發(fā)送復(fù)位指令;⑦主機(jī)發(fā)送MachRom指令;⑧主機(jī)發(fā)送64位ID號(hào);⑨主機(jī)發(fā)送讀取溫度指令;⑩主機(jī)讀取溫度。

如果總線上存在多個(gè)18B20,則上述工作可簡(jiǎn)化為:①主機(jī)發(fā)送復(fù)位指令;②主機(jī)發(fā)送SkipRom指令;③主機(jī)發(fā)溫度轉(zhuǎn)化指令;④延時(shí)500 ms以上;⑤主機(jī)發(fā)送復(fù)位指令;⑥主機(jī)發(fā)送MachRomN指令;⑦主機(jī)發(fā)送64位ID號(hào);⑧主機(jī)發(fā)送讀取溫度指令;⑨主機(jī)讀取溫度N,直到總線上所有器件溫度讀取完成[9]。

一線總線主機(jī)讀0時(shí)序如圖1所示。

圖1 一線總線主機(jī)讀0時(shí)序Fig.1 Time sequence of read“0”in host computer

總線完成上述操作所需時(shí)間為:2.6+500+(1+96×0.1)N ms。取N=100可知,當(dāng)總線上存在100只18B20時(shí),完成一次總線溫度讀取用時(shí)應(yīng)不小于1562.6 ms。無(wú)論采用何種算法,該時(shí)間消耗是確定的,若要想全部讀取總線上的100只器件的溫度值,用時(shí)必須大于1562.6 ms。對(duì)于基于MCU的測(cè)控制系統(tǒng)來(lái)說(shuō),如果全部使用空指令實(shí)現(xiàn)這些延時(shí),將會(huì)對(duì)CPU資源產(chǎn)生極大消耗并最終導(dǎo)致MCU無(wú)法完成其他任務(wù)。

2 一線總線異步讀寫(xiě)方法

2.1 時(shí)序分析

以一線總線主機(jī)從總線讀取一位數(shù)據(jù)為例,其時(shí)序示意圖如圖2所示。

由圖2可以看出,從A點(diǎn)開(kāi)始主機(jī)釋放總線,總線電平被上拉電阻自然拉至高電平。間隔1 μs后,從B點(diǎn)開(kāi)始主機(jī)拉低總線并持續(xù)大于1 μs的時(shí)間,到C點(diǎn)主機(jī)釋放總線。此后一線總線設(shè)備響應(yīng)總線時(shí)序向總線寫(xiě)入0或1,主機(jī)會(huì)在由B點(diǎn)開(kāi)始后的15~45 μs的時(shí)間窗口內(nèi)讀取總線上的數(shù)據(jù),并認(rèn)為從B點(diǎn)開(kāi)始后60 μs以后的E點(diǎn)為主機(jī)完成總線數(shù)據(jù)的讀取。主機(jī)讀取并存儲(chǔ)當(dāng)前數(shù)據(jù)位后進(jìn)入下一位數(shù)據(jù)位的讀取。

上述工作(主機(jī)讀取一位數(shù)據(jù))如交由MCU處理,可簡(jiǎn)要描述如下:A點(diǎn),計(jì)時(shí)開(kāi)始;B點(diǎn)拉低總線;C點(diǎn),釋放總線;D點(diǎn),讀取總線數(shù)據(jù);E點(diǎn),標(biāo)記當(dāng)前位讀取完成。

該工作的簡(jiǎn)要描繪如表1所示。表1同時(shí)也給出了主機(jī)向總線寫(xiě)0或?qū)?的操作時(shí)序。由表1可見(jiàn),一線總線的讀寫(xiě)過(guò)程中主機(jī)的操作內(nèi)容略有不同,但時(shí)序有很強(qiáng)的共性。完成總線數(shù)據(jù)讀取只需MCU在B、C、D、E四個(gè)時(shí)間點(diǎn)上對(duì)總線進(jìn)行相應(yīng)操作即可,且各個(gè)關(guān)鍵時(shí)間點(diǎn)上的MCU工作極其簡(jiǎn)單,完全可以放在中斷程序中直接實(shí)現(xiàn),且不會(huì)對(duì)其他程序的運(yùn)行產(chǎn)生明顯影響。

表1 主機(jī)讀寫(xiě)總線時(shí)序與CPU的主要工作Tab.1 Main tasks of CPU in the time sequence of bus read/write in host computer

總線的復(fù)位操作時(shí)序要求與總線讀0操作過(guò)程非常相似,不同之處僅在于操作時(shí)間較長(zhǎng)。

總線復(fù)位的主要時(shí)序與主機(jī)應(yīng)完成的工作如圖3和表2所示。

圖3 主機(jī)復(fù)位時(shí)序圖Fig.3 The reset time sequence of host computer

表2 主機(jī)復(fù)位時(shí)序與CPU的主要工作Tab.2 Main tasks of CPU in reset time sequence of host computer

2.2 異步讀寫(xiě)實(shí)現(xiàn)

由上述分析可知,無(wú)論是復(fù)位或是總線讀寫(xiě),均可以將總線操作化成四個(gè)關(guān)鍵時(shí)間點(diǎn)的CPU動(dòng)作,且每個(gè)時(shí)間點(diǎn)上的工作都極為簡(jiǎn)單,可以在中斷程序中直接實(shí)現(xiàn)。

本文以ST公司的Arm-Cortex芯片STM32F103RCT6為例,實(shí)現(xiàn)上述一線總線的操作方法。

STM32F103RCT6提供了兩個(gè)高級(jí)控制定時(shí)器,每個(gè)高級(jí)控制定時(shí)器提供了四個(gè)獨(dú)立的輸出比較通道,每個(gè)輸出比較通道均可以產(chǎn)生中斷。

表1、表2所示的主要時(shí)序可以通過(guò)如圖4所示的高級(jí)定時(shí)器的四個(gè)輸出比較通道實(shí)現(xiàn)。以表1所示的主機(jī)讀取一個(gè)總線數(shù)據(jù)位為例。程序初始化時(shí)將定時(shí)器時(shí)鐘的時(shí)基配置為1 μs,即計(jì)數(shù)器的時(shí)間與以微秒為單位的計(jì)時(shí)同步。A點(diǎn),程序?qū)⑺膫€(gè)輸出比較通道輸出比較寄存器值預(yù)設(shè)為1、5、30、70(與表1中的B、C、D、E四個(gè)時(shí)間點(diǎn)對(duì)應(yīng)),計(jì)數(shù)器清0后開(kāi)啟各中斷,啟動(dòng)定時(shí)器。隨后即會(huì)順次發(fā)生圖4所示的B、C、D、E四個(gè)時(shí)間點(diǎn)所對(duì)應(yīng)的中斷,在每個(gè)中斷的中斷程序中完成表1所示的對(duì)應(yīng)工作即可。

圖4 高級(jí)控制定時(shí)器的四個(gè)輸出比較通道Fig.4 Four comparison channels of the advanced control timer

2.3 總線數(shù)據(jù)處理

上節(jié)所述的一線總線異步數(shù)據(jù)讀定方法僅讀寫(xiě)了一線總線上的一個(gè)數(shù)據(jù)位,實(shí)際的一線總線操作多以字節(jié)(8個(gè)數(shù)據(jù)位)為一個(gè)操作單元,只有復(fù)位操作可以認(rèn)為是一個(gè)數(shù)據(jù)位的操作。一線總線操作的典型數(shù)據(jù)如表3所示。

表3 一線總線操作的典型數(shù)據(jù)Tab.3 Typical data of 1-Wire bus operation

表3中,復(fù)位操作和搜索操作可以按讀寫(xiě)1位總線數(shù)據(jù)位的形式以2.2節(jié)所討論的方法實(shí)現(xiàn)??偩€指令和讀取數(shù)據(jù)兩種操作是以連續(xù)讀寫(xiě)8個(gè)數(shù)據(jù)位(1字節(jié))的形式進(jìn)行的。總結(jié)表3所有可能會(huì)出現(xiàn)的一線總線操作數(shù)據(jù)類(lèi)型,可給出如下數(shù)據(jù)結(jié)構(gòu)。

無(wú)論是復(fù)位,還是總線指令讀寫(xiě)都可用上述數(shù)據(jù)結(jié)構(gòu)的形式進(jìn)行表達(dá)。例如,主機(jī)讀取總線上的某一傳感器的溫度轉(zhuǎn)化數(shù)據(jù),其操作應(yīng)包含如下順序執(zhí)行的5個(gè)步驟:①主機(jī)發(fā)送復(fù)位指令;②主機(jī)發(fā)送MachRom指令;③主機(jī)發(fā)送64位ID號(hào);④主機(jī)發(fā)送讀取溫度指令;⑤主機(jī)讀取16位溫度。

這5步操作中,64位的ID號(hào)和16位的溫度數(shù)據(jù)會(huì)因傳感器的不同而變化,其他操作中的數(shù)據(jù)相對(duì)固定。將這5步操作以BusDataUnit的形式進(jìn)行表達(dá),并以指令隊(duì)列的形式進(jìn)行存儲(chǔ),得到的指令隊(duì)例如圖5所示。此后用戶(hù)程序可將該指令隊(duì)列交由定時(shí)器中斷程序進(jìn)行解析,當(dāng)指令隊(duì)列中的所有指令執(zhí)行完成后,定時(shí)器中斷程序產(chǎn)生完成標(biāo)記,CPU控制程序發(fā)現(xiàn)指令隊(duì)列完成標(biāo)記后,對(duì)數(shù)據(jù)進(jìn)行進(jìn)一步處理。

圖5 讀某一傳感器溫度值的指令隊(duì)列Fig.5 The instruction queue of reading one temperature value of sensor

指令隊(duì)列為異步處理流程如圖6所示。主程序完成的主要工作是指令隊(duì)列的生成,主程序按總線操作要求生成指令隊(duì)列后即返回。中斷處理程序在中斷程序中順序?qū)崿F(xiàn)了指令隊(duì)列中各個(gè)數(shù)據(jù)位的讀寫(xiě)。當(dāng)指令隊(duì)列完成后,中斷程序會(huì)產(chǎn)生一個(gè)完成標(biāo)記,主程序在收到該完成標(biāo)記后認(rèn)為總線讀寫(xiě)完成。

圖6 指令隊(duì)列的異步處理流程Fig.6 Asynchronous processing of instruction queue

3 試驗(yàn)過(guò)程

試驗(yàn)系統(tǒng)采用了ST公司的 Arm-Cortex芯片STM32F103RCT6作為一線總線的主機(jī)[10],MCU 主頻為72 MHz。一線總線采用了三線制(地線、電源線、數(shù)據(jù)線),總線上接入了100只溫度傳感器DS18B20。總線的讀寫(xiě)用STM32F103RCT6的I/O口直接驅(qū)動(dòng)。一線總線的控制程序采用Keil RealView-Arm MDK開(kāi)發(fā)。

試驗(yàn)測(cè)試了主機(jī)從一線總線上完整讀取100只18B20的溫度所對(duì)應(yīng)的時(shí)間消耗。為準(zhǔn)確獲取一線總線操作所占用的CPU時(shí)間,主機(jī)以 Arm-Cortex的SysTick定時(shí)器作為系統(tǒng)運(yùn)行計(jì)時(shí)器。主程序及中斷程序的入口和出口點(diǎn)記錄SysTick的當(dāng)前值作為相關(guān)程序?qū)PU時(shí)間占用的依據(jù)。主要的時(shí)間消耗如表4所示。

表4 異步數(shù)據(jù)讀取時(shí)間Tab.4 Time cost for reading asynchronous data

表4中,總線復(fù)位與指令下達(dá)包括的主機(jī)操作包括了總線復(fù)位、主機(jī)發(fā)SkipRom指令和主機(jī)發(fā)溫度轉(zhuǎn)化指令三種順序執(zhí)行的主要操作。主機(jī)讀取器件數(shù)據(jù)包括的主機(jī)操作包括了主機(jī)發(fā)送復(fù)位指令、主機(jī)發(fā)MachRom指令、主機(jī)發(fā)64位ID號(hào)、主機(jī)發(fā)讀取溫度指令和主機(jī)讀取溫度5種順序執(zhí)行的主要操作。另外,表4所給出的數(shù)據(jù)未能將SysTick中斷程序?qū)PU消耗計(jì)算在內(nèi),所得出的數(shù)據(jù)較之于實(shí)際數(shù)據(jù)偏大。由表4可見(jiàn),一線總線完成100只18B20溫度轉(zhuǎn)化及數(shù)據(jù)讀取用時(shí)約1.6 s。采用異步數(shù)據(jù)讀寫(xiě)程序,上述工作對(duì)CPU的時(shí)間占用僅8.26 ms,CPU的占用率不到0.6%。

4 結(jié)束語(yǔ)

本文以MCU作為一線總線主機(jī),實(shí)現(xiàn)了一線總線器件異步讀寫(xiě)方法。在分析了一線總線主要工作時(shí)序共性的基礎(chǔ)上,給出了實(shí)現(xiàn)一線總線時(shí)序的基本程序結(jié)構(gòu),進(jìn)而形成了一線總線的異步數(shù)據(jù)讀寫(xiě)算法,并給出了主要的程序?qū)崿F(xiàn)思路。以STM32F103RCT6作為一線主機(jī),實(shí)現(xiàn)了一線總線的異步數(shù)據(jù)讀寫(xiě)方法。試驗(yàn)數(shù)據(jù)表明,該方法可有效降低一線總線讀寫(xiě)操作對(duì)CPU的占用率,提高M(jìn)CU控制系統(tǒng)的實(shí)時(shí)性。

[1]李敏,汪春,孟臣.數(shù)字化糧情檢測(cè)智能溫濕度傳感器[J].農(nóng)業(yè)機(jī)械學(xué)報(bào),2005,36(4):99 -102.

[2]姜幼卿,左國(guó)華,陳勤學(xué),等.基于CAN總線的溫室自動(dòng)控制系統(tǒng)的通信設(shè)計(jì)[J].儀表技術(shù)與傳感器,2005(4).

[3]陳漢臻,王愛(ài)美,羅進(jìn)文,等.CC2430芯片和單片機(jī)的暖氣控制系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].自動(dòng)化儀表,2012,33(9):17 -20.

[4]Huang W L,He L L.Study on timing sequences of interface program of digital temperature sensor DS18B20[J].Lecture Notes in Electrical Engineering,2012,13(8):1329 -1334.

[5]張曉玲,梁煒,于海斌,等.無(wú)線傳感器網(wǎng)絡(luò)傳輸調(diào)度方法綜述[J].通信學(xué)報(bào),2012,33(5):143 -157.

[6]魏學(xué)哲,戴海峰,孫澤昌.汽車(chē)嵌入式系統(tǒng)開(kāi)發(fā)方法、體系架構(gòu)和流程[J].同濟(jì)大學(xué)學(xué)報(bào):自然科學(xué)版,2012,40(7):1064 -1070.

[7]劉嘯濱,郭兵,沈艷,等.基于ARM處理器的嵌入式軟件能耗統(tǒng)計(jì)模型[J].電子科技大學(xué)學(xué)報(bào):工學(xué)版,2012,41(5):770 -774.

[8]魯正林,陳一飛,孫倩,等.1-wire技術(shù)在溫室集成控制系統(tǒng)中的應(yīng)用[J].農(nóng)業(yè)機(jī)械學(xué)報(bào),2009,40(S1):119 -222.

[9]陳良光.DS18X20在多點(diǎn)溫度檢測(cè)中的地址碼設(shè)計(jì)及其在線糾錯(cuò)[J].傳感技術(shù)學(xué)報(bào),2005,18(3):157 -161.

[10]黃家才,李宏勝,郭婧.嵌入式油田無(wú)線遠(yuǎn)程監(jiān)控系統(tǒng)的研究和設(shè)計(jì)[J].自動(dòng)化儀表,2011,32(11):46 -48.

猜你喜歡
時(shí)序隊(duì)列中斷
顧及多種弛豫模型的GNSS坐標(biāo)時(shí)序分析軟件GTSA
清明
隊(duì)列里的小秘密
基于不同建設(shè)時(shí)序的地鐵互聯(lián)互通方案分析
基于多隊(duì)列切換的SDN擁塞控制*
“單片機(jī)中斷概述”微課教學(xué)設(shè)計(jì)
在隊(duì)列里
基于FPGA的中斷控制器設(shè)計(jì)*
Linux中斷線程化分析及中斷延時(shí)測(cè)試
基于FPGA 的時(shí)序信號(hào)光纖傳輸系統(tǒng)