唐 虹
(中國(guó)電子科技集團(tuán)公司第四十七研究所,沈陽(yáng) 110000)
MCU 內(nèi)ADC 的控制器設(shè)計(jì)主要是完成對(duì)ADC模擬部分的控制[1-2]??刂浦饕ǎ翰蓸娱_(kāi)關(guān)的產(chǎn)生、采樣時(shí)間的設(shè)置、采樣通道的選取、產(chǎn)生數(shù)據(jù)的處理、模擬看門(mén)狗的設(shè)計(jì)、中斷的產(chǎn)生。通過(guò)對(duì)ADC控制器的設(shè)計(jì)便可實(shí)現(xiàn)對(duì)ADC 的時(shí)序控制、開(kāi)關(guān)使能、通道選擇等功能[3]。針對(duì)ADC 的數(shù)字部分,在此設(shè)計(jì)一種逐次比較型ADC 的控制器設(shè)計(jì),著重介紹其設(shè)計(jì)原理和實(shí)現(xiàn)過(guò)程。
電路采用自頂向下分層次的正向設(shè)計(jì)思想[4-5],并采用模塊化設(shè)計(jì)。所設(shè)計(jì)的ADC 控制器包括通道選擇模塊(adc_ain_mux)、DMA 傳輸控制模塊(adc_dma)、數(shù)據(jù)對(duì)齊處理模塊(data_alignment)、信號(hào)同步模塊(adc_sync)、時(shí)序產(chǎn)生模塊(ss_seq_gen)、數(shù)據(jù)寄存模塊(datareg)、ADC 控制產(chǎn)生模塊(adc_ctl)、模擬看門(mén)狗模塊(ADC_AWDCTRL)、寄存器讀寫(xiě)模塊(ADCRegBlock)、總線接口模塊(ADCApbif)、觸發(fā)產(chǎn)生模塊(adc_trig)以及ADC 轉(zhuǎn)換時(shí)序控制模塊(adc_convtimg),共計(jì)12 個(gè)模塊??傮w設(shè)計(jì)的原理框圖如圖1 所示。
圖1 電路模塊化結(jié)構(gòu)圖
控制產(chǎn)生模塊adc_ctl 是ADC 設(shè)計(jì)的核心部分,需要加以特別而周全的考慮。adc_ctl 模塊主要由adc_ctl_fsm 和start 模塊(包括Rstart 和Jstart 信號(hào)控制邏輯)以及其他的邏輯控制(包括Pd_adc_ctl 和State_ctl_output,后者又包括other_ctrl、Rstart_wait和RPROC_wait 信號(hào)控制邏輯)構(gòu)成。如圖2 所示是adc_ctl 模塊的結(jié)構(gòu)框圖。
圖2 adc_ctl 模塊結(jié)構(gòu)圖
adc_ctl 模塊的功能就是根據(jù)ADC 的設(shè)置,產(chǎn)生ADC 啟動(dòng)信號(hào)和掉電控制信號(hào)、采樣序列控制控制信號(hào),并且控制外部通道的轉(zhuǎn)換。
adc_ctl_fsm 模塊的主要功能是控制外部通道的轉(zhuǎn)換。如圖3 所示為ADC1 的adc_ctl_fsm 狀態(tài)轉(zhuǎn)換圖。具體設(shè)計(jì)方法為:
圖3 ADC1 的adc_ctl_fsm 狀態(tài)轉(zhuǎn)換圖
當(dāng)APB 總線復(fù)位時(shí),ADC 處于IDLE 狀態(tài)。當(dāng)Rstart 信號(hào)有效,即規(guī)則觸發(fā)信號(hào)有效時(shí),ADC 將由IDLE 狀態(tài)切換到RPROC 狀態(tài),進(jìn)行規(guī)則通道的轉(zhuǎn)換;如果在規(guī)則通道轉(zhuǎn)換期間(RPROC 狀態(tài))產(chǎn)生外部注入觸發(fā)(Jstart 有效),ADC 將由IDLE 狀態(tài)切換到RST_R 狀態(tài),即當(dāng)前轉(zhuǎn)換被復(fù)位;ADC 緊接著由RST_R 狀態(tài)切換到JPROC 狀態(tài),即注入通道序列被以單次掃描方式進(jìn)行轉(zhuǎn)換;當(dāng)注入轉(zhuǎn)換完成(Jdone&RPROC_wait)時(shí),ADC 將由JPROC 狀態(tài)切換到RST_J 狀態(tài),ADC 緊接著由RST_J 狀態(tài)切換到RPROC 狀態(tài),恢復(fù)上次被中斷的規(guī)則組通道轉(zhuǎn)換。當(dāng)ADC 非斷電(~ADON),或是ADC 規(guī)則通道轉(zhuǎn)換完成,并且處于非自動(dòng)注入模式(~JAUTO&Rdone),ADC 將由RPROC 狀態(tài)切換到IDLE 狀態(tài);如果設(shè)置了JAUTO 位,在規(guī)則組通道轉(zhuǎn)換完成之后(JAUTO&Rdone),注入組通道被自動(dòng)轉(zhuǎn)換,即ADC狀態(tài)由RPROC 狀態(tài)切換到JPROC 狀態(tài)。如果是持續(xù)轉(zhuǎn)換,并且規(guī)則通道轉(zhuǎn)換完成之后,規(guī)則通道組將從頭開(kāi)始進(jìn)行規(guī)則通道轉(zhuǎn)換。
當(dāng)ADC 處于IDLE 狀態(tài)之下,如果Jstart 有效,即當(dāng)注入觸發(fā)信號(hào)有效時(shí),ADC 將由IDLE 狀態(tài)切換到JPROC 狀態(tài),進(jìn)行注入通道的轉(zhuǎn)換;當(dāng)JAUTO置位還設(shè)置了CONT 位,即自動(dòng)注入模式并且持續(xù)轉(zhuǎn)換置位,那么當(dāng)注入轉(zhuǎn)換完成之后,即Jdone&(CONT&JAUTO)有效,ADC 將由JPROC 狀態(tài)切換到RPROC 狀態(tài),將繼續(xù)規(guī)則通道的轉(zhuǎn)換。當(dāng)自動(dòng)注入模式下持續(xù)轉(zhuǎn)換置位時(shí),規(guī)則通道至注入通道的轉(zhuǎn)換序列將被連續(xù)執(zhí)行。在ADC 斷電(~ADON),或是ADC 注入通道轉(zhuǎn)換完成,并且非“(CONT&JAUTO)||RPROC_wait||Rstart_wait”的情況下,ADC 將由JPROC狀態(tài)切換到IDLE 狀態(tài)。如果在注入轉(zhuǎn)換期間(JPROC 狀態(tài))產(chǎn)生規(guī)則事件,注入轉(zhuǎn)換不會(huì)被中斷,但在注入序列結(jié)束后(Jdone&Rstart_wait),ADC將由JPROC 狀態(tài)切換到RST_J 狀態(tài),ADC 緊接著由RST_J 狀態(tài)切換到RPROC 狀態(tài),規(guī)則組通道轉(zhuǎn)換被執(zhí)行。即當(dāng)Jdone&Rstart_wait 有效時(shí),ADC 將由JPROC 狀態(tài)切換到RST_J 狀態(tài)。如果是持續(xù)轉(zhuǎn)換,并且注入通道已轉(zhuǎn)換完成,轉(zhuǎn)換將從注入通道組開(kāi)頭開(kāi)始注入通道轉(zhuǎn)換;如果Jstart 有效或者在其他條件下ADC 保持JPROC 狀態(tài)不變,即仍在執(zhí)行ADC 的注入轉(zhuǎn)換。
當(dāng)ADC 處于RST_R 狀態(tài)時(shí),當(dāng)ADC 斷電(~ADON),ADC 將由RST_R 狀態(tài)切換到IDLE 狀態(tài),否則RST_R 狀態(tài)切換到JPROC 狀態(tài)。
當(dāng)ADC 處于RST_J 狀態(tài)時(shí),當(dāng)ADC 斷電(~ADON),ADC 將由RST_J 狀態(tài)切換到IDLE 狀態(tài),否則ADC 將由RST_J 狀態(tài)切換到RJPROC 狀態(tài)。
當(dāng)ADC 處于RST_Ralte 狀態(tài)時(shí),對(duì)于ADC1 的狀態(tài)機(jī),當(dāng)ADC 斷電(~ADON),ADC 將由RST_Ralte狀態(tài)切換到IDLE 狀態(tài)。
Start 模塊主要負(fù)責(zé)產(chǎn)生adc_ctl_fsm 的規(guī)則通道和注入通道的啟動(dòng)信號(hào)Jstart 和Rstart。Rstart 信號(hào)邏輯圖如圖4 所示。Jstart 邏輯圖與此一致。
圖4 Rstart 信號(hào)邏輯圖
基于上述討論,在ADC 控制器設(shè)計(jì)完成后,將其與MCU 其他模塊進(jìn)行系統(tǒng)整合,對(duì)于ADC 模擬IP,通過(guò)撰寫(xiě)仿真模型完成模擬與數(shù)字之間的仿真[6]。搭建仿真與驗(yàn)證平臺(tái)進(jìn)行功能仿真驗(yàn)證。ADC 仿真驗(yàn)證平臺(tái)的原理框圖如圖5 所示,其中包括處理器內(nèi)核ARM Cortex-M3、flash 存儲(chǔ)器(用于存放測(cè)例程序),ADC 控制器設(shè)計(jì)、ADC 模擬IP 仿真模型以及平臺(tái)激勵(lì)信號(hào)[7-8]。
圖5 ADC 控制器仿真驗(yàn)證平臺(tái)
圖6 為ADC 控制器的仿真波形圖。該例程是MCU 內(nèi)部?jī)蓚€(gè)ADC 同時(shí)工作,當(dāng)有來(lái)自ADC1 的外部觸發(fā)(Jtrig_r)產(chǎn)生,在第一個(gè)觸發(fā)產(chǎn)生時(shí),ADC1上的所有注入通道被轉(zhuǎn)換,該程序設(shè)置為ADC1 注入通道長(zhǎng)度為4,每次觸發(fā)ADC1 完成4 個(gè)數(shù)據(jù)轉(zhuǎn)換;第二個(gè)觸發(fā)產(chǎn)生時(shí),ADC2 上的所有注入通道被轉(zhuǎn)換,該程序設(shè)置為ADC2 注入通道長(zhǎng)度為4,每次觸發(fā)ADC2 完成4 個(gè)數(shù)據(jù)。依此規(guī)律反復(fù)循環(huán)轉(zhuǎn)換,即實(shí)現(xiàn)設(shè)計(jì)預(yù)期的功能目標(biāo)。
圖6 ADC 注入組觸發(fā)仿真波形
通過(guò)本設(shè)計(jì)的研究,即可完成ADC 控制器的設(shè)計(jì)與實(shí)現(xiàn),并將其集成在MCU 中,驗(yàn)證功能的正確性。該設(shè)計(jì)可以被廣泛應(yīng)用于各類MCU 的ADC 控制中,完成對(duì)ADC 的控制及數(shù)據(jù)處理,可以豐富ADC的功能,具有一定的通用性。