现代电子系统设计习题解答4.docx
- 文档编号:3737889
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:66
- 大小:468.85KB
现代电子系统设计习题解答4.docx
《现代电子系统设计习题解答4.docx》由会员分享,可在线阅读,更多相关《现代电子系统设计习题解答4.docx(66页珍藏版)》请在冰豆网上搜索。
现代电子系统设计习题解答4
第四章习题——参考答案
一、简述题
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.系统开发的难易程度。
2.题
题目:
DSP应用系统的典型开发过程是怎样的?
参考答案:
DSP应用系统的一般开发过程如图D4-1所示:
图D4-1
3.题
题目:
讨论一个能独立运行和调试的TMS320VC5416最小系统应具备怎样的硬件条件。
参考答案:
一个能可调试的TMS320VC5416最小系统应具备如下的基本硬件条件:
能为DSP提供I/O与内核正常供电的供电电路,能为DSP提供稳定与精确时钟的时钟电路,以及进行DSP在线调试需要的JTAG仿真调试接口电路与复位电路,如TMS320VC5416最小系统还要实现独立运行功能,则还需要为DSP扩展必要的存储器(如EEPROM/FlashROM等)电路。
当然,要保证TMS320VC5416最小系统能顺利的正常运行,一些外加的辅助电路也是必不可少的,例如模式选择电路、外部中断输入引脚与未用输入引脚的上拉保护电路等。
4.题
题目:
请仔细分析本章介绍的TMS320VC5416最小系统与扩展系统各电路模块硬件设计原理图,说明TMS320VC5416最小系统与扩展系统各个电路模块是如何设计的。
参考答案:
略。
(TMS320VC5416最小系统与扩展系统各个电路模块的功能与具体硬件设计本章4.3节与4.4节有较为详细,读者可以参阅。
)
5.题
题目:
请说明TMS320VC5416扩展系统中逻辑电路在DSP系统中的特殊作用,以及利用CPLD器件设计逻辑电路的好处。
参考答案:
(1)TMS320VC5416扩展系统中逻辑电路在DSP系统中的特殊作用可归纳为:
其一,通过逻辑电路为DSP的外扩器件分配系统中唯一的地址以及组合控制逻辑;其二,通过逻辑电路为DSP系统的各个器件提供所需的逻辑转换。
(2)在DSP系统中,特别是较为复杂的DSP系统中,采用CPLD作为DSP应用系统的逻辑电路核心器件,其因为有三:
其一,一个CPLD器件可以同时提供与、或、非等多种逻辑以及组合逻辑,可有效减少系统所需的各种门器件数目,从而提高系统的集成度和可靠性;其二,CPLD器件可在线编程,可根据需要灵活的改变输入输出逻辑关系,方便系统调试与升级;其三,CPLD器件种类多、成本低,可根据实际需要灵活选择。
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输入引脚
最好接上拉电阻以防止噪声或干扰的影响,具体的硬件原理图如图D4-2所示:
D4-2
B、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中。
上述三步过程完成以后,系统可实现在没有仿真器与软件仿真环境的条件下,加电后独立运行。
图D4-4
二、程序分析题
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;}
//指令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;}
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);//延时>40ms
LCD_busy_check();//检测LCD是否空闲
LCD_write_instructor(0x05,0x30);//设置功能设定控制字,设置为基本指令模式
Delay(60000);//延时>100
s
LCD_busy_check();//检测LCD是否空闲
//设置功能设定控制字,设置为8位并口、基本指令模式
LCD_write_instructor(0x05,0x30);
Delay(60000);//延时>37
s
LCD_busy_check();//检测LCD是否空闲
//设置显示设定控制字,设置整体显示、开游标、显示开模式
LCD_write_instructor(0x03,0x0e);
Delay(60000);//延时>100
s
LCD_busy_check();//检测LCD是否空闲
LCD_write_instructor(0x00,0x00);//设置清除屏幕控制字,清除屏幕
Delay(60000);//延时>10ms
LCD_busy_check();//检测LCD是否空闲
LCD_write_instructor(0x02,0x06);//设置设定点控制字,设置游标右移模式
Delay(60000);//延时>100
s
LCD_busy_check();//检测LCD是否空闲
}
本章也给出了三个用于向液晶读或写显示数据的读写显示数据操作驱动函数,分别为向液晶写一个汉字(16×16点)操作函数、向液晶读一个汉字(16×16点)操作函数和向液晶写一串字符操作函数。
这些读写显示数据操作驱动函数多次调用了前面编写的读液晶状态信息驱动函数、向液晶写控制指令驱动函数等程序,其具体代如下:
voidLCD_write_one_char(unsignedchardata,unsignedcharhang_addr,
unsignedcharlie_addr)//LCD写一个字符(16×16点)操作函数
{
unsignedcharaddr;
switch(hang_addr)
{
case0:
{addr=0x80+lie_addr;break;}
case1:
{addr=0x90+lie_addr;break;}
case2:
{addr=0x88+lie_addr;break;}
case3:
{addr=0x98+lie_addr;break;}
default:
break;
}
LCD_write_instructor(0x07,addr);
Delay(20);
LCD_write_instructor(0x08,(((data&0xff00)>>8)&0x0ff));
LCD_write_instructor(0x08,(data&0x0ff));
}
unsignedcharLCD_read_one_char(unsignedcharhang_addr,unsignedcharlie_addr)//LCD读一个字符(16×16点)操作函数
{
unsignedcharaddr,value,tempt1,tempt2;
switch(hang_addr)
{
case0:
{addr=0x80+lie_addr;break;}
case1:
{addr=0x90+lie_addr;break;}
case2:
{addr=0x88+lie_addr;break;}
case3:
{addr=0x98+lie_addr;break;}
default:
break;
}
LCD_write_instructor(0x07,addr);
Delay(20);
tempt1=LCD_read_instructor(0x01)&0x0ff;
tempt2=LCD_read_instructor(0x01)&0x0ff;
value=((tempt1<<8)&0x0ff00)|(tempt2&0x0ff);
return(value);
}
voidLCD_write_chars(char*data,unsignedcharhang_addr,unsignedcharlie_addr)//LCD写一串字符操作函数
{
unsignedcharaddr,tempt;
switch(hang_addr)
{
case0:
{addr=0x80+lie_addr;break;}
case1:
{addr=0x90+lie_addr;break;}
case2:
{addr=0x88+lie_addr;break;}
case3:
{addr=0x98+lie_addr;break;}
default:
break;
}
LCD_write_instructor(0x07,addr);
Delay(20);
while(*data>0)
{
tempt=*data;
LCD_write_instructor(0x08,(tempt&0x0ff));
data++;
}
}
2.题
题目:
请仔细分析本章介绍的FLASH器件Am29LV160D的驱动程序flash.c,并说明TMS320VC5416处理器通过并口访问FLASH器件的驱动程序该如何编写。
参考答案:
在DSP扩展系统的设计中,TMS320VC5416处理器是通过并口访问FLASH器件。
FLASH器件通过其并口一方面接收来自DSP并口的指令与地址数据,一方面也向DSP输出自身状态参数以及存数的数据,处于半双工通信工作方式。
TMS320VC5416处理器通过并口访问FLASH器件的驱动程序的编写主要包括如下几个方面:
(1)根据实际系统硬件连接情况,定义FLASH器件的首地址在DSP数据存储空间的映射地址,本章介绍的DSP系统的具体程序代码如下
unsignedint*FlashStartAddr=(unsignedint*)0x8000;
该语句定义了FLASH器件的首地址在DSP数据存储空间的映射地址为0x8000。
FLASH器件首地址在DSP数据存储空间的映射地址,不是随便定义的,而是由几个因素决定的,这些因素是:
①DSP处理器寄存器标志位DROM=0。
这意味着DSP数据存储空间0x8000~0xffff地址范围全部分配给了DSP片外存储器,因此外扩的FLASH,如果要做数据存储器使用,其地址范围必须在0x8000~0xffff内。
②在FLASH电路的设计中,Am29LV160D工作于16bit模式,且其存储容量为1MB,而DSP数据存储空间可供外扩存储器使用的存储空间仅仅只有32KB,明显小于FLASH存储容量,因此FLASH只能有部分存储单元能映射到DSP数据存储空间。
③CPLD逻辑电路提供的FLASH器件地址控制逻辑,一方面利用DSP的
引脚和
引脚将FLASH器件映射到DSP数据存储空间上,另一方面将FLASH器件的高位地址总线A16~A19均直接设置为低电平,即直接将FLASH器件的32K~64K地址范围内的32KB映射到DSP数据存储空间。
上述3个因素就直接确定了FLASH器件在DSP数据存储空间中的映射地址。
(2)根据系统功能的实际需要,确定FLASH器件的并口通信驱动程序,一般情况下驱动程序应包括,读FLASH状态信息程序、向FLASH写控制指令程序、向FLASH写存储数据程序等一些基本操作程序。
本章提供的设计实例中,读FLASH状态信息程序,包括:
FLASH信息检测操作功能函数、FLASH写操作状态检测功能函数、FLASH芯片完全擦除操作状态检测功能函数。
上述三个函数的功能虽是读取FLASH器件状态信息,但是在具体编程时,要按如下表所示规定的指令与顺序先向FLASH器件写FLASH指定的操作指令流。
而各驱动程序的具体代码如下:
//FLASH信息检测操作功能函数
intCheck_Flash_Inforation(unsignedint*FlashStartAddr)
{
//确定Am29LV160D是否正常
unsignedintTemp1,Temp2;
*(FlashStartAddr+0x555)=0x0aa;
Delay(10);
*(FlashStartAddr+0x2AA)=0x55;
Delay(10);
*(FlashStartAddr+0x555)=0x90;
Delay(10);
Temp1=*(FlashStartAddr+0x00);//读器件厂家ID:
AMD
Temp2=*(FlashStartAddr+0x01);//读器件ID:
Am29LV160D
Delay(10);
if(Temp1==0x04&&Temp2==0x2249)
{
return
(1);
}
else
{
return(0);
}
}
//FLASH写操作状态检测功能函数
intCheck_Flash_Write_Status(unsignedintdata,unsignedint*DstAddr)
{
intreturn_value;
unsignedintLoop=1;
unsignedintTemp,PreDQ7,CurrDQ7,CurrDQ5;
PreDQ7=data&0x0080;
while(Loop)
{
Temp=*DstAddr;
CurrDQ7=Temp&0x0080;
CurrDQ5=Temp&0x0020;
if(PreDQ7==CurrDQ7)
{
Loop=0;
return_value=1;
}
elseif(CurrDQ5==0x020)
{
Temp=*DstAddr;
CurrDQ7=Temp&0x0080;
if(PreDQ7==CurrDQ7)
{
Loop=0;
return_value=1;
}
else
{
Loop=0;
return_value=0;
}
}
}
return(return_value);
}
//FLASH芯片完全擦除操作状态检测功能函数
intCheck_Flash_Erase_Status(unsignedint*FlashStartAddr)
{
intreturn_value;
unsignedintLoop=1;
unsignedintPreDQ6DQ2,CurrDQ6DQ2,CurrDQ5;
PreDQ6DQ2=(*FlashStartAddr)&&0x44;
CurrDQ6DQ2=(*FlashStartAddr)&&0x44;
while(Loop)
{
if(PreDQ6DQ2==CurrDQ6DQ2)
{
Loop=0;
return_value=1;
}
elseif(CurrDQ5==0x020)
{
PreDQ6DQ2=(*FlashStartAddr)&&0x44;
CurrDQ6DQ2=(*FlashStartAddr)&&0x44;
if(PreDQ6DQ2==CurrDQ6DQ2)
{
Loop=0;
return_value=1;
}
else
{
Loop=0;
return_value=0;
}
}
}
return(return_value);
}
本章给出的实例中,给出了向FLASH写控制指令程序,即FLASH复位操作函数与FLASH芯片完全擦除操作函数,其具体代码如下:
voidFlash_reset(unsignedint*FlashStartAddr)//FLASH复位操作函数
{
*(FlashStartAddr)=0x0f0;
Delay(100);
}
//FLASH
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 现代 电子 系统 设计 习题 解答