DSP

ARM+DSP结构设计与实现

2019-07-13 19:11发布

转载至: http://www.ca800.com/apply/d_1nrutga2l2ds7_1.html
1  引言
ARM(Advanced RISC Machine)是英国ARM公司设计开发的通用32位RISC微处理器体系结构,其主要优势在于简单的设计和高效的指令集。ARM的设计目标是微型化、低功耗、高性能的微处理器实现[1]。ARM已经成为嵌入式系统主控制器的首选。DSP(Digital Signal Processor)具有运算速度高、功耗低和智能化外设等特点,在数字信号处理方面显示了强大的实力。由于ARM与DSP所具有的微型化、低功耗、高效性等共同特点和各自的独特优势,以ARM+DSP结构为核心的嵌入式系统在PDA、STB、DVD等消费类电子产品以及GPS、航空、勘探、测量等军方产品中得到了广泛的应用。
本文设计了基于ARM S3C2410与TMS320C5510 DSP的ARM+DSP结构的接口电路,并给出了其软件实现。
ARM+DSP结构以ARM为主控制器,DSP为协处理器,方案如图1所示。 ARM完成系统的流程调度、任务处理、中断处理以及提供显示、通信、远程控制等人机接口;DSP主要完成数字滤波、编码解码、数字调制解调等功能。ARM与DSP利用了DSP提供的HPI口的进行通信,方便、灵活,接口电路设计简单。ARM+DSP结构把ARM处理器和DSP处理器有机地结合起来,既能满足信号数据实时性要求,又便于系统的控制操作与升级,提高了系统的整体性能。ARM+DSP结构具有很强的通用性,几乎不修改硬件和修改少量软件代码就可以轻松实现不同系统间的移植。 3  ARM S3C2410与TMS320C5510 DSP硬件接口设计
TMS320C5510 DSP提供了一个16位宽的并行端口HPI(host port interface),通过HPI口,主机可以直接访问TMS320C5510 DSP的存储器,有关TMS320C5510 DSP的HPI口详细情况请参考资料[2][3]。
ARM S3C2410与TMS320C5510 DSP接口电路图如图2所示。 硬件设计中需要注意事项及相关引脚说明:
(1)  HPI接口是16位数据宽度的,S3C2410的地址引脚ADD20:1应当分别与TMS320C5510的A19:0脚相连。
(2)  设计中采用非复用模式,控制信号HCNTL0用于控制访问HPIC或HPID寄存器。HCNTL0与ARM S3C2410的A21引脚相连,访问HPIC和HPID的起始地址分别为0x38000000和0x38200000。
(3)  nOE1和DIR1控制与数据线相连的缓冲器,nOE2和DIR2控制与地址线相连的缓冲器。
(4)  nHCS作为HPI的选通信号,和nHDS1、nHDS2信号一起控制HPI的数据传输,3个信号中最后出现下降沿完成对HCNTL0、HR/nW信号采样。由于nHDS1和nHDS2信号在HPI内是异或关系,他们不能同时为高电平或低电平,否则不能产生使能信号,HPI口不能工作。设计中将HDS1拉高,这样只需对nHDS2进行控制即可。
(5)  由于TMS320C5510不再支持位使能功能,必须将nHBE0、nHBE1置位低电平。
(6)  须将nWait和HRDY引脚相连,以实现高速数据传输过程中ARM S3C2410与TMS320C5510 DSP之间的同步操作。 4  ARM S3C2410与TMS320C5510 DSP通信程序设计
ARM S3C2410通过HPI口访问TMS320C5510 DSP存储器,必须正确设置ARM S3C2410访问外部存储器的控制时序和带宽相关寄存器。
4.1  TMS320C5510 DSP系统引导程序设计[4][5]
TMS320C5510 DSP提供了多种引导方式,其中HPI口引导方式具有方便、灵活的特点,可以根据实际需要从主机加载不同的应用程序和数据到DSP的存储器中。
采用HPI口引导方式的步骤如下:
(1)  设置引导模式引脚BOOTM[3:0]=1101b。
(2)  释放nRESET引脚(由低到高)。
(3)  主机加载DSP应用程序到目的地址(DSP片内存储器)。
(4)  加载完成后,主机设置HPIC寄存器的RESET位为1。
(5)  DSP从字节地址010000h开始运行应用程序。
在ARM+DSP结构中,利用本文设计的HPI口接口电路图,选择HPI引导方式加载TMS320C5510 DSP程序代码和数据。为了加快下载程序速度,DSP程序以可执行的二进制代码方式进行存储(将CCS编译器所产生的COFF文件转化为可执行的二进制代码请参考相关资料)。在存储器中,按照DSPProgramInMemoryStruct结构体存储DSP程序的相关信息,之后依次存储DSP各段程序的二进制代码。
typedef struct DSPProgramInMemoryStruct{
unsigned short Flag;                         
             //文件完整性标志,完整时为0xE5
unsigned short TotalSection;                   
            //程序总的段数
struct {                    
     unsigned short SectionAddressInDSP;      
            //各段程序在DSP中的地址
     unsigned short SectionLength;            
                            //各段程序长度
}SectionInfo[7];               //为了方便和实际情况,这里最多只能存7段程序
} DSPProgramInMemory_Struct;
根据硬件设计图,初始化及地址定义如下:
#define WriteHPIC(data)  (*(volatile unsigned short *)(0x38000000))=(unsigned short)data 
#define WriteHPID(addr,data)  
(*(volatile unsigned short *) (0x38200000+(((unsigned int)(addr))<<1)))=( unsigned short )data 
#define ReadMemory(addr)  (*((volatile unsigned short *)(addr)) )            //读取存储器中的数据
void ResetDSP(void);   //主机通过GPH8引脚复位DSP
S3C2410下载TMS320C5510 DSP程序的实现代码如下:
int DownLoadDSP(unsigned int StartAddress){
DSPProgramInMemory_Struct DSPInMemory;
int i, j;
unsigned int Pos=0;  
ResetDSP ();    //主机通过GPH8引脚复位DSP
If(ReadMemory(StartAddress)!=0xE5)
               //检验DSP文件的完整性
      reuturn 0;
DSPInMemory.TotalSection=ReadMemory (StartAddress+2);                //获取总段数
for(i=0; i<7; i++){          //获取各段在DSP中的地址和长度
     DSPInMemory.SectionInfo[i].SectionAddressInDSP=ReadMemory (StartAddress+4+2*i);
DSPInMemory.SectionInfo[i].SectionLength      =ReadMemory (StartAddress+4+2*i+1);}
for(i=0;i< DSPInMemory.TotalSection;i++)
                   //下载程序到DSP
    for(j=0;j< DSPInMemory. SectionInfo[i].SectionLength;j+=2){
             WriteHPID(DSPInMemory. SectionInfo[i].SectionAddressInDSP +j/2, 
ReadMemory (StartAddress +0x30+Pos));
             Pos+=2;}
        WriteHPID(0x8000,(ReadMemory(StartAddress+0x30) &0x00ff)|0x6a00);   
                       //写入口点向量
        WriteHPID(0x8001,ReadMemory(StartAddress+0x32));        //写入口点向量
WriteHPIC(0x1);        //通过HPIC口复位DSP
return 1;}
4.2  ARM S3C2410与TMS320C5510 DSP通信程序设计
在HPI口通信方式下,TMS320C5510 DSP的片内存储器DARAM、SARAM和片外存储器CE0对外界完全透明,由主机通过访问HPI的地址和数据寄存器便可完成对TMS320C5510 DSP片内存储器和部分片外存储器的读写。ARM S3C2410与TMS320C5510 DSP通信的流程图如图3所示。 主机通过HPI口将参数写入DSP的DARAM,通过向HPI控制寄存器(HPIC)的DSPINT位写1产生HPI中断;DSP接收到HPI中断后,从DARAM取参数,根据要求执行不同的任务,数据处理完成后,将结果存放在DARAM中,通知主机取结果,主机通过HPI读取结果,根据结果控制程序流程和显示,这样,通过HPI口就完成了ARM S3C2410与TMS320C5510 DSP之间的通信。 5  结束语
随着嵌入式系统和信号处理器的飞速发展,ARM+DSP结构应用得越来越广泛,利用HPI口进行ARM与DSP之间的通信,可以使硬件的设计更加简单、灵活。DSP在通过HPI口和主机通信的过程中完全没有软件和硬件开销,由DSP自身的硬件协调冲突,不会打断DSP正常程序的运行,这特别有利于构成主处理器和协处理器的模式,完成高速的数字信号处理。本文设计的ARM+DSP结构已成功地应用在测试仪器中。