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

2019-08-01 16:18发布

背景介绍:DSP新手一枚,在用c6701做EMIFHPI接口的信息传输,看了TI的关于两个接口的文档和一些DSP开发的书籍,emifdsp的基本的原理已经清楚。硬件结构如图所示,反相器什么的是用一个fpga直接assign过去的,我的目标是主dsp能够成功的写从dsp emif-hpi.jpg                               我的问题如下: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 ");   #endif       ptr_hpi[0]=0x0003;       ptr_hpi[1]=0x0003;   #if DEBUG       printf("C6701 isrunning ");   #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是一个实时的操作系统呢? 相信这些问题对于有过相关开发经验的人都是非常简单的问题,希望能够点拨点拨我。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
hjf2001
1楼-- · 2019-08-01 21:37
你好!我记得HPI可以做主从读写的,DSP第一步是需要写CMD文件吧。
51xlf
2楼-- · 2019-08-02 01:26
 精彩回答 2  元偷偷看……
sjl0991
3楼-- · 2019-08-02 06:29
我的一点理解,刚开始学,也不懂哈。
1,硬件和软件的链接,主要是cmd文件
2,dsp 的开发,主要有几种文件,cmd文件或gel文件,h文件,c文件或asm文件。
不对的请指教。
chenci2013
4楼-- · 2019-08-02 10:49
这个不是用来读取外部存储器的么?
chenci2013
5楼-- · 2019-08-02 11:33
楼主两机通信可以使用别的。
chenci2013
6楼-- · 2019-08-02 16:36
例如串口 之类的

一周热门 更多>