新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 查詢(xún)主從機(jī)中斷同步的方法

查詢(xún)主從機(jī)中斷同步的方法

作者: 時(shí)間:2012-08-25 來(lái)源:網(wǎng)絡(luò) 收藏

while(!flag)若中斷標(biāo)志flag不為1,意味著還沒(méi)有響應(yīng)中斷,于是一直不停查詢(xún)
響應(yīng)中斷之后,flag會(huì)變?yōu)?,退出循環(huán)
然后立即將flag清0,接著馬上跳轉(zhuǎn)到goto語(yǔ)句指定的地方,用這個(gè)來(lái)同步。
即:在約定的時(shí)間內(nèi)進(jìn)行不斷查詢(xún),查詢(xún)的單位時(shí)間很短,放棄了一個(gè)短時(shí)間的效果顯示來(lái)實(shí)現(xiàn)長(zhǎng)時(shí)間的

過(guò)程描述如下:
上電后,主機(jī),從機(jī)各自跑相同的效果,由于晶振的原因,會(huì)導(dǎo)致執(zhí)行速度不同。在短時(shí)間內(nèi)這樣的速度差異難以被人察覺(jué),但是這樣的差異性是一個(gè)累加的過(guò)程,在運(yùn)行了很久之后,各個(gè)不同的機(jī)器之間的差異就很明顯了。

因此我們要在差異累加到不能忽略之前,對(duì)每個(gè)機(jī)器進(jìn)行同步化處理。現(xiàn)在只是一條連線(xiàn),從主機(jī)的IO口到各個(gè)從機(jī)的外中斷口。
即:我們只能用外部中斷來(lái)實(shí)現(xiàn)同步調(diào)整。

根據(jù)我在另一篇文章http://www.51hei.com/mcu/1168.html中的介紹可知外中斷信號(hào)是在每一個(gè)機(jī)器周期都會(huì)由硬件自動(dòng)查詢(xún)的,所以,一旦有“同時(shí)的”中斷信號(hào)傳到各個(gè)不同速度的從機(jī)的中斷口的時(shí)候,各個(gè)機(jī)子都會(huì)在第一時(shí)間內(nèi)響應(yīng)這個(gè)中斷,,此時(shí)各個(gè)機(jī)器之間的絕對(duì)時(shí)間差異就只有一個(gè)機(jī)器周期的差異,設(shè)為T(mén)d。

假設(shè)機(jī)器1的晶振實(shí)際工作頻率為16.001MHz
機(jī)器周期為T(mén)1=12/(16.001*E6)

機(jī)器2的晶振實(shí)際工作頻率為16.0009MHz
機(jī)器周期為T(mén)2=12/(16.0009*E6)

他們之間的差異Td=T2-T1=(12/16000900)-(12/16001000)=7.488531279295044*(e-7)=1.1046869434089*(e-9)S

理論上我們能夠用視覺(jué)發(fā)現(xiàn)有不同步的差異時(shí)間為10毫秒級(jí)別,即
1*(e-2)
所以在這個(gè)不可避免的差異累計(jì)到我們能夠用眼睛覺(jué)得到時(shí),需要累加
n=1*(e-2)/1.1046869434089*(e-9)=9052338次
而我們進(jìn)行同步的時(shí)間間隔是1分鐘,那么我們依*視覺(jué)發(fā)現(xiàn)機(jī)子不同步的時(shí)候,同步系統(tǒng)已經(jīng)運(yùn)行了150872.3小時(shí),約等于6286天,大概為17年!

因此只使用一條數(shù)據(jù)線(xiàn)來(lái)實(shí)現(xiàn)同步是可行的。我們需要這樣的主機(jī):

循環(huán)運(yùn)行6個(gè)效果函數(shù),每個(gè)效果函數(shù)運(yùn)行10次。最后一個(gè)效果函數(shù)例外,它要為同步服務(wù),因此它的單次循環(huán)時(shí)間應(yīng)當(dāng)比較短暫,為了可以看到明顯效果可以多循環(huán)幾次,例如循環(huán)20次。
在運(yùn)行最后一個(gè)效果函數(shù)的第20次的中間發(fā)送一次信號(hào),發(fā)送同步信號(hào)之后延時(shí)一定時(shí)間進(jìn)入事先約定的同步效果。這個(gè)一定時(shí)間是指信號(hào)傳輸時(shí)間,被從機(jī)識(shí)別、響應(yīng)的時(shí)間總和??梢杂迷囼?yàn)方法測(cè)試取得。
方法如下:主機(jī)與從機(jī)器使用前一段相同的程序,運(yùn)行完相同程序后,主機(jī)在發(fā)送中斷信號(hào),而從機(jī)開(kāi)始用計(jì)數(shù)器計(jì)數(shù)(建議計(jì)數(shù)器初值為00,這樣好算一些),響應(yīng)中斷后停止計(jì)數(shù)器。讀取當(dāng)時(shí)的計(jì)數(shù)器值,就可以得到稍微準(zhǔn)確的中斷響應(yīng)時(shí)間。Ti=(12/f)*n,f為晶振頻率,n為所讀取的計(jì)數(shù)器值。獲得這個(gè)時(shí)間之后就可以使用匯編語(yǔ)言來(lái)進(jìn)行主機(jī)的延時(shí),這樣的效果應(yīng)該是最好了。

因此我們需要這樣的從機(jī):
無(wú)論是較主機(jī)快的從機(jī),還是較主機(jī)慢的從機(jī),都必須在主機(jī)發(fā)送中斷信號(hào)之前進(jìn)入循環(huán)查詢(xún)狀態(tài),這樣才能一起進(jìn)入同步效果。因此,從機(jī)不運(yùn)行最后一個(gè)效果的第20次,而在運(yùn)行完第19次之后都進(jìn)入循環(huán)查詢(xún)狀態(tài),這樣雖然會(huì)有暫時(shí)的不同步現(xiàn)象,但是我們可以把最后一個(gè)效果的單詞循環(huán)做得很短暫,這樣就可以用短暫的不同步換取長(zhǎng)時(shí)間的同步。

因此我們需要這樣的--最后一個(gè)效果函數(shù):
單次循環(huán)時(shí)間盡量短,但是最好要大于2倍的Ti,與其他效果函數(shù)不一樣,應(yīng)當(dāng)循環(huán)多次,如20次



評(píng)論


技術(shù)專(zhuān)區(qū)

關(guān)閉