首页 > 代码库 > dsp HPI接口

dsp HPI接口

HPI称为主机接口,是dsp与主机CPU相连接的一个并行通信口,外部的主机CPU可以通过这个接口直接访问DSP的储存器空间。还记得bootloader有个引导模式是HPI接口引导,就是事先把程序写在外主机的flash中,上电后通过HPI接口将flash中的程序写入dsp的内存去运行,若该程序是bootloader引导程序,那么可以实现二次引导。

相比之前介绍的EMIF、EDMA,HPI接口简单的多。相关的只有三个寄存器,HPID存放读写的数据,HPIA存放访问的地址,HPIC控制寄存器。重点在于如何访问这三个寄存器,注意到DSP和主机CPU连接的三条地址线是HCNTL[1:0]和HHWIL。其中HCNTL[1:0]可以构造4个地址,分别是:

HCNTL1 HCNTL0功能

0 0HPIC

0 1HPIA

1 0HPID地址自动增加模式

1 1HPID固定地址模式

关于最后两个模式,我目前只把它当成两个HPID寄存器...

因此与主机的地址线相连,主机便可以知道寄存器的地址了,一般用宏先定义比较方便。四个地址分别命名为HPIC_addr、HPIA_addr、HPID_addr、HPID_AUTO_addr。

具体到每个引脚的时序也不去细究了,只需要知道访问寄存器的顺序是:

1、初始化HPIC;

2、初始化HPIA;

3、对HPID进行读写操作。


读写程序(以自动地址增加模式为例):

void HPI_write(Uint32 addr, Uint32 *buf, Uint32 len)

{

Uint32 i;

HPIC_addr = 0x00000000;//唯一不懂的是这里,到底有什么用,其它地方也很少用的感觉

HPIA_addr = addr;

for(i = 0;i<len;i++)

HPID_AUTO_addr = buf[i];//因为是自动增地址,不用++

}


void HPI_read(Uint32 addr, Uint32 *buf, Uint32 len)

{

Uint32 i;

HPIC_addr = 0x00000000;//又来

HPIA_addr = addr;

for(i = 0;i<len;i++)

buf[i] = HPID_AUTO_addr;

}


注意以上程序包括读写的main函数是放在主机CPU中的例如单片机、ARM或其它dsp。

dsp HPI接口