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

📄 functions.c

📁 freescaleHC12插值代码,8,16位无符号和有符号一维及二维插值
💻 C
📖 第 1 页 / 共 2 页
字号:
/******************************************************************************
													Copyright (c) J&K 2006
File Name		           :	functions.c		
	
Engineer		           :	Jackie
					      
Location		           :	R&D Dep.

Date Created	           :	2006-06-09

Description                :					

Current Revision           :	Revision: 1.0 

Modification Notes         :
****************************************************************************/
#include "main_asm.h"  
#include "commondefine.h"
extern void DisplayNO(int Number);
/**************************************************************************
Function Name	    : INTER_Table_UINT2

Engineer		    : Jackie

Date			    : 2006-06-09

Description         : 16bit无符号整型数二维插值

parameters          : struct GROUP_INTER_UINT2* array:结构参数用以描述参数属性. 
                      un16Col_Coord:列坐标值
                      un16Row_Coord:行坐标值
Return		    	: VL:函数返回值,16bit无符号整型插值结果

Warning		    	:
**************************************************************************/
extern unsigned int INTER_Table_UINT2(struct GROUP_INTER_UINT2* array,unsigned int un16Col_Coord,unsigned int un16Row_Coord)									
{
  	unsigned int VE,VB,VL,pos;//VE:右基准点值;VB:左基准点值;VL:返回值
	unsigned int row,col,rowratio,colratio;//row:行坐标位置;col:列坐标位置;rowratio:行比例值;colratio:列比例值;
	
	if(un16Row_Coord<array->rowmin)un16Row_Coord=array->rowmin;		
	if(un16Row_Coord>array->rowmax)un16Row_Coord=array->rowmax;	
	//行坐标位置计算:坐标参数从小到大排列时,由坐标基准值减去坐标参数最小值:un16Row_Coord-array->rowmin;
                     //坐标参数从小到大排列时,由坐标基准值减去坐标参数最小值:array->rowmax-un16Row_Coord;
  	row=(unsigned char)((un16Row_Coord-array->rowmin)/array->rowTemp);
    if(row>=array->TableRow)row=array->TableRow-1;

	if(un16Col_Coord<array->colmin)un16Col_Coord=array->colmin;
	if(un16Col_Coord>array->colmax)un16Col_Coord=array->colmax;
	//列坐标位置计算:坐标参数从小到大排列时,由坐标基准值减去坐标参数最小值:un16Col_Coord-array->rowmin;
                     //坐标参数从小到大排列时,由坐标基准值减去坐标参数最小值:array->rowmax-un16Col_Coord;
    col=(unsigned char)((un16Col_Coord-array->colmin)/array->colTemp);
    if(col>=array->TableCol)col=array->TableCol-1;
    //行比例值计算
    rowratio = (unsigned char)((((un16Row_Coord-array->rowmin)%array->rowTemp)*256)/array->rowTemp); 
    //列比例值计算
    colratio = (unsigned char)((((un16Col_Coord-array->colmin)%array->colTemp)*256)/array->colTemp); 
    
	array->V=Table_UINT2;

  	pos=row*array->TableRow+col;

	VB=array->V[pos];//左基准点值
	VE=array->V[pos+1];//右基准点值
	
  //通用ASM汇编插值函数
  __asm{
      LDD  VE
      PSHD 
      INS
      INS
      LDD  VB
      DES
      DES
      PSHD
      INS
      INS
      INS
      INS
      LDAB  colratio
      DES
      DES
      DES
      DES

      ETBL 4,SP+
      STD   VL   
  }
  	  pos+=array->TableCol;

	  VB=array->V[pos];
	  VE=array->V[pos+1];

  __asm{
      LDD   VE
      PSHD
      INS
      INS
      LDD   VB
      DES
      DES
      PSHD
      INS
      INS
      INS
      INS
      LDAB  colratio;
      DES
      DES
      DES
      DES
      ETBL 4,SP+
      STD  VE   
  }
  __asm{
      LDD   VE
      PSHD
      INS
      INS
      LDD   VL
      DES
      DES
      PSHD
      INS
      INS
      INS
      INS
      LDAB  rowratio;
      DES
      DES
      DES
      DES
      ETBL 4,SP+
      STD   VL   
  }
}
/**************************************************************************
Function Name	    : INTER_Table_INT2

Engineer		    : Jackie

Date			    : 2006-06-09

Description         : 16bit有符号整型数二维插值

parameters          : struct GROUP_INTER_INT2* array:结构参数用以描述参数属性. 
                      un16Col_Coord:列坐标值
                      un16Row_Coord:行坐标值
Return		    	: VL:函数返回值,16bit有符号整型插值结果

Warning		    	:
**************************************************************************/
extern  int INTER_Table_INT2(struct GROUP_INTER_INT2* array,unsigned int un16Col_Coord,unsigned int un16Row_Coord)									
{
  	 int VE,VB,VL,pos;//VE:右基准点值;VB:左基准点值;VL:返回值
	unsigned int row,col,rowratio,colratio;//row:行坐标位置;col:列坐标位置;rowratio:行比例值;colratio:列比例值;
	
	if(un16Row_Coord<array->rowmin)un16Row_Coord=array->rowmin;		
	if(un16Row_Coord>array->rowmax)un16Row_Coord=array->rowmax;	
	//行坐标位置计算:坐标参数从小到大排列时,由坐标基准值减去坐标参数最小值:un16Row_Coord-array->rowmin;
                     //坐标参数从小到大排列时,由坐标基准值减去坐标参数最小值:array->rowmax-un16Row_Coord;
  	row=(unsigned char)((un16Row_Coord-array->rowmin)/array->rowTemp);
    if(row>=array->TableRow)row=array->TableRow-1;

	if(un16Col_Coord<array->colmin)un16Col_Coord=array->colmin;
	if(un16Col_Coord>array->colmax)un16Col_Coord=array->colmax;
	//列坐标位置计算:坐标参数从小到大排列时,由坐标基准值减去坐标参数最小值:un16Col_Coord-array->rowmin;
                     //坐标参数从小到大排列时,由坐标基准值减去坐标参数最小值:array->rowmax-un16Col_Coord;
    col=(unsigned char)((un16Col_Coord-array->colmin)/array->colTemp);
    if(col>=array->TableCol)col=array->TableCol-1;
    //行比例值计算
    rowratio = (unsigned char)((((un16Row_Coord-array->rowmin)%array->rowTemp)*256)/array->rowTemp); 
    //列比例值计算
    colratio = (unsigned char)((((un16Col_Coord-array->colmin)%array->colTemp)*256)/array->colTemp); 
    
	array->V=Table_INT2;

  	pos=row*array->TableRow+col;

	VB=array->V[pos];//左基准点值
	VE=array->V[pos+1];//右基准点值
	
  //通用ASM汇编插值函数
  __asm{
      LDD  VE
      PSHD 
      INS
      INS
      LDD  VB
      DES
      DES
      PSHD
      INS
      INS
      INS
      INS
      LDAB  colratio
      DES
      DES
      DES
      DES

      ETBL 4,SP+
      STD   VL   
  }
  	  pos+=array->TableCol;

	  VB=array->V[pos];
	  VE=array->V[pos+1];

  __asm{
      LDD   VE
      PSHD
      INS
      INS
      LDD   VB
      DES
      DES
      PSHD
      INS
      INS
      INS
      INS
      LDAB  colratio;
      DES
      DES
      DES
      DES
      ETBL 4,SP+
      STD  VE   
  }
  __asm{
      LDD   VE
      PSHD
      INS
      INS
      LDD   VL
      DES
      DES
      PSHD
      INS
      INS
      INS
      INS
      LDAB  rowratio;
      DES
      DES
      DES
      DES
      ETBL 4,SP+
      STD   VL   
  }
}

