📄 hpi.c
字号:
#include <main.h>
#include "ex.h"
#include "dspcode.h"
//-----------------------------------------------------------------------------
#define RESET_5402 RESET_BIT(PBDATDIR ,3)//IOPB3=0
#define WORK_5402 SET_BIT(PBDATDIR ,3)//IOPB3=1
//-----------------------------------------------------------------------------
// A15=0,A14=1
// A0---HCNTL0
// A1---HCNTL1
// A2---HBIL
// RD---HDS1
// WE---HDS2+HR/W
ioport U16 port4000;
ioport U16 port4001;
ioport U16 port4002;
ioport U16 port4003;
ioport U16 port4004;
ioport U16 port4005;
ioport U16 port4006;
ioport U16 port4007;
//-----------------------------------------------------------------------------
#define HPIC0 port4000
#define HPID10 port4001
#define HPIA0 port4002
#define HPID0 port4003
#define HPIC1 port4004
#define HPID11 port4005
#define HPIA1 port4006
#define HPID1 port4007
//-----------------------------------------------------------------------------
/*
+------------------------------------------------------------------------------+
函 数 名 : hpi_init()
功能描述 : hpi初始化
函数原形 : void hpi_init()
参数说明 :
支持资源 :
作 者 : 桂林
最后更改日期: 2003-02-12
+------------------------------------------------------------------------------+
*/
void hpi_init()
{
HPIC0 = 1;
HPIC1 = 1;
}
/*
+------------------------------------------------------------------------------+
函 数 名 : hpiread()
功能描述 : hpi读函数
函数原形 : U16 hpiread(U16 addr)
参数说明 :
支持资源 :
作 者 : 桂林
最后更改日期: 2003-02-12
+------------------------------------------------------------------------------+
*/
U16 hpiread(U16 addr)
{
HPIA0 = addr;
HPIA1 = (addr >> 8);
return( (HPID0&0x00ff) | (HPID1 << 8) );
}
/*
+------------------------------------------------------------------------------+
函 数 名 : hpiwrite()
功能描述 : hpi写函数
函数原形 : void hpiwrite(U16 addr,U16 dat)
参数说明 :
支持资源 :
作 者 : 桂林
最后更改日期: 2003-02-12
+------------------------------------------------------------------------------+
*/
void hpiwrite(U16 addr,U16 dat)
{
HPIA0 = addr;
HPIA1 = (addr >> 8);
HPID0 = dat;
HPID1 = (dat >> 8);
}
/*
+-----------------------------------------------------------------------------+
函 数 名 :sethpiaddr
功能描述 :hpi通信地址初始化函数
函数原形 :sethpiaddr(U16 hpiaddr)
参数说明 :hpiaddr为hpi初始化地址
支持资源 :无
作 者 :桂林
最后更改日期:2003-02-12
+-----------------------------------------------------------------------------+
*/
void sethpiaddr(U16 addr)
{
HPIA0 = addr;
HPIA1 = (addr >> 8);
}
/*
+-----------------------------------------------------------------------------+
函 数 名 :hpitest
功能描述 :hpi测试函数
函数原形 :U16 hpitest()
参数说明 :
支持资源 :无
作 者 :桂林
最后更改日期:2003-02-12
+-----------------------------------------------------------------------------+
*/
U16 hpitest()
{
U16 tempi=0,tempj=0,tempk=0;
WORK_5402;delay_ms(10);RESET_5402;delay_ms(10);WORK_5402;delay_ms(10);
hpi_init();
//清零---------------------------------------
sethpiaddr(0x007f);
for (tempi=0;tempi<3000;tempi++)
{
HPID10 = 0;
HPID11 = 0;
}
//-------------------------------------------
//hpiwrite(0x0080,0x0000);tempi=hpiread(0x0080);
//hpiwrite(0x0080,0xffff);tempi=hpiread(0x0080);
//写-----------------------------------------
sethpiaddr(0x007f);
for(tempi=0;tempi<1000;tempi++)
{
//hpiwrite(0x007f+tempi,tempi);
HPID10 = 0x00ff& (tempi);
HPID11 = 0x00ff&((tempi)>>8);
};
//回读---------------------------------------
sethpiaddr(0x007f+1);//sethpiaddr(0x007f);
for(tempi=0;tempi<1000;tempi++)
{
//tempj=hpiread(0x007f+tempi);
tempj = HPID10 & 0x00ff;
tempj |= (HPID11<<8);
if(tempj!=(tempi))
tempk++;
};
//--------------------------------------------
if(tempk)return(tempk);//HPI_error
return(0);//HPI_ok
}
/*
+-----------------------------------------------------------------------------+
函 数 名 :hpidownload
功能描述 :dsp程序下载函数
函数原形 :hpidownload()
参数说明 :无
支持资源 :
作 者 :桂林
最后更改日期:2003-02-12
+-----------------------------------------------------------------------------+
*/
U16 hpidownload()
{
U16 tempi=0,tempdsplen=0,tempj=0,tempk=0;
//DSP0下载,并等待回应.
WORK_5402;delay_ms(10);RESET_5402;delay_ms(10);WORK_5402;delay_ms(10);
//清零---------------------------------------
hpi_init();
sethpiaddr(0x007f);
for (tempi=0;tempi<3000;tempi++)
{
HPID10 = 0;
HPID11 = 0;
}
// 下载参数----------------------------------
// 从F2407中取得DSP5402程序------------------
sethpiaddr(0x007f); // HPI下载
tempdsplen = sizeof(dspcode);
for (tempi=0;tempi<tempdsplen;tempi++)
{
tempj = dspcode[tempi];
HPID10 = tempj;
HPID11 = tempj>>8;
}
//回读---------------------------------------
sethpiaddr(0x007f+1);
for(tempi=0;tempi<tempdsplen;tempi++)
{
tempj = HPID10 & 0x00ff;
tempj |= (HPID11<<8);
if(tempj!=dspcode[tempi])
tempk++;
};
// DSP 程序启动地址--------------------------
sethpiaddr(0x007e);
HPID10 = 0x80;//dspcode[1];
HPID11 = 0x00;//dspcode[1]>>8;
return(tempk);
}
/*
+-----------------------------------------------------------------------------+
函 数 名 :write_para_dsp0
功能描述 :将系统参数表写入DSP0函数
函数原形 :void write_para_dsp0(U16 *p)
参数说明 :无
支持资源 :无
作 者 :桂林
最后更改日期:2003-03-17
+-----------------------------------------------------------------------------+
*/
void write_para_dsp0(U16 *p)
{
U16 tempi=0,templen=0,tempj=0;
templen=sizeof(GVAR.dsp0in);
sethpiaddr(write_para_dsp0_addr);
for(tempi=0;tempi<templen;tempi++)
{
tempj = *p++;
HPID10 = tempj;
HPID11 = tempj>>8;
};
}
/*
+-----------------------------------------------------------------------------+
函 数 名 :read_para_dsp0
功能描述 :读DSP0输出表函数
函数原形 :void read_para_dsp0(U16 *p)
参数说明 :无
支持资源 :无
作 者 :桂林
最后更改日期:2003-03-17
+-----------------------------------------------------------------------------+
*/
void read_para_dsp0(U16 *p)
{
U16 tempi=0,templen=0,tempj=0;
templen=sizeof(GVAR.dsp0out);
sethpiaddr(read_para_dsp0_addr);
for(tempi=0;tempi<templen;tempi++)
{
tempj = HPID10 & 0x00ff;
tempj |= (HPID11 << 8);
*p++ = tempj;
};
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -