孫瑞正
(山東科匯電力自動化有限公司 山東 淄博 255087)
國民經(jīng)濟的迅猛發(fā)展,對能源尤其是電能的要求也有所提高。因此,電力系統(tǒng)監(jiān)控產(chǎn)品也朝著精度更高,功能更強,響應更快發(fā)展。
當前電力系統(tǒng)監(jiān)控產(chǎn)品如配網(wǎng)自動化控制器、電能質(zhì)量監(jiān)測、故障錄波、繼電保護等一般都采用DSP+MCU的設計方案,目的是將DSP的高速數(shù)字信號處理功能和MCU完善的管理、通訊、豐富的接口等功能相結合,從而使得產(chǎn)品功能更豐富,擴展更靈活。
對于電力系統(tǒng)監(jiān)控產(chǎn)品來說,模擬量的獲取是一個非常重要的環(huán)節(jié)。以每周波采樣32點,6路模擬量計,每秒需要讀取的原始數(shù)據(jù)約為9.6 k字。顯然,頻繁的讀取工作非常繁復,不管是對DSP還是MCU。更何況許多產(chǎn)品需要更高的采樣速度和更多的模擬量輸入。而DSP與MCU之間的數(shù)據(jù)交換同樣很繁復。
文中提出了一種基于ADSP-218X[1-3]的模擬量數(shù)據(jù)流接口方法,可以避免因為頻繁讀取模擬量相關數(shù)據(jù)而造成的資源浪費。經(jīng)產(chǎn)品驗證,本方法更靈活,更合理。
圖1為模擬量接口框圖。其中,ADSP-2185M[6]主要負責AD轉換器輸入數(shù)據(jù)的收集和實時計算。由Actel公司的FPGA(APA150)實現(xiàn)采樣控制和接口邏輯。ADS8509是TI公司的一款SAR型AD轉換器,其精度為16位,采樣速度最高250KSPS,接口為串行接口。圖1也反映了模擬量數(shù)據(jù)流程。ADS8509在FPGA的控制下完成模擬量采集,其數(shù)據(jù)經(jīng)SPORT0口進入ADSP-2185M。DSP在完成計算后,其計算結果經(jīng)IDMA口讀入MCU。
圖1 模擬量接口框圖Fig.1 ADC data-flow path
SPORT[3-5]口是AD公司獨有的一種同步串行口。在ADSP-218x[6]系列、Blackfin等系列產(chǎn)品中都有提供。SPORT口有5根信號線,其定義為:
SCLK:時鐘信號
RFS:接收幀同步信號
TFS:發(fā)送幀同步信號
DR:串行數(shù)據(jù)接收
DT:串行數(shù)據(jù)發(fā)送
SPORT口有幾個突出的特點,包括:SPORT口是雙向的,具有獨立的雙緩沖發(fā)送或接收數(shù)據(jù)區(qū)即Double-buffered功能;Autobuffering即自動緩沖功能;幀長可變,串行數(shù)據(jù)長度從3到16位可選;時鐘信號可變,而且可以外部輸入,也可以內(nèi)部產(chǎn)生等。
Double-buffered即雙緩沖功能,實際是指發(fā)送和接收均有發(fā)送數(shù)據(jù)寄存器和移位寄存器共兩個寄存器,避免了因響應不及時導致的數(shù)據(jù)丟失;Autobuffering即發(fā)送/接收的數(shù)據(jù)可以基于DMA操作自動讀出/寫入環(huán)形緩沖區(qū),而不需要外部干預。一旦發(fā)送緩沖區(qū)發(fā)完/接收緩沖區(qū)收滿,即可以引發(fā)中斷。如果在中斷服務程序中將緩沖區(qū)設為另一個,則可以兩個緩沖區(qū)輪流工作,從而為數(shù)據(jù)處理留出足夠的時間。
文中,SPORT0的時鐘由ADC提供,數(shù)據(jù)位長為16位。設置方法如下:
asm(“I2=^RxBuff0_;”); /*I2 contains the address of RxBuffer0*/
asm(“M1=0x0001;”); /*Fill every Location */
asm (“L2=0x0500;”); /*L2 set to receive 1 cycle for each channel*/
asm (“AX0=0x0025;”); /*RX autobuffer enable;use I2 and M1*/
asm (“DM (0x3ff3 )=AX0;”);/*Write the AutoBuffer Control Register*/
/*Setup Sport 0 for External Serial Clock, */
/*Receive Framing Signal for every word, */
/*External Framing Signal, Alternate Framing Mode, */
/*Active Low framing Signal, */
/*Right Justify sign extension, */
/*16-bit word length */
asm(“AX0=0x305f;”);
asm(“DM( 0x3ff6 ) =AX0;”);
asm(“AX0=0x0000;”);
asm(“DM( 0x3ffd ) =AX0;”); /*Timer Not Used */
asm(“DM( 0x3ffc ) =AX0;”);
asm(“DM( 0x3ffb ) =AX0;”);
asm(“DM( 0x3ffe ) =AX0;”); /*No DM wait States */
asm (“IFC =0x0021;”); /*Clear any extraneous SPORT0 Int(Rx/Tx)*/
asm (“ICNTL = 0x0000;”); /* interruptnesting disabled */
asm(“AX0=0x1000;”); /*Enable SPORT0-Rx only*/asm(“DM( 0x3fff) =AX0;”);
asm (“IMASK=0x0021;”); /*Enable SPORT0 Recv-Interrupt */
/*and Timer interrupt */
SPORT0接收中斷服務程序不再詳敘,其基本內(nèi)容如下:
/*ping-pongs in the alternate DMA buffer*/
/*check the data error or not*/
/*set the buffer OK flag*/
IDMA[3-4,7]口 , 即 Internal Direct Memory Access 口 ,是 ADSP-218x系列產(chǎn)品的一個16位并行DMA接口。由于電力系統(tǒng)監(jiān)控產(chǎn)品中的原始模擬數(shù)據(jù)為12位或16位,IDMA的位寬正好滿足要求。
IDMA接口信號如下:
IS: IDMA接口片選信號
IRD:IDMA接口讀信號。當IS和IRD同時有效時,開始一個IDMA讀周期
IWR:IDMA接口寫信號。當IS和IWR同時有效時,開始一個IDMA寫周期
IAL:IDMA接口地址鎖存信號。當IS和IAL同時有效時,開始一個IDMA地址鎖存序列。此時主機應將訪問IDMA的起臺地址送到IAD0~15上
IACK:IDMA接口允許訪問的確認信號
IAD0~15:IDMA接口的 16位地址/數(shù)據(jù)總線
通常可以用地址線A1接到IAL。此時,實際上對主MCU來說,ADSP-2185M只占用了兩個地址即:
#define IDMA_DSPAddr * ((unsigned short *)(DSPIF_ADDRESS+2))
#define IDMA_DSPData * ((unsigned short *)(DSPIF_ADDRESS))
IACK接到主MCU的IO口PA14,通過查詢該口,即可確定是否可以訪問DSP。
通過IDMA接口,主MCU可以下載DSP程序(Boot Loading through the IDMA Port),讀取數(shù)據(jù),也可以用來交換控制及狀態(tài)信息。
為了能使DSP從IDMA自舉,需對相關信號加以配置,對于 ADSP-2185M, 可以將 MODE_D:MODE_C:MODE_B:MODE_A設為0101B。
IDMA接口有一個突出的優(yōu)點,即只需要在開始訪問時設定一次地址,隨后的讀/寫操作可以不再重設地址,IDMA會自動將該地址值遞加1,直到主機通過IAL和IS鎖存新的地址。對于需要實時重復讀取數(shù)據(jù)的應用,如電力系統(tǒng)監(jiān)控產(chǎn)品,這個功能無疑會大量節(jié)省主MCU資源。
下載DSP程序的子程序如下:
//download IDMA-Format DSP Code
unsigned char IDMA_DLCode(unsigned short*SourcePtr)
{
unsigned short count,temp,loop1;
unsigned char flag;
unsigned short DataNo;
DataNo=*SourcePtr++;
while (DataNo!=0xffff){
if((DataNo==0) ||(DataNo>0x2000))return FALSE;
flag=IDMA_WaitAck();
if(flag==TRUE){ //IDMA Control
IDMA_DSPAddr=*SourcePtr++;
}
else return FALSE;
flag=IDMA_WaitAck();
if(flag==TRUE){ //IDMA Ovlay
IDMA_DSPAddr=*SourcePtr++;
}
else return FALSE;
count=0;
do{
flag=IDMA_WaitAck();
if(flag==TRUE ){
IDMA_DSPData=*SourcePtr++;count++;
}
}while ((flag==TRUE) && (count if(flag==FALSE) return FALSE; DataNo=*SourcePtr++; } return TRUE; } 讀取數(shù)據(jù)子程序如下: //Long Read a segment Data,StartAddr should include PM/DM flag unsigned char IDMA_LReadData (unsigned short*DestinPtr,unsigned short StartAddr,unsigned short IDMAOvlay,unsigned short DataNo) { unsigned short count,temp; unsigned char flag; if((DataNo==0) ||(DataNo>0x2000))return FALSE; flag=IDMA_WaitAck(); if(flag==TRUE){ //IDMA Control IDMA_DSPAddr=StartAddr; } else return FALSE; flag=IDMA_WaitAck(); if(flag==TRUE){ //IDMA Ovlay IDMA_DSPAddr=IDMAOvlay;} else return FALSE; count=0; do{ flag=IDMA_WaitAck(); if(flag==TRUE ){ *DestinPtr++=IDMA_DSPData; count++; } }while ((flag==TRUE) && (count if(flag==FALSE) return FALSE; return TRUE; } 相比于ADC直接連接MCU(無論是串行方式還是并行方式)和基于雙口RAM的ADC數(shù)據(jù)接口方案,基于SPORT口的串行ADC數(shù)據(jù)接口方案有許多優(yōu)點。比如,其控制邏輯相對簡單,串行數(shù)據(jù)更有利于進行電的隔離,價格更便宜等。在電力系統(tǒng)監(jiān)控產(chǎn)品中使用SPORT口和IDMA口,可以減少因?qū)崟r數(shù)據(jù)讀取及計算結果傳輸造成的MCU和DSP資源浪費,為數(shù)字信號處理留出足夠的時間,為更復雜的算法采用提供可能性。隨著產(chǎn)品模擬量數(shù)量的增加以及對實時性要求的提高,該方法的優(yōu)勢更加明顯。該方法已在我公司的多種電力系統(tǒng)監(jiān)控產(chǎn)品中使用,并已有數(shù)千套產(chǎn)品應用于工程現(xiàn)場。 [1]Analog Devices.ADSP 2100 Family User’s Manual[EB/OL].http://www.analog.com/static/imported-files/processor_manuals_legacy/160158757adsp_21xx_um_rev3_0.zip. [2]Analog Devices.ADSP-218x DSP Instruction Set Reference.[EB/OL].(2004).http://www.analog.com/static/imported-files/processor_manuals/5876423468xinset.pdf. [3]Analog Devices.ADSP-218x DSP Hardware Reference[EB/OL].(2001).http://www.analog.com/static/imported-files/processor_manuals/3110043388x_hardware.zip. [4]袁璟,高明.ADSP-218X的IDMA接口自舉設計[J].單片機與嵌入式系統(tǒng)應用, 2004(10):24-26.YUAN Jing,GAO Ming.Self-bootingdesign ofIDMA interface of ADSP-218X[J].Microcontrollers&Embedded Systems,2004(10):24-26. [5]Analog Devices.Autobuffering,C and FFTs on the ADSP-218x[EB/OL].(2001).http://www.analog.com/static/importedfiles/application_notes/ee_142.pdf. [6]Analog Devices.ADSP-2185M DataSheet[EB/OL].(2000).http://www.analog.com/static/imported-files/data_sheets/ADSP-2185M.pdf. [7]Analog Devices.ADSP-2189 IDMA Interface to Motorola MC68300 Family of Microprocessors [EB/OL].2000.http://www.analog.com/static/imported-files/application_notes/EE-115.pdf.2 結 論