/**************************************************************************
Function Name	    : INTER_Table_UCHAR_2

Engineer		    : Jackie

Date			    : 2006-06-09

Description         : 8bit无符号整型数二维插值

parameters          : struct GROUP_INTER_UCHAR2* array:结构参数用以描述参数属性. 
                      un16Col_Coord:列坐标值
                      un16Row_Coord:行坐标值
Return		    	: VL:函数返回值,8bit无符号整型插值结果

Warning		    	:
**************************************************************************/
extern unsigned char INTER_Table_UCHAR_2(struct GROUP_INTER_CHAR_2* array,unsigned int un16Col_Coord,unsigned int un16Row_Coord)									
{
  	unsigned char VE,VB;//VE:右基准点值;VB:左基准点值;
	unsigned char row,col,rowratio,colratio,pos,VL;//row:行坐标位置;col:列坐标位置;rowratio:行比例值;colratio:列比例值;VL:返回值
	
	if(un16Row_Coord<array->rowmin)un16Row_Coord=array->rowmin;	
	if(un16Row_Coord>array->rowmax)un16Row_Coord=array->rowmax;
	//行坐标位置计算:坐标参数从小到大排列时,由坐标基准值减去坐标参数最小值:un16Row_Coord-array->rowmin;
                     //坐标参数从小到大排列时,由坐标基准值减去坐标参数最小值:array->rowmax-un16Row_Coord;			
  	row=(unsigned char)((un16Row_Coord-array->rowmin)/array->rowTemp);
    if(row>=array->TableRow)row=array->TableRow-1;

	if(un16Col_Coord<array->colmin)un16Col_Coord=array->colmin;
	if(un16Col_Coord>array->colmax)un16Col_Coord=array->colmax;
	//列坐标位置计算:坐标参数从小到大排列时,由坐标基准值减去坐标参数最小值:un16Col_Coord-array->rowmin;
                     //坐标参数从小到大排列时,由坐标基准值减去坐标参数最小值:array->rowmax-un16Col_Coord;
    col=(unsigned char)((un16Col_Coord-array->colmin)/array->colTemp);
    if(col>=array->TableCol)col=array->TableCol-1;
    //行比例值计算
    rowratio = (unsigned char)((((un16Row_Coord-array->rowmin)%array->rowTemp)*256)/array->rowTemp);
    //列比例值计算 
    colratio = (unsigned char)(((unsigned char)((un16Col_Coord-array->colmin)%array->colTemp)*256)/array->colTemp); 

	array->V=Table_UCHAR_2;

  	pos=row*array->TableRow+col;

	VB=array->V[pos];//左基准点值
	VE=array->V[pos+1];//右基准点值
	
  //通用ASM汇编插值函数
  __asm{
      LDAB  rowratio;
      LDAA  VE
      PSHA
      INS
      LDAA  VB
      DES
      PSHA
      TBL 2,SP+
      STAA  VL   
  }
  pos+=array->TableRow;
  VB=array->V[pos];
  VE=array->V[pos+1];
  __asm{
      LDAB  rowratio;
      LDAA  VE
      PSHA
      INS
      LDAA  VB

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -