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

📄 ls7266.c

📁 用TMS320LF2407A开发电机控制的源代码
💻 C
字号:
/************************************************************************
Project name: 	ls7266.pjt
File name: 		LS7266.c
Author: 		胡天亮, 山东大学数控技术研究中心
Description:	The initializtion program and main function of ls7266.pjt
History:		(1)
*************************************************************************/

//include head files
#include "f2407_c.h"
#include "ls7266.h"

//extern constant define
extern unsigned int flag_LeftRun;
extern  unsigned int flag_RightRun;
//parameter definition
int ls7266_ctr = 0;

void delay1us(unsigned int us)
{
	unsigned int j;
	us *= 6;
	for(j = 0; j <= us; j++ );
	return;
}


/*--------------------------------------
Name: 			ls7266Initial()
Description:	ls7266 initializing
Input par:		none
Output par:		none
---------------------------------------*/
void inline ls7266Init()
{
	ls7266_ctr |= 0x0001;			
	LS7266_CTR = ls7266_ctr;		//c/d- set high to write cmd register
	
	
	//XRST & YRST pin Set High
	ls7266_ctr |= 0x000C;
	LS7266_CTR = ls7266_ctr;
	

	//Setup IOR reg
	LS7266_CMD = LS7266_IOR(LS7266_DisAB + LS7266_SelLOL + LS7266_SelCB_UPDN);
	//Setup	RLD reg
	LS7266_CMD = LS7266_RLD(LS7266_RstBP + LS7266_RstFLAGS);

	ls7266_ctr |= 0x0002;			//x-/y set high to read YOL			
	LS7266_CTR = ls7266_ctr;
	
	//Set filter clock PSC	
	ls7266_ctr &= 0xFFFE;			
	LS7266_CTR = ls7266_ctr;		//c/d- set low to write data register
	
	LS7266_DAT = LS7266_FCK_DIV;

	ls7266_ctr |= 0x0001;			
	LS7266_CTR = ls7266_ctr;		//c/d- set high to write cmd register
/*
	LS7266_CMD = 0x18;
	LS7266_CMD = 0x06;
	LS7266_CMD = 0x01;
	LS7266_CMD = 0x08;
*/	
	//Transfer PRO to PSC to set filter clock PSC and reset Error mark
	LS7266_CMD = LS7266_RLD(LS7266_Trsf_PR0_PSC);
	LS7266_CMD = LS7266_RLD(LS7266_RstE);
	//Reset BP and reset counter
	LS7266_CMD = LS7266_RLD(LS7266_RstBP);
	LS7266_CMD = LS7266_RLD(LS7266_RstCNTR);


	ls7266_ctr &= 0xFFFD;			//x-/y set low to oper X			
	LS7266_CTR = ls7266_ctr;
	
	//Set filter clock PSC	
	ls7266_ctr &= 0xFFFE;			
	LS7266_CTR = ls7266_ctr;		//c/d- set low to write data register
	
	LS7266_DAT = LS7266_FCK_DIV;

	ls7266_ctr |= 0x0001;			
	LS7266_CTR = ls7266_ctr;		//c/d- set high to write cmd register
	
/*	LS7266_CMD = 0x18;
	LS7266_CMD = 0x06;
	LS7266_CMD = 0x01;
	LS7266_CMD = 0x08;
*/	
	
	
	//Transfer PRO to PSC to set filter clock PSC and reset Error mark
	LS7266_CMD = LS7266_RLD(LS7266_Trsf_PR0_PSC);
	LS7266_CMD = LS7266_RLD(LS7266_RstE);
	//Reset BP and reset counter
	LS7266_CMD = LS7266_RLD(LS7266_RstBP);
	LS7266_CMD = LS7266_RLD(LS7266_RstCNTR);


	//Setup IDR reg
	LS7266_CMD = LS7266_IDR(0);
	
	//Setup XCMR reg
	ls7266_ctr &= 0xFFFD;			//x-/y set low to read XOL			
	LS7266_CTR = ls7266_ctr;
	
	LS7266_CMD = 0x0038;			//X: NonQUAR; Normal Count; Binary
	LS7266_CMD = LS7266_IOR(LS7266_EnAB + LS7266_SelLOL + LS7266_SelCB_UPDN);
	
//	LS7266_CMD = 0x53;

	ls7266_ctr |= 0x0002;			//x-/y set high to read YOL			
	LS7266_CTR = ls7266_ctr;	
	
	LS7266_CMD = 0x0038;			//Y: QUARX4; Normal Count; Binary
		
	//Enable counter
	
	LS7266_CMD = LS7266_IOR(LS7266_EnAB + LS7266_SelLOL + LS7266_SelCB_UPDN);

}


