第四章习题——参考答案一、简述题1.题题目:说明DSP具有哪些主要特点,DSP的型号如何确定。参考答案:(1)DSP具有如下主要特点:DSP普遍采用数据总线和程序总线分离的改进型哈佛结构;DSP一般都采用多总线结构;DSP一般都采用多级流水线技术;DSP内部一般都包含多处理单元结构;DSP一般都具有特殊功能的指令;由于采用哈佛结构、流水线操作、专用的硬件乘法器、特殊的指令以及集成电路的优化设计,所以DSP一般都具有快速的指令周期;DSP一般采用16位、24位、32位字长,具有较高的运算精度高;新一代的DSP具有较强的接口功能;很多类型的DSP都支持多处理器的结构;DSP一般都具有节电管理和低功耗结构。(2)在利用DSP进行系统设计时,DSP具体型号的选择需要根据系统的特点、性能要求、成本、功耗以及技术开发周期等因素进行综合考虑,一般情况下主要考虑以下几个方面的因素:A.系统特点、B.算法格式、C.系统精度、D.处理速度、E.功耗、F.性能价格比、G.支持多处理器、H.系统开发的难易程度。132第4章DSP应用系统设计2.题题目:DSP应用系统的典型开发过程是怎样的?参考答案:DSP应用系统的一般开发过程如图D4-1所示:图D4-1133第4章DSP应用系统设计3.题题目:讨论一个能独立运行和调试的TMS320VC5416最小系统应具备怎样的硬件条件。参考答案:一个能可调试的TMS320VC5416最小系统应具备如下的基本硬件条件:能为DSP提供I/O与内核正常供电的供电电路,能为DSP提供稳定与精确时钟的时钟电路,以及进行DSP在线调试需要的JTAG仿真调试接口电路与复位电路,如TMS320VC5416最小系统还要实现独立运行功能,则还需要为DSP扩展必要的存储器(如EEPROM/FlashROM等)电路。当然,要保证TMS320VC5416最小系统能顺利的正常运行,一些外加的辅助电路也是必不可少的,例如模式选择电路、外部中断输入引脚与未用输入引脚的上拉保护电路等。134第4章DSP应用系统设计4.题题目:请仔细分析本章介绍的TMS320VC5416最小系统与扩展系统各电路模块硬件设计原理图,说明TMS320VC5416最小系统与扩展系统各个电路模块是如何设计的。参考答案:略。(TMS320VC5416最小系统与扩展系统各个电路模块的功能与具体硬件设计本章4.3节与4.4节有较为详细,读者可以参阅。)135第4章DSP应用系统设计5.题题目:请说明TMS320VC5416扩展系统中逻辑电路在DSP系统中的特殊作用,以及利用CPLD器件设计逻辑电路的好处。参考答案:(1)TMS320VC5416扩展系统中逻辑电路在DSP系统中的特殊作用可归纳为:其一,通过逻辑电路为DSP的外扩器件分配系统中唯一的地址以及组合控制逻辑;其二,通过逻辑电路为DSP系统的各个器件提供所需的逻辑转换。(2)在DSP系统中,特别是较为复杂的DSP系统中,采用CPLD作为DSP应用系统的逻辑电路核心器件,其因为有三:其一,一个CPLD器件可以同时提供与、或、非等多种逻辑以及组合逻辑,可有效减少系统所需的各种门器件数目,从而提高系统的集成度和可靠性;其二,CPLD器件可在线编程,可根据需要灵活的改变输入输出逻辑关系,方便系统调试与升级;其三,CPLD器件种类多、成本低,可根据实际需要灵活选择。136第4章DSP应用系统设计6.题题目:请说明实现TMS320VC5416处理器串行EEPROM自举的硬件设计要求,以及如何利用CCS环境2次编程实现DSP串行EEPROM自举。参考答案:(1)要实现TMS320VC5416处理器的串行EEPROM自举,DSP系统的硬件设计必须满足一定的要求:A、需要将EEPROM的SPI接口与DSP的McBSP2互联,同时,为避免DSP错误的进入其他自举方式,需将DSP的McBSP2接口的BDX2引脚与其外部中断3引脚相连,从而保证DSP系统加电后,DSP片上Bootloader进入串行EEPROM自举方式,再者,DSP外部中断2输入引脚INT2最好接上拉电阻以防止噪声或干扰的影响,具体的硬件原理图如图D4-2所示:D4-2B、SPI接口EEPROM器件须满足如下几个条件:其一,EEPROM的一帧数据必须为32bit,且每帧格式分别为8bit指令、16bit地址、8bit数据,如图D4-3所示:D4-3其二,EEPROM须支持SPI通信协议的0(0,0)工作模式;其三,由于DSP片上Bootloader只能寻址EEPROM的64KB数据,所以EEPROM的容量不要大于64KB。(2)利用CCS环境2次编程实现DSP串行EEPROM自举的主要步骤如下:第1步,在CCS环境下编写用户DSP系统应用程序,仿真调试完毕后,生成.out程序代码文件,这是CCS环境下的第1次编程;第2步,将CCS环境下生成的.out文件通过程序代码中间过渡转换(如图D4-4点画线框所示)最终生成.dat文件,这一步骤是由多个.exe批处理文件在DOS环境下完成;第3步,再次在CCS环境下编程,将第2步生成的.dat文件中的用户程序代码通过DSP的MCBSP2接口移植到EEPROM中。上述三步过程完成以后,系统可实现在没有仿真器与软件仿真环境的条件下,加电后独立运行。137第4章DSP应用系统设计图D4-4138第4章DSP应用系统设计二、程序分析题1.题题目:请仔细分析本章介绍的液晶HS12864-C15的驱动程序文件lcd.c,并说明TMS320VC5416处理器通过映射在IO空间的并口控制液晶显示的驱动程序该如何编写。参考答案:在DSP扩展系统的设计中,TMS320VC5416处理器是通过映射在IO空间的并口控制液晶进行显示工作的。HS12864-C15型液晶通过其并口一方面接收来自DSP并口的控制参数与显示数据,一方面也可向DSP输出自身状态参数,处于半双工通信工作方式。TMS320VC5416处理器通过映射在IO空间的并口控制液晶显示的驱动程序的编写主要包括如下几个方面:(1)根据实际系统硬件连接情况,定义液晶指令端口与数据端口映射在DSPIO空间的地址,具体程序代码如下#defineinstructor_portport0000//指令IO端口地址ioportunsignedintport0000;#definedata_portport8000//数据IO端口地址ioportunsignedintport8000;(2)根据系统功能的实际需要,确定液晶的并口通信驱动程序,一般情况下驱动程序应包括,液晶初始化程序、读液晶状态信息程序、向液晶写控制指令程序、向液晶写显示数据程序等一些基本操作程序。本章提供的设计实例中,就给出了读液晶状态信息驱动函数,该驱动函数需要按照如下时序操作进行编程:该驱动程序的具体代码如下:unsignedcharLCD_read_instructor(unsignedcharcommand_number){unsignedcharValue;switch(command_number&0x0f){case0x00:{Value=instructor_port;break;}139第4章DSP应用系统设计//指令0,读取忙标志和地址a。case0x01:{Value=data_port;Delay(10);Value=data_port;break;}//指令1,读取显示RAM数据,其中第一次读为DummyRead,第二次读为正确数据。default:break;}return(Value);}而本章给出的液晶忙状态检测驱动函数,该函数利用读液晶状态信息驱动函数读取液晶忙状态信息,因此,液晶忙状态检测驱动函数也属于读液晶状态信息驱动函数一类,其具体代码如下:voidLCD_busy_check(void)//LCD忙状态检测函数{unsignedcharValue;do{Delay(10);Value=LCD_read_instructor(0x00)&0x080;}while(Value);//检测LCD是否空闲}本章也给出了向液晶写控制指令驱动函数,该驱动函数需要按照如下时序操作进行编程:该驱动程序的具体代码如下:voidLCD_write_instructor(unsignedcharcommand_number,unsignedcharcommand_data)//LCD写指令操作函数{LCD_busy_check();//检测LCD是否空闲switch(command_number&0x0f){case0x00:{instructor_port=0x0001;break;}case0x01:{instructor_port=0x0002;break;}case0x02:{instructor_port=command_data&0x0ff;break;}case0x03:{instructor_port=command_data&0x0ff;break;}case0x04:{instructor_port=command_data&0x0ff;break;}case0x05:{instructor_port=command_data&0x0ff;break;}140第4章DSP应用系统设计case0x06:{instructor_port=command_data&0x0ff;break;}case0x07:{instructor_port=command_data&0x0ff;break;}case0x08:{data_port=command_data&0x0ff;break;}default:break;}}本章也给出了液晶初始化操作驱动函数,该函数首先利用液晶状态检测驱动函数判断液晶状态,等到液晶空闲后,再调用向液晶写控制指令驱动函数分别向液晶写入初始化操作控制指令,从而完成液晶的初始化。液晶初始化驱动函数,具体代码如下:voidLCD_initial_operator(void)//LCD初始化操作函数{Delay(60000);//延时40msLCD_busy_check();//检测LCD是否空闲LCD_write_instructor(0x05,0x30);//设置功能设定控制字,设置为基本指令模式Delay(60000);//延时100sLCD_busy_check();//检测LCD是否空闲//设置功能设定控制字,设置为8位并口、基本指令模式LCD_write_instructor(0x05,0x30);Delay(60000);//延时37sLCD_busy_check();//检测LCD是否空闲//设置显示设定控制字,设置整体显示、开游标、显示开模式LCD_write_instructor(0x03,0x0e);Delay(60000);//延时100sLCD_busy_check();//检测LCD是否空闲LCD_write_instructor(0x00,0x00);//设置清除屏幕控制字,清除屏幕Delay(60000);//延时10msLCD_busy_check();//检测LCD是否空闲LCD_write_instructor(0x02,0x06);//设置设定点控制字,设置游标右移模式Delay(60000);//延时100sLCD_busy_check();//检测LCD是否空闲}本章也给出了三个用于向液晶读或写显示数据的读写显示数据操作驱动函数,分别为向液晶写一个汉字(16×16点)操作函数、向液晶读一个汉字(16×16点)操作函数和向液晶写一串字符操作函数。这些读写显示数据操作驱动函数多次调用了前面编写的读液晶状态信息驱动函数、向液晶写控制指令驱动函数等程序,其具体代如下:voidLCD_write_one_char(unsignedchardata,unsignedcharhang_addr,unsignedcharlie_addr)/