打印

c6701的emif接口应该如何使用?

[复制链接]
4466|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zxifn|  楼主 | 2013-5-2 16:47 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
背景介绍:DSP新手一枚,在用c6701做EMIFHPI接口的信息传输,看了TI的关于两个接口的文档和一些DSP开发的书籍,emifdsp的基本的原理已经清楚。硬件结构如图所示,反相器什么的是用一个fpga直接assign过去的,我的目标是主dsp能够成功的写从dsp
                              
我的问题如下:
1.      我始终不明白的是要在DSP里面写一些什么样的语句,才能够从fpga观察到信号的变换。我学过c++,但是ccs里面的cvisual studio里面的c有什么区别呢?硬件和软件是怎么建立的联系呢?
2.      我要使用emif接口的话要初始化主dsp的吧。但是我在一本书上找到了如下的代码。
#include <stdio.h>   
#include <stdlib.h>   
#include "code.h"
#include "initia.h"
#define C6701_HPI1 0x03000000
#define C6701_HPI2 0x03000008
#define C6701_HPI3 0x03000010
   
#define DEGUG 0
int *ptr_hpi1=(int*) C6701_HPI1;
int *ptr_hpi2=(int*) C6701_HPI2;
int *ptr_hpi3=(int*) C6701_HPI3;
void C6x_write_word(int *ptr_hpi,int *source_word,intdest_address);   
{ptr_hpi[0]=0x0001;   
ptr_hpi[1]=0x0001;   
ptr_hpi[2]=(int)(dest_address& 0x0ffff);   
ptr_hpi[3]=(int)((dest_address>>16)& 0x0ffff);   
ptr_hpi[6]=(int)(source_word& 0x0ffff);   
ptr_hpi[7]=(int)((source_word>>16) &0x0ffff);   
}   
void C6x_write_section(int *ptr_hpi,int *source,int dest_add,intlength);   
{int i;   
ptr_hpi[0]=0x0001;   
ptr_hpi[1]=0x0001;   
ptr_hpi[2]=(int)(dest_add& 0x0ffff);   
ptr_hpi[3]=(int)((dest_add>>16) &0x0ffff);   
for(i=0;i<=length;i++)   
{ptr_hpi[4]=(int)*source++;   
  ptr_hpi[5]=(int)*source++;   
}   
}  
#define Emif_globa_control 0x01800000;   
#define Emif_CE1_control 0x01800004;   
#define Emif_CE0_control 0x01800008;   
#define Emif_CE2_control 0x01800010;   
#define Emif_CE3_control 0x01800014;   
#define SDRAM_control   0x01800018;   
#define SDRAM_refresh   0x0180001C;
void main(void)
{      
    int *ptr_hpi;   
    inti,number_code,number_init;   
    ptr_hpi=(int*)C6416_HPI;   
    init_host();   
   C6x_write_word(ptr_hpi,0x0000377d,Emif_globa_control);   
   C6x_write_word(ptr_hpi,0x00000040,Emif_CE1_control);   
   C6x_write_word(ptr_hpi,0x00000030,Emif_CE0_control);   
   C6x_write_word(ptr_hpi,0x00000030,Emif_CE2_control);   
    C6x_write_word(ptr_hpi,0xffffff23,Emif_CE3_control);   
   C6x_write_word(ptr_hpi,0x03166000,SDRAM_control);   
   C6x_write_word(ptr_hpi,0x00000aaa,SDRAM_refresh);  
   number_code=sizeof(code);   
   C6x_write_section(ptr_hpi,(int *)&code,0x0,number_code);   
   number_init=sizeof(inita)/sizeof(inita[0]);   
   C6x_write_section(ptr_hpi,(int*)&inita,0x80000000,number_init);   
#if DEGUG   
    printf("C6416 bootcode loaded\n");   
#endif   
    ptr_hpi[0]=0x0003;   
    ptr_hpi[1]=0x0003;   
#if DEBUG   
    printf("C6701 isrunning\n");   
#endif   
}   
为什么在初始化EMIF寄存器的时候使用了C6x_write_word这个函数呢?这个函数本身不就是通过hpi接口传输过去的吗?难道这段代码是初始化的从DSPEMIF寄存器?那么如何初始化主DSPEMIF寄存器呢?
我个人做的尝试是,首先查找EMIF相关寄存器的地址,比如EMIF接口CE1的寄存器地址是01800004h,那我我应该在.c文件里面直接使用这一句吗?
*(int*)0x01800004=0x20d20311;
                   后面的0x20d20311是我根据寄存器各个位的意义自行进行的配置。
3.      Dsp开发就是写一个.c吗?为什么我看还有DSP/BIOS的相关内容,使用相关的API函数?我这里要用得到吗?怎么理解DSP/BIOS是一个实时的操作系统呢?
相信这些问题对于有过相关开发经验的人都是非常简单的问题,希望能够点拨点拨我。

相关帖子

沙发
hjf2001| | 2013-5-2 19:21 | 只看该作者
你好!我记得HPI可以做主从读写的,DSP第一步是需要写CMD文件吧。

使用特权

评论回复
板凳
51xlf| | 2013-5-2 22:25 | 只看该作者
c6000手册有的吧。

使用特权

评论回复
地板
sjl0991| | 2013-8-8 19:13 | 只看该作者
我的一点理解,刚开始学,也不懂哈。
1,硬件和软件的链接,主要是cmd文件
2,dsp 的开发,主要有几种文件,cmd文件或gel文件,h文件,c文件或asm文件。
不对的请指教。

使用特权

评论回复
5
chenci2013| | 2013-8-8 23:55 | 只看该作者
这个不是用来读取外部存储器的么?

使用特权

评论回复
6
chenci2013| | 2013-8-8 23:55 | 只看该作者
楼主两机通信可以使用别的。

使用特权

评论回复
7
chenci2013| | 2013-8-8 23:56 | 只看该作者
例如串口 之类的

使用特权

评论回复
8
chenci2013| | 2013-8-8 23:56 | 只看该作者
当然你也可以定义一个写地址空间,使用emif访问的。

使用特权

评论回复
9
Melodysweety| | 2014-3-21 15:56 | 只看该作者
终于看到有人在用6701了。

使用特权

评论回复
10
wqq870228| | 2014-6-24 09:49 | 只看该作者
难得看到用6701的啊,志同道合的友友们加我670211752,一起学习

使用特权

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

本版积分规则

2

主题

3

帖子

1

粉丝