void ls7266_wrYCNTUp()
{
	unsigned long data = 0xFFFF87;
	ls7266_ctr |= 0x0001;			
	LS7266_CTR = ls7266_ctr;		//c/d- set high to write cmd register
	
	ls7266_ctr |= 0x0002;			//x-/y set high to read YOL			
	LS7266_CTR = ls7266_ctr;
	
	LS7266_CMD = 0x01;
	

	ls7266_ctr &= 0xFFFE;			
	LS7266_CTR = ls7266_ctr;		//c/d- set low to write data register
	
	LS7266_DAT = (data & 0xff);
	data >>= 8;
	
	LS7266_DAT = (data & 0xff);
	data >>= 8;
	
	LS7266_DAT = (data & 0xff);
	data >>= 8;
	
	ls7266_ctr |= 0x0001;			
	LS7266_CTR = ls7266_ctr;		//c/d- set high to write cmd register

	LS7266_CMD = 0x08;
	
	ls7266_ctr &= 0xFFFD;			//x-/y set low to oper X			
	LS7266_CTR = ls7266_ctr;
	
}

void ls7266_wrYCNTDw()
{
	unsigned long data = 0x000078;
	ls7266_ctr |= 0x0001;			
	LS7266_CTR = ls7266_ctr;		//c/d- set high to write cmd register
	
	ls7266_ctr |= 0x0002;			//x-/y set high to read YOL			
	LS7266_CTR = ls7266_ctr;
	
	LS7266_CMD = 0x01;
	
	ls7266_ctr &= 0xFFFE;			
	LS7266_CTR = ls7266_ctr;		//c/d- set low to write data register
	
	LS7266_DAT = (data & 0xff);
	data >>= 8;
	
	LS7266_DAT = (data & 0xff);
	data >>= 8;
	
	LS7266_DAT = (data & 0xff);
	data >>= 8;
	
	ls7266_ctr |= 0x0001;			
	LS7266_CTR = ls7266_ctr;		//c/d- set high to write cmd register
	
	LS7266_CMD = 0x08;
	
	ls7266_ctr &= 0xFFFD;			//x-/y set low to oper X			
	LS7266_CTR = ls7266_ctr;
}




void ls7266_wrYCNT(long data)
{
	
	ls7266_ctr |= 0x0001;			
	LS7266_CTR = ls7266_ctr;		//c/d- set high to write cmd register
	
	ls7266_ctr |= 0x0002;			//x-/y set high to read YOL			
	LS7266_CTR = ls7266_ctr;
	
	LS7266_CMD = 0x01;
	
	ls7266_ctr &= 0xFFFE;			
	LS7266_CTR = ls7266_ctr;		//c/d- set low to write data register
	
	LS7266_DAT = (data & 0xff);
	data >>= 8;
	
	LS7266_DAT = (data & 0xff);
	data >>= 8;
	
	LS7266_DAT = (data & 0xff);
	data >>= 8;
	
	ls7266_ctr |= 0x0001;			
	LS7266_CTR = ls7266_ctr;		//c/d- set high to write cmd register
	
	LS7266_CMD = 0x08;
	
	ls7266_ctr &= 0xFFFD;			//x-/y set low to oper X			
	LS7266_CTR = ls7266_ctr;
}

void ls7266_wrXCNT(long data)
{
	
	ls7266_ctr |= 0x0001;			
	LS7266_CTR = ls7266_ctr;		//c/d- set high to write cmd register
	
	ls7266_ctr &= 0xFFFD;			//x-/y set low to oper XOL			
	LS7266_CTR = ls7266_ctr;
	
	LS7266_CMD = 0x01;
	
	ls7266_ctr &= 0xFFFE;			
	LS7266_CTR = ls7266_ctr;		//c/d- set low to write data register
	
	LS7266_DAT = (data & 0xff);
	data >>= 8;
	
	LS7266_DAT = (data & 0xff);
	data >>= 8;
	
	LS7266_DAT = (data & 0xff);
	data >>= 8;
	
	ls7266_ctr |= 0x0001;			
	LS7266_CTR = ls7266_ctr;		//c/d- set high to write cmd register
	
	LS7266_CMD = 0x08;
	
	ls7266_ctr |= 0x0002;			//x-/y set high to Oper Y			
	LS7266_CTR = ls7266_ctr;
}

/*--------------------------------------
Name: 			ls7266RdOL()
Description:	Read OL
Input par:		none
Output par:		OLData: the 24 bits data in OL
---------------------------------------*/
long ls7266RdOL()
{
	long OLData = 0;
	long data = 0;
	ls7266_ctr |= 0x0001;			
	LS7266_CTR = ls7266_ctr;		//c/d- set high to write cmd register
	

	//reset BP
	LS7266_CMD = 0x01;
	
	ls7266_ctr &= 0xFFFE;			
	LS7266_CTR = ls7266_ctr;		//c/d- set low to write data register
	
	data = LS7266_DAT;
	OLData = (0xFF & data);
	
	data = LS7266_DAT;	
	OLData |= (data & 0xff)<<8;

	data = LS7266_DAT;
	OLData |= (data & 0xff)<<16;	
	return OLData;
}


