常州信息职业技术学院电子与电气工程学院 毕业设计论文
②晶振和复位
由前面的内容可知,整个系统需要两个时钟源:AD转换时钟和DSP系统时钟,DSP外部提供的时钟信号频率为10MHz,FPGA系统时钟50MHz。
整个系统有两种复位方式:自动上电复位和上电后手动复位。自动上电复位对于DSP。采的是专用的复位芯片TPS73HD318,上电后手动复位采用的按钮复位。
29
常州信息职业技术学院电子与电气工程学院 毕业设计论文
第6章 系统软件设计
数字存储示波器的软件量是比较大的。一般来说整个系统软件可以分为硬件初始化部分;键盘处理部分:波形数据处理部分;波形显示部分。波形数据处理部分主要包括软件滤波和对信号的插值算法。下面主要是介绍系统的初始化软件和对波形的相关算法。
6.1 系统初始化
系统上电后,就开始对相关部件进行初始化。通常情况下系统初始化主要完成的工作有:完成DSP中相关寄存器的配置,包括DSP的MCBSP初始化、DSP的状态和控制寄存器的配置;完成DSP的程序和数据存储空间的配置以及DSP的时钟发生器等的配置工作;对系统的FLASH的初始化;对单片机的相关寄存器进行配置;对液晶进行复位,向液晶发初始化命令,清除液晶显示缓冲区、初始化液晶模块内部寄存器等;显示主界面;设置默认的衰减/放大倍数;设置触发产生电路的触化字;初始化键盘扫描电路:初始化触发电路(包括对FIFO的清空处理等),其中包括触发信号是来自内部还是外部,上升沿还是下降沿触发,自动触发还是单次触发等;根据时基大小设置采样时钟的分频比等。初始化完成后,系统就可以进入工作了。整个系统的初始化工作很重要。他是保证示波器能否正常工作的前提。同时在在初始化过程当中,DSP和单片机处于关中断。下面对几个重要的初始化过程作一下介绍。 6.1.1 DSP的MCBSP初始化
VC5409提供3个MCBSP串口,它的硬件部分是基于标准串口的,它的特点是:全双工通信;双缓冲的发送和三缓冲接收数据存储器:独立的接收、发送帧和时钟信号;多达128路的发送和接收通道;数据的大小范围包括8、12、16、20、24、32位字长;利用U律或者A律的压缩和扩展通信;帧同步和时钟信号的极性可编程等等。其实对MCBSP的初始化也就是对MEBSP的相关寄存器进行配置。比如对MCBSP的串口控制寄存器SPCR1、串口控制寄存器SPCR2、串口引脚寄存器PCR、接收和发送寄存器RCR[1,2],XCR[1,2]进行配置。这里的初始化主要包括下面几个过程:
①对串口控制寄存器的相关位置0,是串口复位 ②按照系统的相关要求,对MCBSP进行编程配置。 ③等待2个时钟周期,保证内部同步 ④然后就是按照DXR的要求,给出数据 ⑤因为第一步是使串口复位,所以这里要对串口使能。 ⑥等待2个时钟周期后,接收器和发送器就激活了。
下面就来按照如上的步骤来配置MCBSP串口。其实MCBSP的串口初始化程序现在比较多,一般只要在原来的程序基础上,加以修改就可以用到自己的系统上了。这里是McBSP被配置成SPI方式。实现单片机和DSP的串口通信。MCBSP
30
常州信息职业技术学院电子与电气工程学院 毕业设计论文
和CPU的通信有3种方式,第一种就是每收到或者发送一个单元,置标志位,CPU轮询次标志位。第二种就是每收到或者发送一个单元,给CPU发送中断。第三种就是通过DMA收到或者发送完一组的单元,再给CPU中断。本系统种采用的是第三种方式。这里采样DMA方式,串口每发送或者接受一个单元,都会自动触化DMA将其搬送到某一个缓冲区,等缓冲区满或者半满之后,再产生中断,这样CPU就接受中断而进行处理。对串口控制寄存器的相关位置0,串口复位
stm #spcrl 0,spsa0; stm #0000h,spsd0 stm #spcr20,spsa0
stm#0000h,spsd0;发送复位按照系统的相关要求,对MCBSP进行编程配置 stm #spcrl0,spsa0 stm #06h,spsd0; stm stm stm stm
#spcr20,spsa0 #200h,spsd0; #r,cr0,spsa0 ; #oeh,spsd0 stm stm stm stm stm stm
#rcr 1 0,spsa0 #0040h,spsd0 #rcr20,spsa0 #4h,spsd0;
#xcrl0,spsa0 ;发送 #0040h,spsd0;
stm #xcr20,spsa0 ;发送 stm #4h,spsd0
等待2个时钟周期,保证内部同步 NOP: NOP:
因为第一步是使串口复位,所以这里要对串口使能 stm #spcrl 0,spsa0; stm #07h,spsd0 stm #spcr20,spsa0
strn #201h,spsd0;打开缓冲串口
6.1.2 液晶的初始化
31
常州信息职业技术学院电子与电气工程学院 毕业设计论文
其实对液晶的显示工作,主要是理解液晶显示的初始指令,也就是灵活运行这些指令来实现图形的显示,这些指令一般比较简单,拿MGLSl6294来说。它有7条指令:
①显示开/关指令
②显示起始行ROW设置指令 ③页PAGE设置指令
④列地址YAddress设置指令 ⑤读状态指令 ⑥写数据指令 ⑦读数据指令
以下是对液晶进行初始化的C语言程序: void LcdInit(void) {
LcdCmdWr(O,0xc0); LcdCmdWr(1,OxcO); LcdCmdWr(O,0x3f); LedCmdWr(1,Ox30; }
void LcdCmdWr(bit DispArea,uchar CmdP) {
if(DispArea==0) {
LedCSI=I; LcdCS2=O; ) else {
LcdCSI=O; LcdCS2=I; }
LcdDI=0; LcdRW=I; LcdChkBusy0; LcdRW=O; DatBus=CmdP; LcdEN=I; LcdEN=0; } 6.1.3 FPGA中部分电路的初始化工作
设置默认的衰减/放大倍数;设置触发产生电路的触化字;初始化键盘扫描电路;初始化触发电路(包括对FIFO的清空处理等),其中包括触发信号是来自内部还是外部,上升沿还是下降沿触发,自动触发还是单次触发等;这些参数的
32
常州信息职业技术学院电子与电气工程学院 毕业设计论文
初始化主要包括用户根据需要在键盘上进行设置。然后单片机通过多缓冲串口把用户设计好的这些参数传到DSP里面。因为DSP的低8位数据线是通过与FPGA中的相关电路相连接的。所以DSP要向这些电路发送数据的时候,必须先选中这些电路。
下面是设置这些参数的一部分程序。
/*首先要使得FⅡO工作在tri.state状态下*/ set_dso_eontrol(0x6 I CONTROL—BIDI—BIT); set_dso_control(0x7 CONTROL—BIDI—BIT); set_dso_control(0x0); /*首先设置前16位数据*/
set_reg(0x2,(chat)(scope_data.pretrigger&0xFFFF)); /*pulse the pre_trig_load0 bit */ set_reg(0x3,0x0); set_reg(0x3,0x 1); set_reg(Ox3,OxO); /*再设置最后3位数据*/
set_reg(Ox2,(char)((scope_data.pre_trigger&Ox070000)>>16)); /*加一个脉冲进来*/ set_reg(Ox3,OxO); setreg(Ox3,Ox4); set__reg(Ox3,OxO); /*设置示波器的工作模式/*
switch(scope_data.scope_mode) {
case O:i-0;break; case 1:i=l;break; case 2:i=6;break; case 3:i=2;break; )
/*设置时钟分频值/*
i=i I(scope_data.cloek_div《5); i=i I(scope_data.trig_sel《3); set_reg(Ox4,i); /*设置触发值寄存器/*
if(scope_data.scope_mode==2) {
set_reg(Ox2,(char)scope_data.trig value); set_reg(Ox5,OxO); set_reg(Ox5,Ox 1); set_reg(Ox5,OxO);
set_reg(Ox2,(char)(scope_data.trig_value>>8)); setreg(Ox5,OxO); setreg(Ox5,Ox2); setreg(Ox5,OxO);
33