孫瑞正
(山東科匯電力自動化有限公司 山東 淄博 255087)
國民經濟的迅猛發展,對能源尤其是電能的要求也有所提高。因此,電力系統監控產品也朝著精度更高,功能更強,響應更快發展。
當前電力系統監控產品如配網自動化控制器、電能質量監測、故障錄波、繼電保護等一般都采用DSP+MCU的設計方案,目的是將DSP的高速數字信號處理功能和MCU完善的管理、通訊、豐富的接口等功能相結合,從而使得產品功能更豐富,擴展更靈活。
對于電力系統監控產品來說,模擬量的獲取是一個非常重要的環節。以每周波采樣32點,6路模擬量計,每秒需要讀取的原始數據約為9.6 k字。顯然,頻繁的讀取工作非常繁復,不管是對DSP還是MCU。更何況許多產品需要更高的采樣速度和更多的模擬量輸入。而DSP與MCU之間的數據交換同樣很繁復。
文中提出了一種基于ADSP-218X[1-3]的模擬量數據流接口方法,可以避免因為頻繁讀取模擬量相關數據而造成的資源浪費。經產品驗證,本方法更靈活,更合理。
圖1為模擬量接口框圖。其中,ADSP-2185M[6]主要負責AD轉換器輸入數據的收集和實時計算。由Actel公司的FPGA(APA150)實現采樣控制和接口邏輯。ADS8509是TI公司的一款SAR型AD轉換器,其精度為16位,采樣速度最高250KSPS,接口為串行接口。圖1也反映了模擬量數據流程。ADS8509在FPGA的控制下完成模擬量采集,其數據經SPORT0口進入ADSP-2185M。DSP在完成計算后,其計算結果經IDMA口讀入MCU。

圖1 模擬量接口框圖Fig.1 ADC data-flow path
SPORT[3-5]口是AD公司獨有的一種同步串行口。在ADSP-218x[6]系列、Blackfin等系列產品中都有提供。SPORT口有5根信號線,其定義為:
SCLK:時鐘信號
RFS:接收幀同步信號
TFS:發送幀同步信號
DR:串行數據接收
DT:串行數據發送
SPORT口有幾個突出的特點,包括:SPORT口是雙向的,具有獨立的雙緩沖發送或接收數據區即Double-buffered功能;Autobuffering即自動緩沖功能;幀長可變,串行數據長度從3到16位可選;時鐘信號可變,而且可以外部輸入,也可以內部產生等。
Double-buffered即雙緩沖功能,實際是指發送和接收均有發送數據寄存器和移位寄存器共兩個寄存器,避免了因響應不及時導致的數據丟失;Autobuffering即發送/接收的數據可以基于DMA操作自動讀出/寫入環形緩沖區,而不需要外部干預。一旦發送緩沖區發完/接收緩沖區收滿,即可以引發中斷。如果在中斷服務程序中將緩沖區設為另一個,則可以兩個緩沖區輪流工作,從而為數據處理留出足夠的時間。
文中,SPORT0的時鐘由ADC提供,數據位長為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接收中斷服務程序不再詳敘,其基本內容如下:
/*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系列產品的一個16位并行DMA接口。由于電力系統監控產品中的原始模擬數據為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位地址/數據總線
通??梢杂玫刂肪€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),讀取數據,也可以用來交換控制及狀態信息。
為了能使DSP從IDMA自舉,需對相關信號加以配置,對于 ADSP-2185M, 可以將 MODE_D:MODE_C:MODE_B:MODE_A設為0101B。
IDMA接口有一個突出的優點,即只需要在開始訪問時設定一次地址,隨后的讀/寫操作可以不再重設地址,IDMA會自動將該地址值遞加1,直到主機通過IAL和IS鎖存新的地址。對于需要實時重復讀取數據的應用,如電力系統監控產品,這個功能無疑會大量節省主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; } 讀取數據子程序如下: //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數據接口方案,基于SPORT口的串行ADC數據接口方案有許多優點。比如,其控制邏輯相對簡單,串行數據更有利于進行電的隔離,價格更便宜等。在電力系統監控產品中使用SPORT口和IDMA口,可以減少因實時數據讀取及計算結果傳輸造成的MCU和DSP資源浪費,為數字信號處理留出足夠的時間,為更復雜的算法采用提供可能性。隨著產品模擬量數量的增加以及對實時性要求的提高,該方法的優勢更加明顯。該方法已在我公司的多種電力系統監控產品中使用,并已有數千套產品應用于工程現場。 [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].單片機與嵌入式系統應用, 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 結 論