实验七 HPI接口操作
1.实验目的
在C54X系列中,只有542,545,548和549提供了标准8位HPI接口,而C54XX系列都提供了8位或16位的增强HPI接口。外部主机或主处理器可以通过HPI接口读写C54X 的片内RAM,从而大大提高数据交换的能力。标准HPI接口中外部主机只能访问固定位置的2K大小的片内RAM,而增强HPI接口可以访问整个内部RAM。本实验利用DES提供的HPI 接口,学习HPI接口的设计和使用。本实验的C语言源程序文件名为5402pp.c。brainyquote
2.实验要求
本实验在TURBO C 2.0的环境下完成。在实验过程中,学生将利用C语言在PC机(主机)上装入并运行一段C54X的汇编代码,来学习HPI的各个寄存器的使用。为了充分理解和掌握HPI各个寄存器的使用,学生应该能熟练运用TURBO C,以便灵活设置、修改、查看各个HPI寄存器以及HPI接口的状态。
3.实验原理
(1)HPI的接口设计
book
主机利用HPI访问C54X的片内RAM,实际上是通过读写HPI的数据和地址寄存器来实现的。由于C542的HPI为8位,所以一个内存单元必须通过两次HPI读写来完成。标准HPI有两种工作模式:RAM共享和主机访问模式。在RAM共享模式中,主机和C54X 都可以访问HPI的共享内存。对C542而言,HPI的共享内存大小为2K字,地址从0x1000到0x17ff。使用该模式,HPI支持的最高传输速度为CLKOUT/5每字节。如果是主机访问模式,那么只有主机才能访问C54X的片内RAM。例如在RESET=0或IDLE2状态下,主机仍然能访问片内RAM,利用这一点可以实现C54X的HPI BOOTLOADER。图7-1是DES中C542的HPI与PC的接口示意图。
增强型HPI(如VC5402,VC5409,VC5410等)都是共享模式,而且只能在DSP时钟信号有效时才能访问片内RAM。所以VC5402在使用HPI BOOTLOADER时是将程序进入点的地址写入0x7f单元,DSP的BOOTLOADER会根据这个地址自动执行你通过HPI 接口装入的代码。
141
10K上拉至VCC
PC机并口
在图7-1中,HPI
连。HCNTL0/1和HBIL
为读写控制信号线,HRDY为
详细讨论:caravaggio
HCNTL0/1
A1,A2位决定。00
以访问数据寄存器,只是01
地址寄存器将不会改变。当
HBIL
前传输的是一个C54X
传输第二个字节。而这两个8
由HPIC中的BOB位确定。
在HPI
或数据使能信号。在DES的HPI接口设计中,将它们简化,仅使用HCS和HDS2,其它接为高电平。DES中主机(PC机)通过并口来访问HPI。所以HPI的选通信号由PC的并口地址译码信号产生。
142
143HR/W
2013年重庆高考数学
为
paradoxically
HPI 的读写控制信号,高电平为读操作,低电平为写操作。HRDY 为HPI 的输出信号,高电平表示HPI 准备就绪,该信号DES 中没有使用。HINT 也是一个输出信号,由HPIC 中的HINT 比特位确定,HPI 可以利用该引脚中断主机。另外,引脚HPIENA 为高电平表示允许HPI 接口工作,若要使用HPI ,该引脚必须接高电平。
(2) HPI 的控制寄存器
HPI 有三个寄存器:地址寄存器HPIA ,控制寄存器HPIC 以及数据寄存器HPID 。参见表7-1。图7-2和图7-3给出了主机和C54X 访问HPIC 的情况。注意,主机读写HPIC 时高8位和低8位是一样的,写的时候应保持一致。下面将详细介绍各个BIT 位的含义: 表7-1
寄存器 C54X 地址 说 明
HPIA - HPI 地址寄存器,只能由主机读写。该寄存器对应主机访问的
C54X 的片内RAM 地址。
HPIC 002Ch HPI 控制寄存器。C54X 和主机都可以读写。详细说明后面介绍。 HPID - HPI 数据寄存器。只能由主机读写。主机读写该寄存器将修改
C54X 的片内HPI 共享RAM 。
图7-2 PC 主机读HPI 控制寄存器HPIC
图7-3 PC 主机写HPI 控制寄存器HPIC
图7-4 C54X 读取HPIC
newly
图7-5 C54X写HPIC
BOB位:该比特位只能由主机读写,C54X无法访问。如果BOB=1,表示HPI的16位传输中的第一个8位字节是低8位;BOB=0,表示第一个8位字节为高8位。该比特位必须在读写数据和地址寄存器之前设置。
SMOD位:该比特位主机只能读,而C54X可以读写。如果SMOD=1,表示起用共享RAM模式,主机和C54X都可以访问HPI共享RAM;如果SMOD=0,表示HPI工作在主机访问模式,C54X将无法访问2K的HPI共享RAM。C54X复位时,SMOD设置为0;复位操作执行完成后,SMOD=1。VC5402中,该比特无效。
DSPINT位:该比特位只能由主机写,并且C54X和主机都无法读取。当主机将1写到该比特位时,将产生一个中断到C54X。如果IMR寄存器中的HPINT位(D9)被设置为1,DSP将响应该中断,执行相应的中断服务程序。
HINT位:该比特位主机和C54X都可以读写。该比特决定了C54X引脚HINT的状态。C54X可以利用该信号发送中断到主机。当C54X在复位状态时,HINT比特位为0,对应的HINT脚为高电平。当C54X将该比特位设置为1时,HINT脚将变为低电平。注意,当主机和C54X读取该比特位时,它将反映HINT引脚的状态,0表示高电平,1表示低电平。另外,该比特位只能由C54X设置,由主机清除。主机将1写到该比特位,将清除HINT 位,即HINT位为0。
在C54X中,如C542,HPI共享RAM总共有2K字,地址在片内数据空间的1000h 到17FFh。如果在PMST中设置OVLY比特位为1,那么也可以是程序空间的1000h到17FFh。主机通过HPIA寄存器作为地址锁存器来读写对应的C54X片内RAM。在HPIA 中只有低11位有效,所以如果HPIA的值为0h,0800h,1000h,1800h,…,f800h,实际上都对应的HPI共享RAM的第一个字1000h,因为这时HPIA的低11位完全一致,都为0。而C54XX,如VC5402使用增强型HPI接口,这时HPIA有16位,主机可以访问直接访问所有片内存储器!
当主机通过HPI接口的数据寄存器HPID读写C54X的片内RAM时,可以选择地址自动增加模式。注意,读和写对应不同的增加方式。如果主机是读操作,那么HPIA在读
144
完后自动加1;如果是写操作,那么HPIA将在写之前自动加1。例如,如果HPIA的值为0FFFFh,这时主机对HPI的数据寄存器HPID进行写入操作,那么修改的将是HPI RAM 的1000h。这是因为HPIA在写之前加1后变为0,所以对应的HPI RAM为1000h。(2)通过HPI接口访问片内RAM
主机通过HPI接口访问C54X片内RAM的一般步骤如下:
a). 首先初始化HPIC寄存器,特别是BOB位。具体方法为:先设置HCNTL1和HCNTL0为0,选择将要
对HPIC进行操作。然后将HPIC的值写入HPI。注意HPIC的高8位和低8位是一样的。本实验初始化HPIC=0,即将BOB设置为0,那么在以后读写HPIA和HPID 时一定是高8位在前,低8位在后。参见下列C语言程序:
t=HPIC_Read(); /* read back of HPIC */
HPIC_Write(0x0808); /* hpic, bob=0, clear hpint! first is high 8 bit */
rf是什么意思void HPIC_Write(unsigned int w)
{ unsigned char t1,t2;
excitedlyt1 = (0xff00 & w) >>8 ;
t2 = (0x00ff & w);
Addr_Byte_Write(0x40,t1);
onmondayAddr_Byte_Write(0x41,t2); /* hpic, write */
}
int HPIC_Read(void)
{ unsigned t1=0,t2=0;
t1=Addr_Byte_Read(0x0);
t2=Addr_Byte_Read(0x1); /* readback of HPIC */
我的t恤衫return( (t1<<8) | t2);
}
145