📄 ls7266.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 + -