long ls7266_SoftRdX()
{
	long XCnt;
	
	ls7266_ctr |= 0x0001;			
	LS7266_CTR = ls7266_ctr;		//c/d- set high to write cmd register
	
	ls7266_ctr &= 0xFFFD;			//x-/y set low to read XOL			
	LS7266_CTR = ls7266_ctr;
	
	//Transfer CNTR to XOL 
	LS7266_CMD = 0x10;
	XCnt = ls7266RdOL();
	
	ls7266_ctr |= 0x0002;			//x-/y set high to Oper Y			
	LS7266_CTR = ls7266_ctr;
	
	return XCnt;
}

long ls7266_HardRdX()
{
	long XCnt;
	
	ls7266_ctr &= 0xFFFD;			//x-/y set low to read XOL			
	LS7266_CTR = ls7266_ctr;
	
	//Transfer CNTR to XOL 
//	*PADATDIR |= 0x0080;
//	delay1us(1);
//	*PADATDIR &= 0xFF7F;
	
	XCnt = ls7266RdOL();
	
	ls7266_ctr |= 0x0002;			//x-/y set high to Oper Y			
	LS7266_CTR = ls7266_ctr;
	
	return XCnt;
}

long ls7266_SoftRdY()
{
	long YCnt;
	
	ls7266_ctr |= 0x0002;			//x-/y set high to read YOL			
	LS7266_CTR = ls7266_ctr;
	
	ls7266_ctr |= 0x0001;			
	LS7266_CTR = ls7266_ctr;		//c/d- set high to write cmd register
	//Transfer CNTR to YOL 
	LS7266_CMD = 0x10;
	
	YCnt = ls7266RdOL();
	
	ls7266_ctr &= 0xFFFD;			//x-/y set low to oper X			
	LS7266_CTR = ls7266_ctr;
	
	return YCnt;
}


long ls7266_HardRdY()
{
	long YCnt;
	
	ls7266_ctr |= 0x0002;			//x-/y set high to read YOL			
	LS7266_CTR = ls7266_ctr;
	
	//Transfer CNTR to YOL 
	*PADATDIR |= 0x0080;
	delay1us(1);
	*PADATDIR &= 0xFF7F;
	
	YCnt = ls7266RdOL();
	
	ls7266_ctr &= 0xFFFD;			//x-/y set low to oper X			
	LS7266_CTR = ls7266_ctr;
	
	return YCnt;
}

void ls7266_rstX()
{
	ls7266_ctr &= 0xFFFB;			
	LS7266_CTR = ls7266_ctr;
	
	delay1us(1);
	
	ls7266_ctr |= 0x0004;			
	LS7266_CTR = ls7266_ctr;
}

void ls7266_rstY()
{
	ls7266_ctr &= 0xFFF7;			
	LS7266_CTR = ls7266_ctr;
	
	delay1us(1);
	
	ls7266_ctr |= 0x0008;			
	LS7266_CTR = ls7266_ctr;
	
}

int ls7266_RdXFlag()
{
	int flag;
	ls7266_ctr |= 0x0001;			
	LS7266_CTR = ls7266_ctr;		//c/d- set high to read cmd register
	
	ls7266_ctr &= 0xFFFD;			//x-/y set low to read X flag			
	LS7266_CTR = ls7266_ctr;
	
	flag = LS7266_DAT;
	flag &= 0xff;
	flag &= 0x20;
	//if(flag==0x20)
	//	PulXDir=0x00;				//count up
//	else if(flag==0x00)
	//	PulXDir=0x01;				//count down
	
	ls7266_ctr |= 0x0002;			//x-/y set high to Oper Y			
	LS7266_CTR = ls7266_ctr;
	
	return flag;
}
/*
int ls7266_RdYFlag()
{
	int flag;
	ls7266_ctr |= 0x0001;			
	LS7266_CTR = ls7266_ctr;		//c/d- set high to read cmd register
	
	ls7266_ctr |= 0x0002;			//x-/y set high to read Y flag			
	LS7266_CTR = ls7266_ctr;
	
	flag = LS7266_DAT;
	flag &= 0xff;
//	flag &= 0x20;

	ls7266_ctr &= 0xFFFD;			//x-/y set low to read X flag			
	LS7266_CTR = ls7266_ctr;
	
	return flag;
/*	if(flag==0x20)
		flag_LeftRun=1;				//count up
	else if(flag==0x00)
		flag_LeftRun=0;				//count down/*/				//count down ,underdolly right
/*}*/





⌨️ 快捷键说明

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