桂林电子科技大学毕业设计(论文)报告用纸 第 21 页 共 48 页
4 系统软件设计
软件设计包括系统初始化、DSP主程序、上位机设计以及特殊状况(如溢出、掉电等)处理。总体上由两部分组成:一部分为DSP程序设计,一部分为上位机程序设计。 4.1 DSP系统流程
如图4-1所示。
图4-1 系统流程图
4.2 DSP程序设计
TMS320LF2407A是基于C2000平台的.提供两种编程语言:C/C++语言或汇编语言。其中,c语言编写的程序可读性、可移植性强且大大缩短了开发周期,但执行效率低,程序出错时不易诊断。汇编语言程序效率高,但编写比较烦琐。通常做法是程序核心部分(即经常调用部分)采用汇编语言编写,以提高整个系统的执行效率。对实时性要求不
桂林电子科技大学毕业设计(论文)报告用纸 第 22 页 共 48 页
高的部分采用c语言编写以降低程序的复杂度,提高程序的可读性和可修改性。本文采用C语言和汇编语言混合编写的多文件结构.主要包括主程序、读取AD转换结果的中断程序及串行通信程序设计。主程序包括DSP系统初始化,当XINTl引脚上的信号由高到低跳变,DSP进人中断,执行读取AD转换结果的程序。
2407A串行通信的软件设计可以采用查询和中断两种不同的方式,其中查询方式采集会占用大量CPU资源,严重影响DSP的利用率。本设计采用中断方,当串行口产生中断时,DSP就执行相应的串口中断服务。这种方式相对于查询方式大大提高了CPU的利用率,满足了系统的实时性要求。
2407A内部有看门狗(WD)定时器,能够监视软件和硬件的运行。在CPU混乱时完成系统的复位功能,有效地防止程序跑飞,提高CPU的可靠性,保证了系统的完整性 4.3 A/D转换程序设计
图4-2 ADC转换流程图
桂林电子科技大学毕业设计(论文)报告用纸 第 23 页 共 48 页
TMS320LF2407A片内的模数转换模块ADC在设计上具有很强的灵活性,其内部具有多达16个的模拟输入通道(ADCIN0—ADCINl5)和4个不同的中断触发方式,以及灵活的中断控制方式。LF2407A的ADC模块的工作方式分为连续的自动排序模式和启动/停止两种。在这两种工作方式下,ADC模块都能够以序列转换进行自动排序,可通过模拟输入通道的多路选择器来选择要转换的通道,转换结束后,转换后的数值结果保存在该通道相应的结果寄存器(RESULTn)中,而且用户可以对同一个通道进行多次采样,即对某一通道实行“过采样”,这样得到的采样结果比传统的采样结果分辨率高。该设计中我们所采用的是连续的自动排序工作方式。A/D转换流程图如图4-2所示。 4.3.1A/D转换主程序
见附录1 4.4 FIR滤波器设计
在本系统的设计中,根据需要A/D转换的触发源采用周期中断标志触发。在使用ADC模块前,需要在校准模式下对其进行校准,校准模式可以计算ADC模块的零,中点和最大值时的偏移误差.该偏移误差值的二进制补码被保存在CALIBRTION寄存器,为了得到精确的结果,校准操作必须作两次,即在保证已经完成第一个校准操作后,应当立即启动第二个校准操作.在转换时,ADC硬件自动将偏移误差加到转换值上。
TMS320LF2407A定点DSP芯片所提供的单周期乘/累加带数据移动指令和较大的片内RAM空间使数字滤波器每个滤波样值的计算可以在一个周期内完成.TMS320LF2407A内部具有544字的RAM,分为B0,B1和B2三块.其中B0块(256字)可以用软件编程为数据区(CLRC CNF)或程序区(SETCCNF),执行SETC CNF后,B0块映射到程序区的FF00H—FFFFH.采用高效的MACD指令,必须用片内RAM,其中B0块必须配置为程序区。
采用MACD指令结合RPT指令就可以实现单周期的滤波样值计算: RPT N一1
MACD (程序地址),(数据地址)
其中,指令“RPT N—l”将立即数N—l装入到重复计数器,使下一条指令重复执行N次。MACD指令实现下列功能:
(1)将程序存储器地址装入到程序计数器。
(2)将存人数据区(B1块)的数据乘以程序区(BO块)的数据。 (3)将上次的乘积加到累加器。
(4)移动数据,将B1块中数据向高地址移动一个地址。
(5)每次累加后,程序计数器加1,指向下一个单位脉冲响应样值。
为了使用MACD指令,输入样值x(n)和滤波器系数h(n)必须合理地进行存放。 下面是实现FIR滤波方程的部分汇编程序. ;N阶F1R滤波的LF2407A汇编程序
;y(n)=x(n一(N一1))h(N一1)+x(n一(N一2))h(N—Z)+?x(n)h(n)
桂林电子科技大学毕业设计(论文)报告用纸 第 24 页 共 48 页
SETC CNF;Bo块配置为程序区 NEXT LACC XN MAR ARl,* LAR ARl,3FFH MPY 0 ZAC RPT N~1 MACD FF00H,*一 APAC
SACH PADATDIR B NEXT 程序说明:
(1)FIR滤波器系数h(0),?,h(N一1)均小于1,可用Q15(小数点在第15位前面)表示。
(2)输入待滤波样值从I/O口得到,直接送到对应的存储单元。
(3)由于滤波器系数用Q15表示,因此乘累加后在ACC中的值也是Q15,左移一位并取高16位后得到的数就与输入的样值具有相同的Q值了。
(4)滤波后的样值由SACH PADATDR在I/O口送出。
(5)一点滤波结束后,由于MACD指令的作用,所有的输入样值均向高地址移动一个位置,即x[n一(N一2)]移动到x[n一(N一1)]的位置,x[n一(N一3)]移动到x[n一(N~2)]的位置,?,x(n)移动到x(n一1)的位置,从而为下一点滤波作好准备。
在滤波程序中,执行MACD时用AR1间接寻址数据值。采用RPT结合MACD实现FIR滤波比较适用于滤波器阶数大于3的情况。对于阶数小于3的FIR滤波器,用LT/MPY指令对代替RPT/MACD可以实现更高效率的滤波。 4.5 串行通信接口(SCI)模块程序设计
MS320LF2407的申行通信设计有查询和中断两种实现方式。查询方式就是在主程序中查询相应的中断标志位,满足条件就执行相应的中断处理程序,否则就不执行,但是这种工作方式需要在计算机和DSP之间交换数据,查询、等待会很大程度的占用CPU的内存。从而大大降低CPU的工作效率,浪费了CPU有限的工作资源。为节省CPU的资源,通常采用中断的通信方式,在中断方式下,DSP在启动串口后就不再查询它的工作状态,而是按照自己的主程序顺序执行,当串口产生中断请求,DSP再响应中断,转而处理中断通讯程序,并保存现有的工作状态。包括程序的执行地址以及各个控制宇的状态,处理完中断程序以后,再回到中断的地方继续执行自己的主程序。
在实际的运用中,要完成DSP与上位机的通信,还要对DSP中有关串行通信控制字和标志寄存器进行正确的设置。在上位机与DSP构成的通信中,软件是整个系统的重要部
桂林电子科技大学毕业设计(论文)报告用纸 第 25 页 共 48 页
分,软件具有可模块化的特点,经过模块化以后的具有更好的可读性和通用性,我们在设计过程中将整个软件设计划分为以下几个模块:主程序、串口初始化、数据发送、数据接收等。主程序在整个软件设计的过程中是一个相当关键的部分,主程序除了完成对DSP进行系统初始化(包括中断设置、溢出设置以及倍频等)和设计系统的应用功能以外更重要的是将各个子程序有机的结合在一起,对子程序进行管理和控制,并且为子程序提供相应的程序人口,从而实现整个系统的功能。串口初始化程序完成对串行通信的基本的设置,只要包括设置通信的波特率、有无校验位、设置通信协议、开串口以及中断等。接收和发送子
程序则是完成数据的接收和发送。系统运行从主程序开始,执行自己相应的程序,实现用户的预定功能,在不产生串行中断请求的时候是不处理串行通信程序的,一旦产生串行中断请求,则转去处理串行通信子程序,从而完成一次数据的接收和发送,串行通信结束,程序返回。上位机的串行中断子程序软件流程如图4-3所示。
图4-3 中断子程序流程图