打印

基于单片机与DSP的HPI接口通信设计

[复制链接]
3869|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
lelee007| | 2010-3-21 18:43 | 只看该作者
免费的代码么?

使用特权

评论回复
板凳
菲59240|  楼主 | 2010-3-21 19:01 | 只看该作者
有么?只要这个设计的程序,汇编和C语言都可以吧

使用特权

评论回复
地板
菲59240|  楼主 | 2010-3-24 18:33 | 只看该作者
其实就要这个课题的一个程序,希望有做过的好心人能提供这方面资料,谢谢了

使用特权

评论回复
5
tiger84| | 2010-3-24 20:41 | 只看该作者
可以参考下,我也打算用这个来弄HPI接口,不过还没测试,仅仅通过51来存储DSP的代码

// 定义寄存器端口地址
#define   HPICL          XBYTE[0xe000]
#define   HPICH          XBYTE[0xe100]
#define   WR_HPIL0_D     XBYTE[0xe200]
#define   WR_HPIH0_D     XBYTE[0xe300]
#define   WR_HPIL_A      XBYTE[0xe400]
#define   WR_HPIH_A      XBYTE[0xe500]
#define   WR_HPIL1_D     XBYTE[0xe600]
#define   WR_HPIH1_D     XBYTE[0xe700]

#define   RD_HPIL0_D     XBYTE[0xeA00]
#define   RD_HPIH0_D     XBYTE[0xeB00]
#define   RD_HPIL1_D     XBYTE[0xeE00]
#define   RD_HPIH1_D     XBYTE[0xeF00]

#define   WR_CR          XBYTE[0x7100]
#define   WR_PARA        XBYTE[0x7000]

#include  "global.h"
#include  <dspcode.h>
sbit  NRST       =P1^2;

void hpi_restart(void)
{
      NRST=0;
      delay_ms(10);
      NRST=1;
      delay_ms(10);
}
   

uint8 hpi_read(uint16 addr)
{
      unsigned char i;
      
      WR_HPIL_A=addr/256;
      WR_HPIH_A=addr%256;
      i=RD_HPIL0_D;
      i=RD_HPIH0_D;
      
      return(i);
}

void hpi_write(uint16 addr,uint16 dat)
{
     WR_HPIL_A=addr/256;
     WR_HPIH_A=addr%256;
     WR_HPIL1_D=dat/256;      
     WR_HPIH1_D=dat%256;        
}

void hpi_code_load(void)
{
     uint8  code   *dspptr,*temp;
     uint8 len;
     char i;
     uint16 addr;
     
     HPICL=0x08;  //clear HPIint,least is first
     HPICH=0x08;

     dspptr=dspcode;    // 这里的dspcode是我通过DSP生成.out文件,然后转化的code代码
     while(1)
     {
       len=*dspptr++;
       if(len==0) break;
       else
       {
         addr=((*dspptr++)*256)+(*dspptr++);
         addr--;
         temp=dspptr;
again:         
         WR_HPIL_A=addr/256;
         WR_HPIH_A=addr%256;
         for(i=0;i<len/2;i++)
         {  
           WR_HPIL0_D=*dspptr++;      
           WR_HPIH0_D=*dspptr++;                     
         }
         dspptr=temp;
         addr++;
         WR_HPIL_A=addr/256;
         WR_HPIH_A=addr%256;
         for(i=0;i<len/2;i++)
         {  
           if(RD_HPIL0_D!=*dspptr++)  goto again;       //不相等,再写
           if(RD_HPIH0_D!=*dspptr++)  goto again;                     
         }
       }
     }
     WR_HPIL_A=0x00;
     WR_HPIH_A=0x7f;
     WR_HPIL1_D=0x00;    //THE START ADDRESS OF RUN
     WR_HPIH1_D=0x80;        
     
}



uint8 hpi_get(void)
{
    WR_HPIL_A=0;
    WR_HPIH_A=0x7d;
   
    return(RD_HPIH0_D);
}

使用特权

评论回复
6
大秦正声| | 2010-3-28 16:17 | 只看该作者
工作原理:单片机是主机,DSP是从机,通过总线来访问DSP中hpi里  的数据.

hpi有8位和6位的.单片机需要3伏的.

使用特权

评论回复
7
菲59240|  楼主 | 2010-5-13 21:00 | 只看该作者
你又设计版本么?

使用特权

评论回复
8
金戈铁马| | 2010-11-3 09:36 | 只看该作者
楼上le通常表示单片机为低电压产品(通常为3.3V)所以可以连在一起。跟容量没关系

使用特权

评论回复
9
zhongxon| | 2010-11-3 10:05 | 只看该作者
这是我以前做过的一块板子,图中是dm642的HPI接口与一片单片机连接在一起,单片机通过HPI接口给DSP装载程序和数据通讯.
QQ:199663740

使用特权

评论回复
10
ningjing1e| | 2012-7-15 20:18 | 只看该作者
谢谢分享

使用特权

评论回复
11
天马兰兰| | 2012-7-16 14:24 | 只看该作者
HPI连线太多了。

使用特权

评论回复
12
阿尔法99| | 2012-7-24 10:47 | 只看该作者
我看有的文档说是DSP的CODE和DATA(初始化数据)分开写入。5楼同学应该是合在 一起写入的吧?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

6

帖子

1

粉丝