"); //-->
唐超伦 —— TI 通用数字信号处理系统技术支持
摘要
本文从总体上介绍HPI(Host Peripheral Interface)接口的工作模式,与上位主机的连接方式,主机访问的操作流程;归纳了应用当中常见问题,并提供了分析解决办法。
简介
HPI 接口是TI 为处理器之间直接互连通讯定义的一种异步接口,大多数TI DSP 芯片上都有HPI 接口。HPI 接口是从(Slave)端口,接在主机的扩展内存总线上,DSP 不能通过HPI 向主机(Host)的访问,只能被主机读写。两个DSP 的HPI 接口之间不能通讯。两个DSP 之间互连,可以将一个DSP(从)的HPI 接到另一个DSP(主)的扩展内存接口(EMIF)上[1]。
1. HPI 工作模式
不同系列DSP 上的HPI 接口版本有所不同,区别体现在DSP 对HPI 的控制上,如C6727 上的UHPI 可通过寄存器使能与关闭HPI 接口,对主机访问DSP 内存空间的控制,以及对HPI 接口信号的功能复用上。但从主机访问的角度,HPI 的工作模式分为:复用模式(Multiplexed-Mode)和非复用模式(Non-multiplexed-Mode)。
复用模式下没有地址线,主机访问DSP 的地址信息是以数据方式送到HPIA(HPI 地址寄存)。从硬件信号的角度,地址,数据信号是由同一组数据线传递,所以称为复用模式。
非复用模式的数据线与地址线是分开的,与内存接口连接相似。非复用模式不需要操作HPIA 寄存器,主机访问的地址信息通过地址总线直接送给HPI。
所有的HPI 接口都支持复用模式,但不是所有芯片的HPI 接口都支持非复用模式(参考相应的芯片手册确定是否支持)。除了有无HPIA 的操作区别外,两种模式的操作没有区别。因为非复用模式的操作是复用模式操作的子集,为方便起见,本文以复用模式展开讨论。
2. HPI 硬件信号连接
HPI 接口复用模式连线如图1 所示,根据在应用当中的必要性分为:必要的,和可选的两组信号。可选的信号
以虚线表示。
数据线HD[0:n]:在复用模式下,数据线的宽度一般为CPU 位宽的一半,一个HPI 访问分为高低半字的两次访问,如C5000 是16-bit CPU,HPI 数据线为8 位,C6000 是32-bit CPU,其HPI 数据线为16 位。C64x 系列的HPI 支持32 位,在32 位模式下一个HPI 访问不需要分为高低半字两次访问组成一个完整的访问。
HCNTL0/1,HWIL:HCNTL0/1 选择要访问的HPI 寄存器,HWIL 控制访问寄存器的高低半字,必须先高后低。一个寄存器的高低半字的两次访问一定要连续完成,中间不能插入其它的HPI 操作。只有HPIC 可以只访问半个字。
HR/W:指示对HPI 寄存器进行读,还是写操作。如果主机的读,写信号是分开的,可以利用其中一个信号,但要注意做上拉或下拉处理以控制其在三态时的电平。
HCS,HDS1/2:这三个信号根据图2 的逻辑产生内部HSTROBE 信号,其逻辑关系是要求HDS1 和HDS2信号相反,HCS 低有效。HSTROB 下降沿的时间点反应的是三个信号中最后跳变的信号。HPI 在HSTROB的下降沿采样控制信号HR/W,HCNTL0/1,HWIL 以判断主机要对哪个寄存器进行读,或者写操作命令。
注意控制信号在HSTROBE 的下降沿之前需要最少5ns 的setup 稳定时间,而HDS1/2 和HCS 到HSTROBE信号内部门电路的延时是皮秒级的,所以控制信号的setup 时间需要外部时序保证。
图 2 HSTROBE 信号产生逻辑
HRDY:HPI 的输出信号,指示当前操作状态,用做硬件流量控制握手信号。
HINT:通过HPI,主机与DSP 之间可以互发中断。HINT 是HPI 送给主机的中断信号,DSP 对HPIC[HINT]位写1,HINT 信号线上送出高电平信号,主机可利用此信号做为中断信号输入。DSP 不能清除HPIC[HINT]状态,主机在响应中断后,需要对HPIC[HINT]位写1 清除状态,DSP 才能再次对HPIC[HINT]置位发中断。主机通过写HPIC[DSPINT]置1 给DSP 产生中断,DSP 在响应中断后,需要对HPIC[DSPINT]写1 清除状态,主机才能继续操作HPIC[DSPINT]给DSP 发中断。通过HPI 传输数据,结合互发中断做为软件层的握手信号,可有效提高通讯的效率与灵活性。
ALE:存在于地址,数据线复用的主机上用来指示地址信号周期,这种总线复用的主机很少见,所以通常将ALE 固定上拉处理,只用HSTROBE 采样控制信号。
BE:Byte Enable 信号,这个信号只出现在32 位的C6000 DSP 上。因为应用当中通常都是对整个32-bit 字进行访问,所以直接做上拉使能处理。
3. HPI 寄存器地址映射
HPI 口提供给主机端访问的寄存器只有4个,通过HCNTL[1:0]选择.
表 1 HPI 寄存器访问选择
由于在复用模式下数据线通常只有寄存器宽度的一半,所以一个完整的数据访问由高低半字两次访问组成,由HWIL 信号控制,HWIL 信号必须是先低后高。通常将HWIL 和HCNTL[1:0]接在主机的地址线上,将4 个寄存器映射为主机端的8 个内存单元,下表中的地址线连接方法将8 半字寄存器映射到主机的8 个连续的内存单元。这里的地址线是用来选择HPI 的寄存器,与非复用模式下的地址线直接访问DSP 的内存空间是完全不同的作用。
表 2 HPI 寄存器地址映射
4. HPI 寄存器功能说明
HPIC (HPI Control Register)
HPI 控制寄存器HPIC 的位图如表3 所示,C6000 系列DSP 的HPI 寄存器是32 位的,也只有低16 位有效,与C5000 系列DSP 的HPIC 寄存器定义的功能保持一致。不同版本的HPI 接口的HPIC 位定义的主要不同之处在于软件握手HRDY 位的有无,其它位名称可能存在细小差异,但功能定义都是一样的。
表 3 HPI Control Register
主机在对HPI 进行访问前可以通过HPIC 配置字节序(HWOB)和地址寄存器模式(DUALHPIA)。默认的配置为HWOB=0,即先访问高半;DUALHPIA=0,即单地址寄存器模式,读和写操作使用同一个HPIA;通常都采用默认的HPIC 寄存器配置。
HWOB 与硬件信号HWIL 是没有联系的,HWIL 信号必须保证先低后高分别访问两个半字单元。至于先访问一个字当中的高或低半字,是由HWOB 控制的。
HPIA (HPI Address Register)
物理上存在HPIAR,HPIAW 两个地址寄存器。HPIAR 是读操作地址寄存器;HPIAW 是写操作地址寄存器。由HPIC 的DUALHPIA 位来决定是采用双地址寄存器模式还是单地址寄存器模式。如果采用双地址寄存器模式,在对HPIA 操作之前,通过设置HPIC 的HPISEL 位选择下一个要访问的HPIA。通常为了简化在读写操作转换时对HPIC 的操作,选用单地址寄存器模式。
HPIA 的地址信息在不同系列DSP 上有所不同:
在C5000 上,数据空间,I/O 空间只能按16 位字寻址,程序空间按字节寻址。HPI 的DMA 访问属于I/O 空间,HPIA 的值代表16 位字地址。如主机端要访问DSP 内存字节地址0x100, 则要往HPIA 写的地址值是0x80。在用HPI 启动时,要注意DSP 代码是按字节地址链接的,即代码段的地址是字节地址,主机端要将代码段的地址信息除以2 再送到HPIA。
在C64 上,HPIA 的值代表字节地址,但是HPI 访问的数据是32 位的,所以HPI 会忽略HPIA 地址值的低两位。
在C64+的DSP 上,HPIA 代表32 位字地址,HPI 会将字地址左移两位转换成字节地址,主机若要访问DSP 字节地址0x100,则要赋值HPIA 为0x40。
HPID (HPI Data Register)
主机通过HPI 对DSP 的内存访问是间接访问,主机只能访问HPID,HPID 与DSP 内存之间是通过HPI 专属的DMA 进行数据搬运的。如图3 所示。
HPID 的访问分为自增模式和非自增模式。在自增模式下,访问HPID 后,HPIA 会自动增加指向下一个字地址,在连续访问时,自增模式因为减少了主机对HPIA 的操作,可以增加HPI 数据访问的吞吐率。非自增模式下访问HPID 后,HPIA 的值保持不变,主机需要更新HPIA 来访问下一个地址。
在写操作时,主机把数据写到HPID,HPI 将第二个半字的数据通过HSTROBE 的上升沿锁存到HPID 后,将HRDY 置为忙状态,并启动HPI DMA 将HPID 的内容搬到HPIA 所指向的内存单元,然后清除HRDY 指示可以进行下一次操作。
在读操作时,在第一个HSTROBE 的下降沿,HPI 采样到HR/W为读命令,则将HRDY 置为忙状态,启动HPIDMA 将HPIA 指向的内存单元的数据搬到HPID,清除HRDY 忙状态,主机端方可结束总线访问周期,锁存数据线上的有效数据。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。