以MXS51為內(nèi)核構(gòu)造的單片集成系統(tǒng)
關(guān)鍵詞:SFR 特殊功能寄存器 FSK 頻移鍵控 DTMF 雙音多頻
引言
隨著電信市場(chǎng)的日益開(kāi)放、競(jìng)爭(zhēng)、運(yùn)營(yíng)商面蜊更大的壓力,須提高投資回收效率,提高固定電話的ARPU值。中國(guó)移動(dòng)推出出的短信息服務(wù)取得了很好的經(jīng)濟(jì)效果和社會(huì)效益,短信正以其特有的快捷和方便,影響著人們?nèi)粘I畹脑S多方面?!肮潭娫捫畔⒒焙拖嚓P(guān)標(biāo)準(zhǔn)的出臺(tái),固定電話的廠商也推出類(lèi)似的服務(wù),從而實(shí)現(xiàn)傳統(tǒng)電話的增值。
但固網(wǎng)短信存在兩方面的“瓶頸”;在終端和內(nèi)容上均有缺失。在終端方面是價(jià)格問(wèn)題,應(yīng)該考慮如何將價(jià)格降到用戶可以接受的范圍。
本系統(tǒng)就是針對(duì)這樣的市場(chǎng)需求而設(shè)計(jì)。它需要1個(gè)滿足系統(tǒng)要求的微處理器、1個(gè)大的字庫(kù)來(lái)支持。同時(shí),該芯片必須控制在一定面積下,以降低成本。
本文將著重介紹與MCS51兼容的微控制器的設(shè)計(jì)和DTMF解碼中的數(shù)據(jù)處理。
1 與MCS51兼容的微控制器設(shè)計(jì)
Intel MCS51系列是一種8位微處理器。外部程序與數(shù)據(jù)存儲(chǔ)器的尋址范圍可達(dá)到64K.MCS51有5個(gè)中斷源,其中2個(gè)為外部中斷源,每個(gè)中斷源的優(yōu)先級(jí)是可編程的。為了滿足固網(wǎng)短信系統(tǒng)功能需求。主要對(duì)MCS51進(jìn)行如下三方面的擴(kuò)展。SFR擴(kuò)展、存儲(chǔ)器擴(kuò)展,外部中斷擴(kuò)展。
1.1 SFR擴(kuò)展
為了與MCS51兼容。把FSK、DTMF中的控制寄存器和狀態(tài)寄存器MCS51的SFR統(tǒng)一編址。這樣8051管理、控制、監(jiān)視FSK、DTMF時(shí),可將FSK、DTMF對(duì)應(yīng)的地址看作是片內(nèi)數(shù)據(jù)存儲(chǔ)器的直接地址。因此,可以使用片內(nèi)數(shù)據(jù)存儲(chǔ)器相同的操作方法,不用增加指令來(lái)完成這些功能,這種結(jié)構(gòu)的擴(kuò)展可以看作是MCS51內(nèi)部總線的擴(kuò)張和把FSK、DTMF看成MCS51的兩個(gè)擴(kuò)展的內(nèi)部模塊,結(jié)構(gòu)如圖1所示。
1.2 存儲(chǔ)器擴(kuò)展
因?yàn)楣叹W(wǎng)系統(tǒng)需要一個(gè)龐大的字庫(kù)來(lái)支持,所以MCS51的64KB存儲(chǔ)能力是不夠的。通過(guò)添加一個(gè)MMU模塊,將CPU該存能力擴(kuò)展到2MB。當(dāng)CPU訪問(wèn)外部存儲(chǔ)器時(shí),先用16位的邏輯地址高位進(jìn)行頁(yè)表查詢(xún),得到相應(yīng)的擴(kuò)展地址,然后將擴(kuò)展地址和邏輯地址的低位一起構(gòu)成21位的物理地址,來(lái)完成對(duì)外部存儲(chǔ)器的操作,數(shù)據(jù)通路如圖2所示。
1.3 外部中斷的擴(kuò)張
為了讓系統(tǒng)能舊電故障等異常事件中斷請(qǐng)求信號(hào),保留了MCS51原來(lái)的兩個(gè)外部中斷源,同時(shí)增加了7個(gè)外部中斷和相應(yīng)的3個(gè)寄存器,分別用于鎖存中斷、屏蔽中斷和對(duì)中斷的優(yōu)先級(jí)進(jìn)行控制。如圖3所示。
中斷的實(shí)現(xiàn),CPU在每一個(gè)機(jī)器周期預(yù)序檢查每一個(gè)中斷源,如果發(fā)現(xiàn)有中斷請(qǐng)求且沒(méi)有在處理相同或更高的優(yōu)先級(jí)中斷,CPU就處理該中斷。先得相應(yīng)的優(yōu)先級(jí)狀態(tài)位置位,然后捃一個(gè)硬件子程序。該子程序把中斷處理程序的入口地址送到程序計(jì)數(shù)據(jù)。各中斷源程序的入口地址如表1.中斷處理程序從該地址開(kāi)始一直執(zhí)行到RETI指令為止,然后將相應(yīng)的優(yōu)先級(jí)級(jí)位清0.
表1 中斷服務(wù)程序的入口地址
中 斷 名 稱(chēng) | 中斷入口 |
Fsk接收中斷 | 002B |
Cas中斷 | 003B |
Fsk發(fā)送中斷 | 003B |
極性反轉(zhuǎn)中斷 | 0043 |
摘機(jī)中斷 | 004B |
門(mén)控時(shí)鐘中斷 | 0053 |
看門(mén)狗中斷 | 005B |
2 DTMF數(shù)據(jù)處理
DTMF解碼數(shù)據(jù)處理主要完成兩個(gè)功能,一是數(shù)據(jù)截取,一是DTMG解碼。
2.1 數(shù)據(jù)截取
根據(jù)抽樣速率和DTMG占空比及持續(xù)時(shí)間,可以對(duì)接收的數(shù)據(jù)進(jìn)行截?cái)?。根?jù)FFT的要求,前后兩段數(shù)據(jù)之間應(yīng)該有一定長(zhǎng)度的公共部分。計(jì)算出截新的數(shù)據(jù)幀的長(zhǎng)度為128字。為了減少面積,我們比較了幾個(gè)方案。在不會(huì)出現(xiàn)溢出的情況下,最后采取了圖4所示的設(shè)計(jì)方案。
圖3
數(shù)據(jù)截取由一個(gè)256字的雙口RAM完成。復(fù)位時(shí),對(duì)前32字清零。A/D采樣的數(shù)據(jù)幀先放到寫(xiě)數(shù)據(jù)段1中,再放到寫(xiě)數(shù)據(jù)段2中,按照寫(xiě)數(shù)據(jù)段1和寫(xiě)數(shù)據(jù)段2交替寫(xiě)入數(shù)據(jù)。在每次寫(xiě)完一個(gè)數(shù)據(jù)段之后,產(chǎn)生一個(gè)數(shù)據(jù)改變脈沖。用來(lái)表明已完成1幀數(shù)據(jù),可以進(jìn)行數(shù)據(jù)讀取,從而啟動(dòng)數(shù)據(jù)讀取操作。
數(shù)據(jù)讀取時(shí),為了保證每次數(shù)據(jù)讀取時(shí)與前后兩段都有32字的公共部分,第一次從讀數(shù)據(jù)段1中讀出160字的數(shù)據(jù),其前32字的數(shù)據(jù)為上一幀數(shù)據(jù)的最后32字的數(shù)據(jù);下一次在讀數(shù)據(jù)段2中讀出160字的數(shù)據(jù),然后兩個(gè)數(shù)據(jù)段讀出數(shù)據(jù)前后之間都有32字的共有數(shù)據(jù)。
2.2 DTMF解碼
對(duì)于DTMF解碼中用到的FFT,我們采用經(jīng)典的Goertzel算法。其思想是利用簡(jiǎn)單的遞歸運(yùn)算代替復(fù)雜的FFT運(yùn)算,且只需要計(jì)算幾個(gè)頻率占上的值,大大簡(jiǎn)化了計(jì)算量,通過(guò)比較幾個(gè)頻率點(diǎn)上數(shù)值的大小和判斷占空時(shí)間,就可確定發(fā)送的DTMG頻率組合。為了減少設(shè)計(jì)中用到的乘法驗(yàn)證,在滿足通信標(biāo)準(zhǔn)的前提下,將寬度降到12位。Goertzel算法的計(jì)算公式如下:
3 其它外圍電路
該系統(tǒng)除了MCS51.FSK、DTMG外,再加上門(mén)控時(shí)鐘??撮T(mén)狗、數(shù)字調(diào)制/解調(diào)等其它電路就構(gòu)成了完整的以MCS51為核的單片集成系統(tǒng)。
門(mén)控時(shí)鐘主要功能就是在系統(tǒng)工作時(shí)提供系統(tǒng)時(shí)鐘;在系統(tǒng)空閑時(shí),使系統(tǒng)處于下電狀態(tài),所有的時(shí)鐘都關(guān)掉,所有的操作也就停止,直到系統(tǒng)被喚醒,這樣就將系統(tǒng)功耗降低到最小值。
看門(mén)電路是一個(gè)可編程的邏輯電路,它可以被用作系統(tǒng)監(jiān)視器,也可以只作為一個(gè)簡(jiǎn)單的計(jì)時(shí)器。同時(shí)它的時(shí)間寬度可以通過(guò)編程來(lái)設(shè)成2 12、2 13、2 18或2 21個(gè)時(shí)鐘寬度。
結(jié)語(yǔ)
該系統(tǒng)是一個(gè)典型的以MCS51為核心。加、DTMG以及門(mén)控時(shí)鐘等外圍電路組成的控制系統(tǒng)。我們采用自頂向下的設(shè)計(jì)方法。系統(tǒng)中所有功能模塊均采用VHDL語(yǔ)言進(jìn)行描述;用FPGA實(shí)現(xiàn)的集成系統(tǒng)替換原來(lái)的系統(tǒng)通過(guò)了功能測(cè)試。不但在可靠性上得到了提高,而且滿足芯片面積的要求,達(dá)到降低成本的目的。