一種更新寄存器的方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及通信技術(shù)領(lǐng)域,尤其涉及一種更新寄存器的方法及裝置。
【背景技術(shù)】
[0002]光模塊的功能是將光信號(hào)與電信號(hào)互相轉(zhuǎn)換,并通過(guò)IIC(Inter-1ntegratedCircuit,集成電路總線)與主機(jī)進(jìn)行信息交互。根據(jù)INF-8074標(biāo)準(zhǔn)的要求,光模塊的IIC總線協(xié)議是使用CMOS (Complementary Metal Oxide Semiconductor,互補(bǔ)金屬氧化物半導(dǎo)體)EEPROM(Electrically Erasable Programmable Read-Only Memory,帶電可擦寫(xiě)可編程只讀存儲(chǔ)器)器件AT24C02的兩線串行協(xié)議,支持讀寫(xiě)操作。
[0003]光模塊中有些特殊的寄存器,這種特殊的寄存器中存儲(chǔ)的比特序列中有用來(lái)實(shí)時(shí)反映光模塊的狀態(tài)比特位,有用于指示關(guān)斷光模塊發(fā)射部分的比特位,該比特位的值由主機(jī)寫(xiě)入。符合SFF-8472標(biāo)準(zhǔn)的光模塊都有這種特別的寄存器。例如,寄存器地址為110的寄存器就是這種特殊的寄存器,該寄存器中存儲(chǔ)的比特序列中的Bit7是用來(lái)實(shí)時(shí)反映TXDisable引腳的狀態(tài),由光模塊輸出,為了讓主機(jī)能夠隨時(shí)讀取到光模塊的當(dāng)前狀態(tài),光模塊需要不斷的更新110寄存器的第7比特位。而該寄存器中存儲(chǔ)的比特序列中的第6比特位是用來(lái)關(guān)斷光模塊的發(fā)射部分,由主機(jī)輸入。
[0004]由于寄存器的讀寫(xiě)入口只有一個(gè),在對(duì)這種特殊寄存器進(jìn)行更新時(shí),如果同時(shí)主機(jī)對(duì)該寄存器進(jìn)行寫(xiě)操作,如圖1所示,這兩種操作就會(huì)產(chǎn)生沖突,主機(jī)寫(xiě)入到光模塊的信息被覆蓋,導(dǎo)致通信失效。因此,如何安全更新寄存器保證其可靠性,是目前亟待解決的問(wèn)題。
【發(fā)明內(nèi)容】
[0005]本發(fā)明實(shí)施例提供一種更新寄存器的方法及裝置,用以提高寄存器更新操作的可靠性。
[0006]本發(fā)明的一個(gè)實(shí)施例提供的一種更新寄存器的方法,包括:
[0007]執(zhí)行更新寄存器的第一線程,所述第一線程對(duì)應(yīng)的操作包括:讀取寄存器的數(shù)據(jù),將讀取到的數(shù)據(jù)存儲(chǔ)到第一內(nèi)存區(qū)域,更新所述第一內(nèi)存區(qū)域中的數(shù)據(jù),將更新后的數(shù)據(jù)寫(xiě)入所述寄存器;
[0008]在所述第一線程執(zhí)行期間,若接收到主機(jī)發(fā)送的請(qǐng)求寫(xiě)寄存器的指令,則根據(jù)所述請(qǐng)求寫(xiě)寄存器的指令中斷執(zhí)行所述第一線程,執(zhí)行第二線程,所述第二線程對(duì)應(yīng)的操作包括:根據(jù)所述請(qǐng)求寫(xiě)寄存器的指令在第二內(nèi)存區(qū)域?qū)懭霐?shù)據(jù),恢復(fù)執(zhí)行所述第一線程,在所述第一線程執(zhí)行完成后,再次執(zhí)行第一線程;所述請(qǐng)求寫(xiě)寄存器的指令的優(yōu)先級(jí)高于所述第一線程的優(yōu)先級(jí);
[0009]所述再次執(zhí)行的第一線程對(duì)應(yīng)的操作包括:讀取寄存器的數(shù)據(jù),將讀取到的數(shù)據(jù)存儲(chǔ)到第三內(nèi)存區(qū)域,根據(jù)所述第二內(nèi)存區(qū)域中的數(shù)據(jù)更新所述第三內(nèi)存區(qū)域中的數(shù)據(jù),將所述第三內(nèi)存區(qū)域更新后的數(shù)據(jù)寫(xiě)入所述寄存器。
[0010]所述更新所述第一內(nèi)存區(qū)域的數(shù)據(jù),包括:更新所述第一內(nèi)存區(qū)域中存儲(chǔ)的寄存器數(shù)據(jù)中的第一比特位數(shù)據(jù);在所述第二內(nèi)存區(qū)域?qū)懭氲臄?shù)據(jù)為寄存器數(shù)據(jù)中的第二比特位數(shù)據(jù)。
[0011]所述根據(jù)所述第二內(nèi)存區(qū)域中的數(shù)據(jù)更新所述第三內(nèi)存區(qū)域的數(shù)據(jù),包括:根據(jù)所述第二內(nèi)存區(qū)域中的所述第二比特位數(shù)據(jù),更新所述第三內(nèi)存區(qū)域中的寄存器數(shù)據(jù)中的第二比特位數(shù)據(jù),保持所述第三內(nèi)存區(qū)域中的寄存器數(shù)據(jù)中的其余比特位數(shù)據(jù)不變。
[0012]所述第一比特位的數(shù)據(jù)為所述光模塊的狀態(tài)數(shù)據(jù)或控制數(shù)據(jù),所述第二比特位的數(shù)據(jù)為所述光模塊的狀態(tài)和控制數(shù)據(jù)。
[0013]所述執(zhí)行更新寄存器的第一線程,還包括:根據(jù)設(shè)定周期執(zhí)行所述更新寄存器的第一線程。
[0014]本發(fā)明的一個(gè)實(shí)施例提供的一種寄存器的裝置,包括:控制模塊、寄存器處理模塊和中斷處理模塊;
[0015]所述控制模塊:用于指示所述寄存器處理模塊執(zhí)行更新寄存器的第一線程,所述第一線程對(duì)應(yīng)的操作包括:讀取寄存器的數(shù)據(jù),將讀取到的數(shù)據(jù)存儲(chǔ)到第一內(nèi)存區(qū)域,更新所述第一內(nèi)存區(qū)域中的數(shù)據(jù),將更新后的數(shù)據(jù)寫(xiě)入所述寄存器;
[0016]在所述第一線程執(zhí)行期間,若接收到請(qǐng)求寫(xiě)寄存器的指令,則根據(jù)所述請(qǐng)求寫(xiě)寄存器的指令指示所述寄存器處理模塊中斷執(zhí)行所述第一線程,執(zhí)行第二線程,指示所述中斷處理模塊根據(jù)所述請(qǐng)求寫(xiě)寄存器的指令在第二內(nèi)存區(qū)域?qū)懭霐?shù)據(jù),指示所述寄存器處理模塊恢復(fù)執(zhí)行所述第一線程,在所述第一線程執(zhí)行完成后,指示寄存器處理模塊再次執(zhí)行所述第一線程;所述請(qǐng)求寫(xiě)寄存器的指令的優(yōu)先級(jí)高于所述第一線程的優(yōu)先級(jí);以及
[0017]所述再次執(zhí)行的第一線程對(duì)應(yīng)的操作包括:讀取寄存器的數(shù)據(jù),將讀取到的數(shù)據(jù)存儲(chǔ)到第三內(nèi)存區(qū)域,根據(jù)所述第二內(nèi)存區(qū)域中的數(shù)據(jù)更新所述第三內(nèi)存區(qū)域中的數(shù)據(jù),將所述第三內(nèi)存區(qū)域更新后的數(shù)據(jù)寫(xiě)入所述寄存器。
[0018]所述寄存器處理模塊,具體用于:更新所述第一內(nèi)存區(qū)域中存儲(chǔ)的寄存器數(shù)據(jù)中的第一比特位數(shù)據(jù);在所述第二內(nèi)存區(qū)域?qū)懭氲臄?shù)據(jù)為寄存器數(shù)據(jù)中的第二比特位數(shù)據(jù)。
[0019]所述寄存器處理模塊,具體用于:根據(jù)所述第二內(nèi)存區(qū)域中的所述第二比特位數(shù)據(jù),更新所述第三內(nèi)存區(qū)域中的寄存器數(shù)據(jù)中的第二比特位數(shù)據(jù),保持所述第三內(nèi)存區(qū)域中的寄存器數(shù)據(jù)中的其余比特位數(shù)據(jù)不變。
[0020]所述第一比特位的數(shù)據(jù)為所述光模塊的狀態(tài)數(shù)據(jù)或控制數(shù)據(jù),所述第二比特位的數(shù)據(jù)為所述光模塊的狀態(tài)和控制數(shù)據(jù)。
[0021]所述寄存器處理模塊,還用于:根據(jù)設(shè)定周期執(zhí)行所述更新寄存器的第一線程。
[0022]本發(fā)明的上述實(shí)施例中,在更新寄存器時(shí),執(zhí)行更新寄存器的第一線程,讀取寄存器的數(shù)據(jù),將讀取到的數(shù)據(jù)存儲(chǔ)到第一內(nèi)存區(qū)域,更新所述第一內(nèi)存區(qū)域中的數(shù)據(jù),再將更新后的數(shù)據(jù)寫(xiě)入所述寄存器。若在更新寄存器的過(guò)程中,接收到主機(jī)發(fā)送的請(qǐng)求寫(xiě)寄存器的指令,則根據(jù)所述請(qǐng)求寫(xiě)寄存器的指令中斷執(zhí)行所述第一線程,執(zhí)行第二線程,根據(jù)所述請(qǐng)求寫(xiě)寄存器的指令在第二內(nèi)存區(qū)域?qū)懭霐?shù)據(jù),恢復(fù)執(zhí)行所述第一線程,在所述第一線程執(zhí)行完成后,再次執(zhí)行第一線程,讀取寄存器的數(shù)據(jù),將讀取到的數(shù)據(jù)存儲(chǔ)到第三內(nèi)存區(qū)域,根據(jù)所述第二內(nèi)存區(qū)域中的數(shù)據(jù)更新所述第三內(nèi)存區(qū)域中的數(shù)據(jù),將所述第三內(nèi)存區(qū)域更新后的數(shù)據(jù)寫(xiě)入所述寄存器。根據(jù)上述實(shí)施例,主機(jī)請(qǐng)求寫(xiě)入的數(shù)據(jù)不是直接寫(xiě)入寄存器,而是先寫(xiě)入第二內(nèi)存區(qū)域,待寄存器更新完成后再將第二內(nèi)存區(qū)域中的數(shù)據(jù)寫(xiě)入寄存器,避免了在執(zhí)行第一線程的過(guò)程中,基于接收到的主機(jī)請(qǐng)求寫(xiě)寄存器的指令觸發(fā)寫(xiě)寄存器操作所導(dǎo)致的主機(jī)寫(xiě)入寄存器的信息在寄存器更新過(guò)程中被覆蓋進(jìn)而導(dǎo)致通信失效的情況發(fā)生,確保了主機(jī)寫(xiě)入信息的正確性與可靠性。
【附圖說(shuō)明】
[0023]為了更清楚地說(shuō)明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例描述中所需要使用的附圖作簡(jiǎn)要介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域的普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0024]圖1為現(xiàn)有技術(shù)中更新光模塊寄存器的流程示意圖;
[0025]圖2為本發(fā)明實(shí)施例中提供的更新寄存器的流程示意圖;
[0026]圖3為本發(fā)明實(shí)施例中提供的更新寄存器的裝置示意圖。
【具體實(shí)施方式】
[0027]為了使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步地詳細(xì)描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部份實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其它實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0028]參見(jiàn)圖2,為本發(fā)明實(shí)施例提供的更新寄存器的流程示意圖,如圖所示,具體步驟如下:
[0029]執(zhí)行更新寄存器的第一線程,所述第一線程對(duì)應(yīng)的操作包括:步驟201:讀取寄存器的數(shù)據(jù),將讀取到的數(shù)據(jù)存儲(chǔ)到第一內(nèi)存區(qū)域,步驟202:更新所述第一內(nèi)存區(qū)域中的數(shù)據(jù),步驟203:將更新后的數(shù)據(jù)寫(xiě)入所述寄存器。
[0030]在所述第一線程執(zhí)行期間,若接收到主機(jī)發(fā)送的請(qǐng)求寫(xiě)寄存器的指令,則執(zhí)行步驟204:根據(jù)所述請(qǐng)求寫(xiě)寄存器的指令中斷執(zhí)行所述第一線程,執(zhí)行第二線程,根據(jù)所述請(qǐng)求寫(xiě)寄存器的指令在第二內(nèi)存區(qū)域?qū)懭霐?shù)據(jù),恢復(fù)執(zhí)行所述第一線程,在所述第一線程執(zhí)行完成后,再次執(zhí)行第一線程;所述主機(jī)發(fā)送的請(qǐng)求寫(xiě)寄存器的指令的優(yōu)先級(jí)高于所述第一線程的優(yōu)先級(jí);
[0031]所述再次執(zhí)行的第一線程對(duì)應(yīng)的操作包括:步驟205:讀取寄存器的數(shù)據(jù),將讀取到的數(shù)據(jù)存儲(chǔ)到第三內(nèi)存區(qū)域,步驟206:根據(jù)所述第二內(nèi)存區(qū)域中的數(shù)據(jù)更新所述第三內(nèi)存區(qū)域中的數(shù)據(jù),步驟207將所述第三內(nèi)存區(qū)域更新后的數(shù)據(jù)寫(xiě)入所述寄存器。
[0032]若在第一線程執(zhí)行期間,接收