⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hpi.c

📁 TIDSP2407的CAN总线例程
💻 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 + -