利用ISA总线实现对DSP芯片VC5402的软配置
,在DOS命令提示符下键入:Coff_both-outexample.out。这时就会生成example.out.c格式的文件。该文件的形式见图三。这个程序只有一段程序,即.text段,这段程序一共由41个字组成,该程序段需要装载到开始地址为0X0080开始的内部RAM中去运行。而这41个字的16进制代码则是最后真正被执行的VC5402的程序代码。
⑶把example.out.c文件中的代码由HPI写到VC5402的内部RAM中。HOST主机软件,需要用户自己来编写,可以采用VC或VB调用驱动程序来完成,也可以通过TURB0C2.0直接通过I/O操作来完成,甚至可用MASM的汇编语言来编写,程序的主要任务就是读取example.out.c文件和写I/O端口。HOST主机软件的流程图见图四。为了便于读者编程验证,我们用TURBOC2.0编写了名为HOST_HPI.C的主机程序,读者可以运行该程序来读取example.out.c文件,把41字的代码装载入VC5402。使用方法如下:在DOS命令提示符下键入:HOST_HPI.exe后,屏幕将提示输入example.out.c文件的路径,例如:键入:C:\ti\myprojects\example.out.c后,HOST_HPI.exe将完成HOST装载VC5402的任务,如果看到发光二级管不停的闪烁,表明VC5402已经开始正常运行程序了。至此,整个装载过程完毕。
3.HOST_HPI.C源程序
/*HOST_HPI.C*/
#include"stdio.h"
#include"dos.h"
#defineSIZE100
main()
{
FILE*fp;
UnsignedintDSP_RES,HPIC_H,HPIC_L;
UnsignedintHPIA_H,HPIA_L,HPID_H,HPID_L;
char*a,ch,filename;
unsignedinti,j,length,addr,start[10],*data;
printf("Pleaseinputthenamefile:\n");
scanf("%s",filename);/*输入程序文件名*/
if((fp=fopen(filename,"r"))==NULL)/*打开程序文件*/
{
printf("cannotopenfile:\n");
exit(0);
}
DSP_RES=0x240;/*设置DSP各寄存器的I/O地址*/
HPIC_H=0x230;
HPIC_L=0x231;
HPIA_H=0x234;
HPIA_L=0x235;
HPID_H=0x236;
HPID_L=0x237;
outportb(DSP_RES,0x00);/*DSP复位(DSP_RES寄存器置00H)*/
delay(2000);/*延时以保证DSP准确的复位*/
outportb(DSP_RES,0x01);/*DSP跳出复位(DSP_RES寄存器置01H)*/
outportb(HPIC_H,0x00);/*DSP的HPIC寄存器置0000H*/
outportb(HPIC_L,0x00);
i=0;
while(!feof(fp))/*判断程序文件是否结束*/
{
fgets(a,SIZE,fp);
fgets(a,SIZE,fp);
fscanf(fp,"%s",a);
fscanf(fp,"%s",a);
fscanf(fp,"%x",&length);/*读取数据的长度*/
fgets(a,SIZE,fp);
fscanf(fp,"%s",a);
fscanf(fp,"%s",a);
fscanf(fp,"%x",&addr);/*读取程序的开始地址*/
fgets(a,SIZE,fp);
fgets(a,SIZE,fp);
for(j=0;j<length;j++)
fscanf(fp,"%x,",data+j);
start[i]=addr;/*保存程序开始地址*/
for(j=0;j<length;j++)/*为DSP装入数据*/
{
⑶把example.out.c文件中的代码由HPI写到VC5402的内部RAM中。HOST主机软件,需要用户自己来编写,可以采用VC或VB调用驱动程序来完成,也可以通过TURB0C2.0直接通过I/O操作来完成,甚至可用MASM的汇编语言来编写,程序的主要任务就是读取example.out.c文件和写I/O端口。HOST主机软件的流程图见图四。为了便于读者编程验证,我们用TURBOC2.0编写了名为HOST_HPI.C的主机程序,读者可以运行该程序来读取example.out.c文件,把41字的代码装载入VC5402。使用方法如下:在DOS命令提示符下键入:HOST_HPI.exe后,屏幕将提示输入example.out.c文件的路径,例如:键入:C:\ti\myprojects\example.out.c后,HOST_HPI.exe将完成HOST装载VC5402的任务,如果看到发光二级管不停的闪烁,表明VC5402已经开始正常运行程序了。至此,整个装载过程完毕。
3.HOST_HPI.C源程序
/*HOST_HPI.C*/
#include"stdio.h"
#include"dos.h"
#defineSIZE100
main()
{
FILE*fp;
UnsignedintDSP_RES,HPIC_H,HPIC_L;
UnsignedintHPIA_H,HPIA_L,HPID_H,HPID_L;
char*a,ch,filename;
unsignedinti,j,length,addr,start[10],*data;
printf("Pleaseinputthenamefile:\n");
scanf("%s",filename);/*输入程序文件名*/
if((fp=fopen(filename,"r"))==NULL)/*打开程序文件*/
{
printf("cannotopenfile:\n");
exit(0);
}
DSP_RES=0x240;/*设置DSP各寄存器的I/O地址*/
HPIC_H=0x230;
HPIC_L=0x231;
HPIA_H=0x234;
HPIA_L=0x235;
HPID_H=0x236;
HPID_L=0x237;
outportb(DSP_RES,0x00);/*DSP复位(DSP_RES寄存器置00H)*/
delay(2000);/*延时以保证DSP准确的复位*/
outportb(DSP_RES,0x01);/*DSP跳出复位(DSP_RES寄存器置01H)*/
outportb(HPIC_H,0x00);/*DSP的HPIC寄存器置0000H*/
outportb(HPIC_L,0x00);
i=0;
while(!feof(fp))/*判断程序文件是否结束*/
{
fgets(a,SIZE,fp);
fgets(a,SIZE,fp);
fscanf(fp,"%s",a);
fscanf(fp,"%s",a);
fscanf(fp,"%x",&length);/*读取数据的长度*/
fgets(a,SIZE,fp);
fscanf(fp,"%s",a);
fscanf(fp,"%s",a);
fscanf(fp,"%x",&addr);/*读取程序的开始地址*/
fgets(a,SIZE,fp);
fgets(a,SIZE,fp);
for(j=0;j<length;j++)
fscanf(fp,"%x,",data+j);
start[i]=addr;/*保存程序开始地址*/
for(j=0;j<length;j++)/*为DSP装入数据*/
{
- 上一篇论文: DSP TMS320F206复位问题研究
- 下一篇论文: P87C591内嵌CAN控制器的应用设计