首页 > 其他 > 详细

dsp HPI接口

时间:2014-11-28 10:21:34      阅读:333      评论:0      收藏:0      [点我收藏+]

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 0 HPIC

0 1 HPIA

1 0 HPID地址自动增加模式

1 1 HPID固定地址模式

关于最后两个模式,我目前只把它当成两个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接口

原文:http://blog.csdn.net/hunterlew/article/details/41556715

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!