3.2.1 MC8051参数配置
MC8051提供了参数化设计,通过修改VHDL中的参数值可以很轻易的修改内部模型,例如UART个数,Timer个数,选择乘法器等。在本应用系统中不需要涉及乘除法运算,因此在配置文件mc8051_p.vhd中将常数C_IMPL_MUL, C_IMPL_DIV以及C_IMPL_DA的设置为0。
3.2.2时钟和RAM设计
MC8051 IP核在Actel的APA600上综合得到的最高时钟频率为15MHZ左右,为了使用于调试的串口波特率误差最小,用Actel Libero内的SmartGen产生11.0592MHz的时钟作为系统时钟。
MC8051所需要的内部RAM和RAM都应该调用器件的底层单元来实现。以128字节的内部RAM为例。用SmartGen产生一个128*8大小的双口RAM ram128_8.vhd,然后在mc8051_ram.vhd中例化。
3.2.3 ROM设计
MC8051完全兼容标准8051芯片,可采用KEIL uVision开发环境,建立工程文件时候Select Device选择 Oregano Systems的8051 IP Core, 然后编译写好的51程序,产生HEX文件。需要从HEX文件中得到程序数据,这里简单介绍一下HEX文件格式。HEX文件是由任意数量的十六进制记录组成的,每个记录包含5个域,他们以下面的格式排列[6]:
:llaaaatt[dd…]cc
HEX文件都是由冒号开头的,ll是数据长度域,表示记录中数据字节的个数;aaaa为地址域,标识记录中数据字节的开始地址;tt是记录类型域,51程序产生的hex文件只有两种记录类型,包括数据记录(00)和文件结束记录(01);dd是数据域,表示一个字节的数据
选用的Actel APA系列FPGA没有底层的ROM单元,因此用VHDL设计实现ROM。通过了解了HEX文件的格式,编写了从HEX文件读取数据和地址信息,然后生成mc8051_rom.vhd文件,其中程序数据以常数的形式存在数组文件中。
3.2.4 MC8051与TSB32LV32之间的接口
链路层芯片微处理器接口包括16位宽的数据总线以及7位宽的地址总线。可以通过设置链路层芯片的COLDFIRE,M8BIT_SIZ0,MCMODE_SIZE这三个端口的状态,可以得到微处理器接口的各种不同操作模式,本设计中设置成16位MCS-MCA握手模式。
在系统顶层文件中对MC8051_top进行例化,连接MC8051与1394链路层芯片TSB12LV32。
MC8051的4组I/O口都是将输入和输出分开的,所以每组都可以配置成输入和输出。我们通过MCS和MWR来控制DM 和P1、P2口的连接。
3.3 基于MC8051的1394总线控制实现
MC8051通过TSB12LV32的微控制器接口实现对链路层和物理层内部寄存器的读取和设置,其中对链路层芯片的寄存器读写直接通过微控制器接口操作,而对物理层芯片寄存器读写是通过对链路层24H的Phy Access Register读写实现。
1394芯片部分内部寄存器需要在系统上电的时候初始化或者在运行时候进行设置,一些则需要在运行时被监视以决定系统状态,而链路层内部的异步发送FIFO和通用接收FIFO也是通过读写寄存器来访问的。因此正确读写寄存器是1394接口实现中非常重要的一步。
通过正确设置控制寄存器,DM口控制器寄存器等内部寄存器便可以实现1394总线的各种传输模式的收发。
对1394芯片的控制另外一个主要部分是对中断的响应和处理。将TSB12LV32芯片的INT管脚与MC8051的int0相连,通过int0的下跳沿检测中断发生。TSB12LV32芯片中有两个寄存器是和中断相关的。设置10H的中断屏蔽寄存器中相应的某一位为1,则的0CH中断寄存器响应位便跳变为高电平,同时产生相应的中断。当有中断发生的时候,INT管脚变低电平,而清除中断则需要往中断寄存器相应位写入1。因此我们在中断发生时候,可以通过读取中断寄存器的值查看发生了哪种中断,然后做出正确的响应。
主要程序的流程图如下:
4 结论
我们根据本文介绍的方案,设计和研制了基于mc8051的1394总线接口。经过测试,1394总线系统工作正常。该总线接口具有集成度高,体积小,传输速率高等特点,同时可以根据实际任务需要很方便的扩充接口功能。本文介绍的方案对与1394总线接口的研究开发具有借鉴意义。
本文作者创新点:将MC8051软核应用与星载智能1394终端设计。